diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 51 |
1 files changed, 45 insertions, 6 deletions
@@ -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 |