1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
LOCAL_MINGW64_BUILD_SCRIPT := ./mingw-w64-build/mingw-w64-build
LOCAL_MINGW64_BUILD_DIR := ./x86_64-w64-mingw32
LOCAL_MINGW64_CC := $(LOCAL_MINGW64_BUILD_DIR)/bin/x86_64-w64-mingw32-gcc
LOCAL_MINGW64_DDK_INCLUDE_DIR := $(LOCAL_MINGW64_BUILD_DIR)/x86_64-w64-mingw32/include/ddk
CMAKE = cmake
CC = $(LOCAL_MINGW64_CC)
CXX = $(dir $(CC))/x86_64-w64-mingw32-g++
DDK_INCLUDE_DIR = $(LOCAL_MINGW64_DDK_INCLUDE_DIR)
CFLAGS := -Wall -Wextra -m64 -shared \
-I$(DDK_INCLUDE_DIR) \
-D__INTRINSIC_DEFINED_InterlockedBitTestAndSet \
-D__INTRINSIC_DEFINED_InterlockedBitTestAndReset
CXXFLAGS := -fno-exceptions -fno-rtti
EASTL_CXXFLAGS := -IEASTL/include -IEASTL/test/packages/EABase/include/Common \
-DEASTL_THREAD_SUPPORT_AVAILABLE=0 \
-DEASTL_EXCEPTIONS_ENABLED=0 \
-DEASTL_ASSERT_ENABLED=0 \
-DEA_COMPILER_NO_EXCEPTIONS=1 \
-DEA_COMPILER_MANAGED_CPP=1 \
-Wno-unknown-pragmas \
-Wno-deprecated-copy \
-Wl,--gc-sections
EASTL_STATIC_LIB := EASTL-build/libEASTL.a
EASTL_COMPAT := EASTL-compat/kcrt.opp
1_DRIVER_NAME = ddk-template
1_OBJECTS = $(1_DRIVER_NAME).o
1_TARGET = $(1_DRIVER_NAME).sys
2_DRIVER_NAME = ddk-template-cplusplus
2_OBJECTS = $(2_DRIVER_NAME).opp
2_TARGET = $(2_DRIVER_NAME).sys
3_DRIVER_NAME = ddk-template-cplusplus-EASTL
3_OBJECTS = $(3_DRIVER_NAME).opp
3_TARGET = $(3_DRIVER_NAME).sys
all: deps-print-local-notice check-vars $(1_TARGET) $(2_TARGET) $(3_TARGET)
deps-print-local-notice: $(CC)
ifeq ($(CC),$(LOCAL_MINGW64_CC))
ifeq ($(DDK_INCLUDE_DIR),$(LOCAL_MINGW64_DDK_INCLUDE_DIR))
@echo
@echo "--------------------------------------------------------"
@echo "-- You did not set CC and DDK_INCLUDE_DIR explicitly! --"
@echo "--------------------------------------------------------"
@echo "Using defaults:"
@echo "\tCC=$(CC)"
@echo "\tDDK_INCLUDE_DIR=$(DDK_INCLUDE_DIR)"
@echo
endif
endif
check-vars:
ifeq ($(CC),$(LOCAL_MINGW64_CC))
ifneq ($(DDK_INCLUDE_DIR),$(LOCAL_MINGW64_DDK_INCLUDE_DIR))
@echo
@echo "------------------------------------------------------------------------"
@echo "-- You did not set CC explicitly but set the mingw64 ddk include dir. --"
@echo "------------------------------------------------------------------------"
@echo "\tCC=$(CC)"
@echo "\tDDK_INCLUDE_DIR=$(DDK_INCLUDE_DIR)"
@echo
@echo "This is not supported!"
@echo
@false
endif
endif
$(LOCAL_MINGW64_BUILD_SCRIPT):
ifeq ($(CC),$(LOCAL_MINGW64_CC))
ifeq ($(DDK_INCLUDE_DIR),$(LOCAL_MINGW64_DDK_INCLUDE_DIR))
@echo
@echo "------------------------------------------------------------------------------"
@echo "-- ./mingw-w64-build/mingw-w64-build does not exist, clonging git submodule --"
@echo "------------------------------------------------------------------------------"
@echo
git submodule update --init
endif
endif
$(LOCAL_MINGW64_CC):
ifeq ($(CC),$(LOCAL_MINGW64_CC))
ifeq ($(DDK_INCLUDE_DIR),$(LOCAL_MINGW64_DDK_INCLUDE_DIR))
@echo
@echo "----------------------------------------------------------------------------------------"
@echo "-- ./x86_64-w64-mingw32/bin/x86_64-w64-mingw32-gcc does not exist, building toolchain --"
@echo "----------------------------------------------------------------------------------------"
@echo
./mingw-w64-build/mingw-w64-build x86_64
endif
endif
.deps-built: $(LOCAL_MINGW64_BUILD_SCRIPT) $(LOCAL_MINGW64_CC)
touch .deps-built
deps: .deps-built
$(EASTL_STATIC_LIB): .deps-built
mkdir -p EASTL-build
cd EASTL-build && \
$(CMAKE) ../EASTL \
-DCMAKE_CXX_COMPILER="$(realpath $(CXX))" \
-DCMAKE_SYSTEM_NAME="Windows" \
-DCMAKE_CXX_FLAGS='-ffunction-sections -fdata-sections $(CXXFLAGS) $(EASTL_CXXFLAGS)' && \
$(MAKE) VERBOSE=1
distclean: clean
rm -f .deps-built
rm -rf $(LOCAL_MINGW64_BUILD_DIR)
clean:
rm -f $(1_OBJECTS) $(1_TARGET)
rm -f $(2_OBJECTS) $(2_TARGET)
rm -f $(3_OBJECTS) $(3_TARGET)
rm -f $(EASTL_COMPAT) $(EASTL_STATIC_LIB)
$(MAKE) -C EASTL-build clean
%.o: %.c .deps-built
$(CC) $(CFLAGS) -c $< -o $@
%.opp: %.cpp .deps-built
$(CXX) $(CFLAGS) $(CXXFLAGS) $(EASTL_CXXFLAGS) -c $< -o $@
$(1_TARGET): .deps-built $(1_OBJECTS)
$(CC) -std=c99 $(CFLAGS) -Wl,--subsystem,native -Wl,--image-base,0x140000000 -Wl,--dynamicbase -Wl,--nxcompat \
-Wl,--file-alignment,0x200 -Wl,--section-alignment,0x1000 -Wl,--stack,0x100000 \
-Wl,--entry,DriverEntry -nostartfiles -nostdlib -o $(1_TARGET) \
$(1_OBJECTS) -lntoskrnl -lhal
$(2_TARGET): .deps-built $(2_OBJECTS)
$(CXX) $(CFLAGS) -Wl,--subsystem,native -Wl,--image-base,0x140000000 -Wl,--dynamicbase -Wl,--nxcompat \
-Wl,--file-alignment,0x200 -Wl,--section-alignment,0x1000 -Wl,--stack,0x100000 \
-Wl,--entry,DriverEntry@8 -nostartfiles -nostdlib -o $(2_TARGET) \
$(2_OBJECTS) -lntoskrnl -lhal
$(3_TARGET): .deps-built $(EASTL_STATIC_LIB) $(EASTL_COMPAT) $(3_OBJECTS)
$(CXX) $(CFLAGS) $(CXXFLAGS) $(EASTL_CXXFLAGS) -Wl,--subsystem,native -Wl,--image-base,0x140000000 -Wl,--dynamicbase -Wl,--nxcompat \
-Wl,--file-alignment,0x200 -Wl,--section-alignment,0x1000 -Wl,--stack,0x100000 \
-Wl,--entry,DriverEntry@8 -nostartfiles -nostdlib -o $(3_TARGET) \
$(3_OBJECTS) $(EASTL_COMPAT) $(EASTL_STATIC_LIB) -lntoskrnl -lhal
|