From bf9bb792468991e64d4400a7186a6e70cd852e46 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Sun, 3 Mar 2019 10:45:08 +0000 Subject: [PATCH] make/Makefile, defs-cpp.mk, platform.mk: Generalize MinGW build machinery (a bit) This commit takes the MinGW cross compilation further into the direction of being a more general framework for cross compilation. Changed some variable names that are too specialized, notably MinGW tool chain directories, compilers, utilities. Signed-off-by: Jan Lindemann --- make/Makefile | 2 +- make/defs-cpp.mk | 150 ++++++++++++++++++++++------------------------- make/platform.mk | 17 +++--- 3 files changed, 81 insertions(+), 88 deletions(-) diff --git a/make/Makefile b/make/Makefile index bebdb8fc..5bf56c32 100644 --- a/make/Makefile +++ b/make/Makefile @@ -7,7 +7,7 @@ TOPDIR = .. CACHED_FILES := defs.mk projects.mk platform.mk Makefile #CACHED_VARS = $(shell sed '/^[ \t]*\([A-Z_]\+\) *\(.=\).*$$.shell/!d; s/ *.=.*//' $(CACHED_FILES)) -CACHED_VARS := WHICH BROWSER SED RM PWD ID CUT TR AWK GETENT XARGS FIND PRINTF OS_TUPLE OS_NAME_VERSION OS_NAME CAT BIN_INSTALL SUDO +CACHED_VARS := WHICH BROWSER SED RM PWD ID CUT TR AWK GETENT XARGS FIND PRINTF HOST_TUPLE OS_NAME_VERSION OS_NAME CAT BIN_INSTALL SUDO #CACHED_VARS += TARGET_ARCH RPM_ARCH CACHED_VARS += TARGET_ARCH #CACHED_VARS += DEVELOPMENT diff --git a/make/defs-cpp.mk b/make/defs-cpp.mk index 2630748c..44592b57 100644 --- a/make/defs-cpp.mk +++ b/make/defs-cpp.mk @@ -3,17 +3,17 @@ CREATE_DEVEL ?= true #COMPILER_SUITE ?= clang COMPILER_SUITE ?= gcc -ifeq ($(ARCH),$(ARCH_32)) +ifeq ($(TARGET_ARCH),$(ARCH_32)) PROJECT_CFLAGS += -m32 PROJECT_CPPFLAGS += -m32 PROJECT_LDFLAGS += -m32 endif -ifeq ($(ARCH),armv7hl) +ifeq ($(TARGET_ARCH),armv7hl) PROJECT_CFLAGS += -fPIC PROJECT_CPPFLAGS += -fPIC PROJECT_LDFLAGS += -else ifeq ($(ARCH),aarch64) +else ifeq ($(TARGET_ARCH),aarch64) PROJECT_CFLAGS += -fPIC PROJECT_CPPFLAGS += -fPIC PROJECT_LDFLAGS += @@ -68,42 +68,56 @@ ifeq ($(USE_VERSION_MACROS),true) BUILD_CPPFLAGS += -DVERSION=$(HEX_VERSION) -DVERSION_STR=\"$(VERSION)\" endif -ifeq ($(TARGET),mingw) - ifneq ($(wildcard /usr/bin/i686-w64-mingw32-gcc),) - PROJECT_CFLAGS += -D_WINDOWS - PROJECT_CPPFLAGS += -D_WINDOWS - TC_SYS_ROOT ?= /usr/i686-w64-mingw32/sys-root/mingw - CROSS_TOOL_DIR ?= - CROSS_TOOL_BIN_PREFIX ?= $(CROSS_TOOL_DIR)/usr/bin/i686-w64-mingw32- - PROJECT_LDFLAGS += -L$(TC_SYS_ROOT)/lib - PROJECT_CFLAGS += -I$(TC_SYS_ROOT)/include - PROJECT_CPPFLAGS += -I$(TC_SYS_ROOT)/include - else - CROSS_TOOL_DIR ?= /opt/cross-tools - CROSS_TOOL_BIN_PREFIX ?= $(CROSS_TOOL_DIR)/bin/i686-pc-mingw32- - endif - GCC ?= $(CROSS_TOOL_BIN_PREFIX)gcc - GPP ?= $(CROSS_TOOL_BIN_PREFIX)g++ - LD ?= $(CROSS_TOOL_BIN_PREFIX)ld - CLANG ?= $(CROSS_TOOL_BIN_PREFIX)clang - CLANGPP ?= $(CROSS_TOOL_BIN_PREFIX)clang++ - STRIP ?= $(CROSS_TOOL_BIN_PREFIX)strip - RANLIB ?= $(CROSS_TOOL_BIN_PREFIX)ranlib - AR ?= $(CROSS_TOOL_BIN_PREFIX)ar - WINDRES ?= $(CROSS_TOOL_BIN_PREFIX)windres - BUILD_LDFLAGS += -lws2_32 - USE_GFILTER ?= false - MS_LD ?= wine $(HOME)/local/mingw/packages/msvcpp/bin/LIB.EXE -else - GCC ?= gcc - GPP ?= g++ - LD ?= ld - CLANG ?= clang - CLANGPP ?= clang++ - STRIP ?= strip - RANLIB ?= ranlib - AR ?= ar -endif # ifeq ($(TARGET),mingw) +# ----- tool chain + +ifneq ($(TARGET_TRIPLET),$(HOST_TRIPLET)) # we're cross-compiling + + TC_BIN_PREFIX = $(TARGET_TRIPLET)- + TC_SYS_ROOT ?= /usr/$(TARGET_TRIPLET) + PROJECT_LDFLAGS += -L$(TC_SYS_ROOT)/lib + PROJECT_CFLAGS += -I$(TC_SYS_ROOT)/include + PROJECT_CPPFLAGS += -I$(TC_SYS_ROOT)/include + + ifeq ($(TARGET),mingw) + + ifneq ($(wildcard $(TC_BIN_PREFIX)gcc),) + PROJECT_CFLAGS += -D_WINDOWS + PROJECT_CPPFLAGS += -D_WINDOWS + TC_SYS_ROOT ?= /usr/$(TARGET_TRIPLET)/sys-root/mingw + CROSS_TOOL_DIR ?= + else + CROSS_TOOL_DIR ?= /opt/cross-tools + TC_BIN_PREFIX ?= $(CROSS_TOOL_DIR)/bin/i686-pc-mingw32- + endif + WINDRES ?= $(TC_BIN_PREFIX)windres + BUILD_LDFLAGS += -lws2_32 + USE_GFILTER ?= false + MS_LD ?= wine $(HOME)/local/mingw/packages/msvcpp/bin/LIB.EXE + endif # ifeq ($(TARGET),mingw) + +else # we're not cross-compiling + + TC_SYS_ROOT ?= /usr + LIBFLAGS += -ldl -lpthread + +endif + +ifeq ($(TARGET_ARCH),x86_64) + BUILD_CFLAGS += -fPIC + BUILD_CPPFLAGS += -fPIC + LIBFLAGS += +endif + +GCC ?= $(TC_BIN_PREFIX)gcc +GPP ?= $(TC_BIN_PREFIX)g++ +CPP ?= $(GPP) +LD ?= $(TC_BIN_PREFIX)ld +CLANG ?= $(TC_BIN_PREFIX)clang +CLANGPP ?= $(TC_BIN_PREFIX)clang++ +STRIP ?= $(TC_BIN_PREFIX)strip +RANLIB ?= $(TC_BIN_PREFIX)ranlib +AR ?= $(TC_BIN_PREFIX)ar +PKG_CONFIG ?= $(TC_BIN_PREFIX)pkg-config # compiler and linker # gcc @@ -199,18 +213,10 @@ endif LPPFLAGS += -lstdc++ -ifeq ($(ARCH),x86_64) - ifneq ($(TARGET),mingw) - BUILD_CFLAGS += -fPIC - BUILD_CPPFLAGS+= -fPIC - LIBFLAGS += - endif -endif - ifeq ($(GCC_MAJOR),2) -LPPFLAGS += -lm -BUILD_CFLAGS += -I/usr/local/include -BUILD_CPPFLAGS += -I/usr/local/include + LPPFLAGS += -lm + BUILD_CFLAGS += -I/usr/local/include + BUILD_CPPFLAGS += -I/usr/local/include else ifeq ($(GCC_MAJOR),3) ifeq ($(GCC_MINOR),3) @@ -221,10 +227,10 @@ else endif ifeq ($(TARGET),mingw) -BUILD_CFLAGS += -DWIN32 -BUILD_CPPFLAGS += -DWIN32 -# see https://stackoverflow.com/questions/4492799 -BUILD_LDFLAGS += -fstack-protector + BUILD_CFLAGS += -DWIN32 + BUILD_CPPFLAGS += -DWIN32 + # see https://stackoverflow.com/questions/4492799 + BUILD_LDFLAGS += -fstack-protector endif ifeq ($(LIBTYPE),shared) @@ -242,8 +248,6 @@ ifeq ($(LOG_THREAD_NAMES), true) BUILD_CPPFLAGS+= -DSLOG_THREAD_NAMES endif -CPP ?= g++ - # ----- standard features, switched on with USE_XXX = true #include $(MODDIR)/make/lib-deps.mk @@ -273,14 +277,14 @@ endif ifneq ($(filter jw-build,$(PREREQ_BUILD)),) ifeq ($(TARGET),mingw) - JW_BUILD_LDFLAGS += -lglib-2.0 -lws2_32 -lstdc++ + JW_BUILD_LDFLAGS += -lglib-2.0 -lws2_32 -lstdc++ endif endif ifeq ($(USE_SYSTEMD),true) - BUILD_CFLAGS += -D_USE_SYSTEMD_ $(shell pkg-config --cflags libsystemd) - BUILD_CPPFLAGS += -D_USE_SYSTEMD_ $(shell pkg-config --cflags libsystemd) - BUILD_LDFLAGS += $(shell pkg-config --libs libsystemd) + BUILD_CFLAGS += -D_USE_SYSTEMD_ $(shell $(PKG_CONFIG) --cflags libsystemd) + BUILD_CPPFLAGS += -D_USE_SYSTEMD_ $(shell $(PKG_CONFIG) --cflags libsystemd) + BUILD_LDFLAGS += $(shell $(PKG_CONFIG) --libs libsystemd) endif ifeq ($(USE_TIMER),true) @@ -399,11 +403,9 @@ ifeq ($(CC),$(GCC)) -fno-tree-loop-optimize \ -fno-early-inlining \ -fno-default-inline -else - ifeq ($(CC),$(CLANG)) - BUILD_CFLAGS += -Werror - BUILD_CPPFLAGS += -Werror - endif +else ifeq ($(CC),$(CLANG)) + BUILD_CFLAGS += -Werror + BUILD_CPPFLAGS += -Werror endif ifeq ($(USE_COMPILER_OPTIMIZATION_OPTS),true) @@ -475,21 +477,9 @@ ifeq ($(USE_FFTW),true) endif ifeq ($(USE_GLIB),true) - ifneq ($(TARGET),mingw) - PROJECT_CFLAGS += $(shell pkg-config --cflags glib-2.0) - PROJECT_CPPFLAGS += $(shell pkg-config --cflags glib-2.0) - LIBFLAGS += $(shell pkg-config --libs glib-2.0) - LIBFLAGS += -ldl -lpthread - else - ifneq ($(wildcard $(CROSS_TOOL_DIR)/include/glib-2.0),) - INCLUDE += -I$(CROSS_TOOL_DIR)/include/glib-2.0 -I$(CROSS_TOOL_DIR)/lib/glib-2.0/include - LIBFLAGS += -lglib-2.0 - else - PROJECT_CFLAGS += $(shell /usr/bin/i686-w64-mingw32-pkg-config --cflags glib-2.0) - PROJECT_CPPFLAGS += $(shell /usr/bin/i686-w64-mingw32-pkg-config --cflags glib-2.0) - LIBFLAGS += $(shell /usr/bin/i686-w64-mingw32-pkg-config --libs glib-2.0) - endif - endif + PROJECT_CFLAGS += $(shell $(PKG_CONFIG) --cflags glib-2.0) + PROJECT_CPPFLAGS += $(shell $(PKG_CONFIG) --cflags glib-2.0) + LIBFLAGS += $(shell $(PKG_CONFIG) --libs glib-2.0) endif ifeq ($(CC),$(CLANG)) diff --git a/make/platform.mk b/make/platform.mk index 1d339de9..b6d6cb0b 100644 --- a/make/platform.mk +++ b/make/platform.mk @@ -27,8 +27,14 @@ ifndef GET_OS_SH GET_OS_SH := $(SHELL) $(MOD_SCRIPT_DIR)/get-os.sh endif -ifeq ($(OS_TUPLE),) - OS_TUPLE := $(shell $(GET_OS_SH) tuple) +ifeq ($(HOST_TUPLE),) + HOST_TUPLE := $(shell $(GET_OS_SH) tuple) + HOST_TUPLE_WORDS := $(subst -, ,$(HOST_TUPLE)) + HOST_ARCH := $(word 1,$(HOST_TUPLE_WORDS)) + HOST_VENDOR := $(word 2,$(HOST_TUPLE_WORDS)) + HOST_OS := $(word 3,$(HOST_TUPLE_WORDS)) + HOST_ABI := $(word 4,$(HOST_TUPLE_WORDS)) + HOST_TRIPLET := $(HOST_ARCH)-$(HOST_OS)-$(HOST_ABI) endif ifneq ($(TARGET_TUPLE),) @@ -47,7 +53,7 @@ else ifneq ($(TARGET_TRIPLET),) TARGET_TUPLE := $(TARGET_ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(TARGET_ABI) TARGET_TUPLE_WORDS := $(subst -, ,$(TARGET_TUPLE)) else - TARGET_TUPLE := $(OS_TUPLE) + TARGET_TUPLE := $(HOST_TUPLE) TARGET_TUPLE_WORDS := $(subst -, ,$(TARGET_TUPLE)) TARGET_ARCH := $(word 1,$(TARGET_TUPLE_WORDS)) TARGET_VENDOR := $(word 2,$(TARGET_TUPLE_WORDS)) @@ -100,15 +106,12 @@ ifndef ARCH SYSTEM_LIBDIR = /usr/$(SYSTEM_LIBDIR_NAME) endif -ifneq ($(TARGET_TUPLE),$(OS_TUPLE)) +ifneq ($(TARGET_TRIPLET),$(HOST_TRIPLET)) ifeq ($(TARGET),mingw) FLAVOUR_PREFIX ?= win32- FLAVOUR_SUFFIX ?= -win32 FLAVOUR_PATH_PREFIX ?= win32/ FLAVOUR_PATH_SUFFIX ?= /win32 - ifneq ($(wildcard /usr/bin/i686-w64-mingw32-gcc),) - TC_SYS_ROOT ?= /usr/i686-w64-mingw32/sys-root/mingw - endif else FLAVOUR_PREFIX ?= $(TARGET_TRIPLET)- FLAVOUR_SUFFIX ?= -$(TARGET_TRIPLET)