aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--EASTL/include/EASTL/tuple.h1
-rw-r--r--Makefile180
-rw-r--r--Makefile.external60
-rw-r--r--Makefile.internal109
-rw-r--r--README.md25
5 files changed, 233 insertions, 142 deletions
diff --git a/EASTL/include/EASTL/tuple.h b/EASTL/include/EASTL/tuple.h
index 9d27bff..cec5115 100644
--- a/EASTL/include/EASTL/tuple.h
+++ b/EASTL/include/EASTL/tuple.h
@@ -930,7 +930,6 @@ namespace Internal
};
}// namespace Internal
-static const Internal::ignore_t ignore;
// tie
diff --git a/Makefile b/Makefile
index 92cb391..eb95516 100644
--- a/Makefile
+++ b/Makefile
@@ -1,166 +1,64 @@
-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
-SIGNTOOL_PREFIX := codesign
-
-INSTALL = install
-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. -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
-ADDITIONAL_OBJS := DriverThread.opp
-ADDITIONAL_HDRS := DriverThread.hpp
-EASTL_STATIC_LIB := EASTL-build/libEASTL.a
-EASTL_COMPAT := EASTL-compat/kcrt.opp
-
1_DRIVER_NAME = ddk-template
+1_SOURCES = $(1_DRIVER_NAME).c
1_OBJECTS = $(1_DRIVER_NAME).o
1_TARGET = $(1_DRIVER_NAME).sys
2_DRIVER_NAME = ddk-template-cplusplus
+2_SOURCES = $(2_DRIVER_NAME).cpp
2_OBJECTS = $(2_DRIVER_NAME).opp
2_TARGET = $(2_DRIVER_NAME).sys
3_DRIVER_NAME = ddk-template-cplusplus-EASTL
+3_SOURCES = $(3_DRIVER_NAME).cpp
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)
+DPP_ROOT = .
+INSTALL = install
+
+all: $(1_TARGET) $(2_TARGET) $(3_TARGET)
install: all
- $(INSTALL) -d '$(DESTDIR)/'
- test -r "$(SIGNTOOL_PREFIX)-ca-cert.pem" && \
- $(INSTALL) "$(SIGNTOOL_PREFIX)-ca-cert.pem" $(DESTDIR)
- test -r "$(SIGNTOOL_PREFIX)-code.p12" && \
- $(INSTALL) "$(SIGNTOOL_PREFIX)-code.p12" $(DESTDIR)
- $(INSTALL) -s --strip-program=$(dir $(CC))/x86_64-w64-mingw32-strip $(1_TARGET) $(DESTDIR)
+ $(MAKE) -C $(DPP_ROOT) -f Makefile.external install-sign \
+ DESTDIR=$(DESTDIR) \
+ TARGETS="$(1_TARGET) $(2_TARGET) $(3_TARGET)" \
+ DRIVER_DIR="$(PWD)"
$(INSTALL) $(1_DRIVER_NAME).bat $(DESTDIR)
- $(INSTALL) -s --strip-program=$(dir $(CC))/x86_64-w64-mingw32-strip $(2_TARGET) $(DESTDIR)
$(INSTALL) $(2_DRIVER_NAME).bat $(DESTDIR)
- $(INSTALL) -s --strip-program=$(dir $(CC))/x86_64-w64-mingw32-strip $(3_TARGET) $(DESTDIR)
$(INSTALL) $(3_DRIVER_NAME).bat $(DESTDIR)
-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
-
-$(SIGNTOOL_PREFIX)-code.p12:
- ./create_codesign_ca.sh $(SIGNTOOL_PREFIX)
-
-$(SIGNTOOL_PREFIX): $(SIGNTOOL_PREFIX)-code.p12
-
distclean: clean
- rm -f .deps-built
- rm -rf $(LOCAL_MINGW64_BUILD_DIR)
- rm -f codesign*
+ $(MAKE) -C $(DPP_ROOT) -f Makefile.external distclean
clean:
+ $(MAKE) -C $(DPP_ROOT) -f Makefile.external 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)
- rm -f $(ADDITIONAL_OBJS)
- $(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 $(ADDITIONAL_HDRS) $(ADDITIONAL_OBJS) $(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) \
- $(ADDITIONAL_OBJS) $(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
+# simple C driver
+$(1_TARGET): $(1_SOURCES)
+ $(MAKE) -C $(DPP_ROOT) -f Makefile.external \
+ DRIVER_TARGET="$(1_TARGET)" \
+ DRIVER_DIR="$(PWD)" \
+ DRIVER_OBJECTS="$(1_OBJECTS)" \
+ driver-c
+
+# C++ driver w/ MT
+$(2_TARGET): $(2_SOURCES)
+ $(MAKE) -C $(DPP_ROOT) -f Makefile.external \
+ DRIVER_TARGET="$(2_TARGET)" \
+ DRIVER_DIR="$(PWD)" \
+ DRIVER_OBJECTS="$(2_OBJECTS)" \
+ driver-cpp
+
+# C++ driver w/ EASTL
+$(3_TARGET): $(3_SOURCES)
+ $(MAKE) -C $(DPP_ROOT) -f Makefile.external \
+ DRIVER_TARGET="$(3_TARGET)" \
+ DRIVER_DIR="$(PWD)" \
+ DRIVER_OBJECTS="$(3_OBJECTS)" \
+ driver-cpp
+
+.PHONY: all install distclean clean
+.DEFAULT_GOAL := all
diff --git a/Makefile.external b/Makefile.external
new file mode 100644
index 0000000..06e908f
--- /dev/null
+++ b/Makefile.external
@@ -0,0 +1,60 @@
+include Makefile.internal
+
+%.o: %.c
+ $(Q)$(CC) $(CFLAGS) -c $< -o $@
+ @echo 'CC $@'
+
+%.opp: %.cpp
+ $(Q)$(CXX) $(CFLAGS) $(CXXFLAGS) $(EASTL_CXXFLAGS) -c $< -o $@
+ @echo 'CXX $@'
+
+check-env:
+ifndef DRIVER_TARGET
+ $(error DRIVER_TARGET is undefined)
+endif
+ifndef DRIVER_DIR
+ $(error DRIVER_DIR is undefined)
+endif
+ifndef DRIVER_OBJECTS
+ $(error DRIVER_OBJECTS is undefined)
+endif
+
+driver-c: check-env deps $(addprefix $(DRIVER_DIR)/,$(DRIVER_OBJECTS))
+ $(Q)$(CC) -std=c99 $(CFLAGS) \
+ $(DRIVER_LDFLAGS) \
+ -o '$(DRIVER_DIR)/$(DRIVER_TARGET)' \
+ $(addprefix $(DRIVER_DIR)/,$(DRIVER_OBJECTS)) \
+ $(DRIVER_LIBS)
+ @echo 'LD $(DRIVER_DIR)/$(DRIVER_TARGET)'
+
+driver-cpp: check-env deps \
+ $(ADDITIONAL_HDRS) $(ADDITIONAL_OBJS) \
+ $(EASTL_STATIC_LIB) $(EASTL_COMPAT) \
+ $(addprefix $(DRIVER_DIR)/,$(DRIVER_OBJECTS))
+
+ $(Q)$(CXX) $(CFLAGS) \
+ $(CXXFLAGS) \
+ $(EASTL_CXXFLAGS) \
+ $(DRIVER_LDFLAGS) \
+ -o '$(DRIVER_DIR)/$(DRIVER_TARGET)' \
+ $(addprefix $(DRIVER_DIR)/,$(DRIVER_OBJECTS)) \
+ $(ADDITIONAL_OBJS) $(EASTL_COMPAT) $(EASTL_STATIC_LIB) $(DRIVER_LIBS)
+ @echo 'LD $(DRIVER_DIR)/$(DRIVER_TARGET)'
+
+check-env-install:
+ifndef TARGETS
+ $(error TARGETS is undefined)
+endif
+
+install: check-env-install $(addprefix $(DRIVER_DIR)/,$(TARGETS))
+ $(INSTALL) -s --strip-program=$(dir $(CC))/x86_64-w64-mingw32-strip \
+ $(addprefix $(DRIVER_DIR)/,$(TARGETS)) $(DESTDIR)
+
+install-sign: $(SIGNTOOL_PREFIX) install
+ $(INSTALL) -d '$(DESTDIR)/'
+ test -r "$(SIGNTOOL_PREFIX)-ca-cert.pem" && \
+ $(INSTALL) "$(SIGNTOOL_PREFIX)-ca-cert.pem" $(DESTDIR)
+ test -r "$(SIGNTOOL_PREFIX)-code.p12" && \
+ $(INSTALL) "$(SIGNTOOL_PREFIX)-code.p12" $(DESTDIR)
+
+.PHONY: check-env driver-c driver-cpp check-env-install install install-sign
diff --git a/Makefile.internal b/Makefile.internal
new file mode 100644
index 0000000..14b148b
--- /dev/null
+++ b/Makefile.internal
@@ -0,0 +1,109 @@
+Q = @
+ifeq ($(Q),)
+CMAKE_Q = VERBOSE=1
+endif
+ifeq ($(DPP_EXTERNAL_MAKEFILE),)
+DPP_EXTERNAL_MAKEFILE := .
+endif
+LOCAL_MINGW64_BUILD_SCRIPT := $(DPP_EXTERNAL_MAKEFILE)/mingw-w64-build/mingw-w64-build
+LOCAL_MINGW64_BUILD_DIR := $(DPP_EXTERNAL_MAKEFILE)/x86_64-w64-mingw32
+LOCAL_MINGW64_CC := $(LOCAL_MINGW64_BUILD_DIR)/bin/x86_64-w64-mingw32-gcc
+SIGNTOOL_PREFIX := codesign
+
+INSTALL = install
+CMAKE = cmake
+CC = $(LOCAL_MINGW64_CC)
+CXX = $(dir $(CC))/x86_64-w64-mingw32-g++
+DDK_INCLUDE_DIR = $(dir $(CC))../x86_64-w64-mingw32/include/ddk
+CFLAGS := -Wall -Wextra -m64 -shared \
+ -I. -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
+DRIVER_LDFLAGS := -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 \
+ -Wl,--gc-sections \
+ -nostartfiles -nostdlib
+DRIVER_LIBS := -lntoskrnl -lhal
+
+ADDITIONAL_OBJS := DriverThread.opp
+ADDITIONAL_HDRS := DriverThread.hpp
+EASTL_STATIC_LIB := EASTL-build/libEASTL.a
+EASTL_COMPAT := EASTL-compat/kcrt.opp
+DEPS_STAMP := .deps-built
+
+deps-print-local-notice: $(CC)
+ifeq ($(CC),$(LOCAL_MINGW64_CC))
+ @echo
+ @echo "-- [Build Config]"
+ @echo "-- CC : $(realpath $(CC))"
+ @echo "-- CXX: $(realpath $(CXX))"
+ @echo "-- DDK: $(realpath $(DDK_INCLUDE_DIR))"
+ @echo
+endif
+
+$(LOCAL_MINGW64_BUILD_SCRIPT):
+ifeq ($(CC),$(LOCAL_MINGW64_CC))
+ @echo
+ @echo "------------------------------------------------------------------------------"
+ @echo "-- ./mingw-w64-build/mingw-w64-build does not exist, clonging git submodule --"
+ @echo "------------------------------------------------------------------------------"
+ @echo
+ git submodule update --init mingw-w64-build
+endif
+
+$(LOCAL_MINGW64_CC): $(LOCAL_MINGW64_BUILD_SCRIPT)
+ifeq ($(CC),$(LOCAL_MINGW64_CC))
+ @echo
+ @echo "----------------------------------------------------------------------------------------"
+ @echo "-- ./x86_64-w64-mingw32/bin/x86_64-w64-mingw32-gcc does not exist, building toolchain --"
+ @echo "----------------------------------------------------------------------------------------"
+ @echo
+ env -i ./mingw-w64-build/mingw-w64-build x86_64
+endif
+
+$(DEPS_STAMP): $(LOCAL_MINGW64_BUILD_SCRIPT) $(LOCAL_MINGW64_CC)
+ touch $(DEPS_STAMP)
+
+deps: deps-print-local-notice $(DEPS_STAMP)
+
+$(EASTL_STATIC_LIB): $(DEPS_STAMP)
+ mkdir -p EASTL-build
+ cd EASTL-build && \
+ $(CMAKE) ../EASTL \
+ -DCMAKE_CXX_COMPILER="$(realpath $(CXX))" \
+ -DCMAKE_SYSTEM_NAME="Windows" \
+ -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
+ -DCMAKE_CXX_FLAGS='-ffunction-sections -fdata-sections $(CXXFLAGS) $(EASTL_CXXFLAGS)' && \
+ $(MAKE) $(CMAKE_Q)
+
+$(SIGNTOOL_PREFIX)-code.p12:
+ ./create_codesign_ca.sh $(SIGNTOOL_PREFIX)
+
+$(SIGNTOOL_PREFIX): $(SIGNTOOL_PREFIX)-code.p12
+
+distclean: clean
+ rm -f $(DEPS_STAMP)
+ rm -rf $(LOCAL_MINGW64_BUILD_DIR)
+ rm -f codesign*
+ git submodule deinit --all
+
+clean:
+ rm -f $(EASTL_COMPAT) $(EASTL_STATIC_LIB)
+ rm -f $(ADDITIONAL_OBJS)
+ rm -rf EASTL-build
+
+.PHONY: deps distclean-deps clean-deps
diff --git a/README.md b/README.md
index eac0a46..b3c6cc8 100644
--- a/README.md
+++ b/README.md
@@ -35,6 +35,31 @@ Build Mingw64 only:
make deps
``
+## HowTo use it in your own project
+
+At the moment only **GMake** is supported.
+The process is similiar to KBuild from the Linux kernel.
+You'll write a minimal Makefile that triggers some targets from **Makefile.external**.
+
+You can use the **Makefile** in this repository.
+A minimal working **Makefile** for your own project could look alike:
+
+```make
+DRIVER_NAME = Driver
+DRIVER_SOURCES = $(DRIVER_NAME).cpp
+DRIVER_OBJECTS = $(DRIVER_NAME).opp
+DRIVER_TARGET = $(DRIVER_NAME).sys
+
+$(DRIVER_TARGET): $(DRIVER_SOURCES)
+ $(MAKE) -C $(DPP_ROOT) -f Makefile.external \
+ DRIVER_TARGET="$(DRIVER_TARGET)" \
+ DRIVER_DIR="$(PWD)" \
+ DRIVER_OBJECTS="$(DRIVER_OBJECTS)" \
+ driver-cpp
+```
+
+Build it with: `make Driver.sys DPP_ROOT=[path/to/this/repository]`
+
## Thanks!
- [Zeranoe](https://github.com/Zeranoe/mingw-w64-build) for the Mingw64 build script