aboutsummaryrefslogtreecommitdiff
path: root/Makefile.native.inc
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile.native.inc')
-rw-r--r--Makefile.native.inc137
1 files changed, 137 insertions, 0 deletions
diff --git a/Makefile.native.inc b/Makefile.native.inc
new file mode 100644
index 0000000..d2293af
--- /dev/null
+++ b/Makefile.native.inc
@@ -0,0 +1,137 @@
+ifndef DPP_ROOT
+$(error DPP_ROOT is undefined)
+endif
+
+ifndef BUILD_NATIVE
+$(error BUILD_NATIVE is _NOT_ defined, include Makefile.inc)
+endif
+
+NAME_SUFFIX := -native
+
+Q = @
+ifeq ($(Q),)
+CMAKE_Q = VERBOSE=1
+endif
+DPP_ROOT = $(realpath .)
+
+INSTALL = install
+CMAKE = cmake
+CC = /usr/bin/cc
+CXX = /usr/bin/c++
+AR = /usr/bin/ar
+CFLAGS := -Wall -Wextra -Wno-sign-compare -Wno-strict-aliasing -Wno-c++20-compat \
+ -m64 -fPIC -fvisibility=hidden \
+ -I$(DPP_ROOT)/CRT -DNATIVE=1
+ifneq ($(WERROR),)
+CFLAGS += -Werror
+endif
+CXXFLAGS := -fuse-cxa-atexit
+EASTL_CXXFLAGS := -I$(DPP_ROOT)/EASTL/include -I$(DPP_ROOT)/EASTL/test/packages/EABase/include/Common \
+ -DEASTL_THREAD_SUPPORT_AVAILABLE=1 \
+ -DEASTL_EXCEPTIONS_ENABLED=1 \
+ -DEASTL_ASSERT_ENABLED=1 \
+ -DEA_PLATFORM_POSIX=1 \
+ -Wno-unknown-pragmas \
+ -Wno-deprecated-copy
+USER_LDFLAGS := -Wl,--gc-sections
+
+EASTL_BUILDDIR := EASTL-native-build
+EASTL_STATIC_LIB := $(DPP_ROOT)/$(EASTL_BUILDDIR)/libEASTL.a
+
+LIBCRT_BUILD_DIR := $(DPP_ROOT)/CRT-native-build
+LIBUSERCRT_OBJECTS := $(LIBCRT_BUILD_DIR)/ucrt$(NAME_SUFFIX).opp $(LIBCRT_BUILD_DIR)/eastl_compat$(NAME_SUFFIX).opp
+LIBUSERCRT_STATIC_LIB := $(LIBCRT_BUILD_DIR)/libusercrt.a
+
+is_set = \
+ $(if $1,, \
+ $(error ERROR: $(if $2,$2)))
+
+path_exists = \
+ $(if $(realpath $1),, \
+ $(error ERROR: $1 does not exist, run `make -C $(DPP_ROOT) deps` first.))
+
+define CHECK_REQUIRED_PATHS
+ $(call is_set,$(CC),Makefile argument CC missing)
+ $(call is_set,$(CXX),Makefile argument CXX missing)
+ $(call is_set,$(AR),Makefile argument AR missing)
+ $(call is_set,$(EASTL_STATIC_LIB),Makefile argument EASTL_STATIC_LIB missing)
+ $(call is_set,$(LIBUSERCRT_STATIC_LIB),Makefile argument LIBUSERCRT_STATIC_LIB missing)
+ $(call path_exists,$(CC))
+ $(call path_exists,$(CXX))
+ $(call path_exists,$(AR))
+ $(call path_exists,$(EASTL_STATIC_LIB))
+ $(call path_exists,$(LIBUSERCRT_STATIC_LIB))
+endef
+
+define BUILD_C_OBJECT
+ $(call CHECK_REQUIRED_PATHS)
+ $(call is_set,$(1),First argument: Source file missing)
+ $(call is_set,$(2),Second argument: Output object file missing)
+ $(Q)$(CC) -std=gnu99 $(CFLAGS) -c $(1) -o $(2)
+ @echo 'CC $(2)'
+endef
+
+define BUILD_CPP_OBJECT
+ $(call CHECK_REQUIRED_PATHS)
+ $(call is_set,$(1),First argument: Source file missing)
+ $(call is_set,$(2),Second argument: Output object file missing)
+ $(Q)$(CXX) $(CFLAGS) $(CXXFLAGS) $(EASTL_CXXFLAGS) -c $(1) -o $(2)
+ @echo 'CXX $@'
+endef
+
+define LINK_C_KERNEL_TARGET
+ $(error BUILD_NATIVE does not support kernel targets.)
+endef
+
+define LINK_C_USER_TARGET
+ $(call CHECK_REQUIRED_PATHS)
+ $(call is_set,$(1),First argument: Object files missing)
+ $(call is_set,$(2),Second argument: Output object file missing)
+ $(Q)$(CC) \
+ $(CFLAGS) \
+ -o '$(2)' \
+ $(1) \
+ $(EASTL_STATIC_LIB) \
+ @echo 'LD $(2)'
+endef
+
+define LINK_CPP_KERNEL_TARGET
+ $(error BUILD_NATIVE does not support kernel targets.)
+endef
+
+define LINK_CPP_USER_TARGET
+ $(call CHECK_REQUIRED_PATHS)
+ $(call is_set,$(1),First argument: Object files missing)
+ $(call is_set,$(2),Second argument: Output object file missing)
+ $(Q)$(CXX) \
+ $(CFLAGS) \
+ $(CXXFLAGS) \
+ $(EASTL_CXXFLAGS) \
+ $(USER_LDFLAGS) \
+ -o '$(2)' \
+ $(1) \
+ $(EASTL_STATIC_LIB) \
+ $(LIBUSERCRT_STATIC_LIB)
+ @echo 'LD $(2)'
+endef
+
+define INSTALL_EXEC
+ $(call is_set,$(1),First argument: Executables to install missing)
+ $(call is_set,$(DESTDIR),DESTDIR missing)
+ $(INSTALL) -d '$(DESTDIR)/'
+ for target in $(1); do \
+ $(INSTALL) -s "$$target" '$(DESTDIR)'; \
+ done
+endef
+
+define INSTALL_EXEC_SIGN
+ $(error BUILD_NATIVE does not support code signing.)
+endef
+
+define HELP_MAKE_OPTIONS
+ @echo 'Common make options for Makefile.native.inc:'
+ @echo -e '\tBUILD_NATIVE = yes'
+ @echo -e '\tCC = $(CC)'
+ @echo -e '\tCXX = $(CXX)'
+ @echo -e '\tDPP_ROOT = $(DPP_ROOT)'
+endef