aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile51
1 files changed, 45 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index e4011a6..eb6feb8 100644
--- a/Makefile
+++ b/Makefile
@@ -3,13 +3,26 @@ 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 -m64 -shared \
+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
@@ -19,9 +32,13 @@ CFLAGS = -Wall -m64 -shared \
2_OBJECTS = $(2_DRIVER_NAME).opp
2_TARGET = $(2_DRIVER_NAME).sys
-all: deps-print-local-notice check-vars $(1_TARGET) $(2_TARGET)
+3_DRIVER_NAME = ddk-template-cplusplus-EASTL
+3_OBJECTS = $(3_DRIVER_NAME).opp
+3_TARGET = $(3_DRIVER_NAME).sys
-deps-print-local-notice:
+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
@@ -80,15 +97,31 @@ endif
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
+%.o: %.c .deps-built
$(CC) $(CFLAGS) -c $< -o $@
-%.opp: %.cpp
- $(CXX) $(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 \
@@ -101,3 +134,9 @@ $(2_TARGET): .deps-built $(2_OBJECTS)
-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