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 <jan@janware.com>
This commit is contained in:
Jan Lindemann 2019-03-03 10:45:08 +00:00
commit bf9bb79246
3 changed files with 81 additions and 88 deletions

View file

@ -7,7 +7,7 @@ TOPDIR = ..
CACHED_FILES := defs.mk projects.mk platform.mk Makefile CACHED_FILES := defs.mk projects.mk platform.mk Makefile
#CACHED_VARS = $(shell sed '/^[ \t]*\([A-Z_]\+\) *\(.=\).*$$.shell/!d; s/ *.=.*//' $(CACHED_FILES)) #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 RPM_ARCH
CACHED_VARS += TARGET_ARCH CACHED_VARS += TARGET_ARCH
#CACHED_VARS += DEVELOPMENT #CACHED_VARS += DEVELOPMENT

View file

@ -3,17 +3,17 @@ CREATE_DEVEL ?= true
#COMPILER_SUITE ?= clang #COMPILER_SUITE ?= clang
COMPILER_SUITE ?= gcc COMPILER_SUITE ?= gcc
ifeq ($(ARCH),$(ARCH_32)) ifeq ($(TARGET_ARCH),$(ARCH_32))
PROJECT_CFLAGS += -m32 PROJECT_CFLAGS += -m32
PROJECT_CPPFLAGS += -m32 PROJECT_CPPFLAGS += -m32
PROJECT_LDFLAGS += -m32 PROJECT_LDFLAGS += -m32
endif endif
ifeq ($(ARCH),armv7hl) ifeq ($(TARGET_ARCH),armv7hl)
PROJECT_CFLAGS += -fPIC PROJECT_CFLAGS += -fPIC
PROJECT_CPPFLAGS += -fPIC PROJECT_CPPFLAGS += -fPIC
PROJECT_LDFLAGS += PROJECT_LDFLAGS +=
else ifeq ($(ARCH),aarch64) else ifeq ($(TARGET_ARCH),aarch64)
PROJECT_CFLAGS += -fPIC PROJECT_CFLAGS += -fPIC
PROJECT_CPPFLAGS += -fPIC PROJECT_CPPFLAGS += -fPIC
PROJECT_LDFLAGS += PROJECT_LDFLAGS +=
@ -68,42 +68,56 @@ ifeq ($(USE_VERSION_MACROS),true)
BUILD_CPPFLAGS += -DVERSION=$(HEX_VERSION) -DVERSION_STR=\"$(VERSION)\" BUILD_CPPFLAGS += -DVERSION=$(HEX_VERSION) -DVERSION_STR=\"$(VERSION)\"
endif endif
ifeq ($(TARGET),mingw) # ----- tool chain
ifneq ($(wildcard /usr/bin/i686-w64-mingw32-gcc),)
PROJECT_CFLAGS += -D_WINDOWS ifneq ($(TARGET_TRIPLET),$(HOST_TRIPLET)) # we're cross-compiling
PROJECT_CPPFLAGS += -D_WINDOWS
TC_SYS_ROOT ?= /usr/i686-w64-mingw32/sys-root/mingw TC_BIN_PREFIX = $(TARGET_TRIPLET)-
CROSS_TOOL_DIR ?= TC_SYS_ROOT ?= /usr/$(TARGET_TRIPLET)
CROSS_TOOL_BIN_PREFIX ?= $(CROSS_TOOL_DIR)/usr/bin/i686-w64-mingw32- PROJECT_LDFLAGS += -L$(TC_SYS_ROOT)/lib
PROJECT_LDFLAGS += -L$(TC_SYS_ROOT)/lib PROJECT_CFLAGS += -I$(TC_SYS_ROOT)/include
PROJECT_CFLAGS += -I$(TC_SYS_ROOT)/include PROJECT_CPPFLAGS += -I$(TC_SYS_ROOT)/include
PROJECT_CPPFLAGS += -I$(TC_SYS_ROOT)/include
else ifeq ($(TARGET),mingw)
CROSS_TOOL_DIR ?= /opt/cross-tools
CROSS_TOOL_BIN_PREFIX ?= $(CROSS_TOOL_DIR)/bin/i686-pc-mingw32- ifneq ($(wildcard $(TC_BIN_PREFIX)gcc),)
endif PROJECT_CFLAGS += -D_WINDOWS
GCC ?= $(CROSS_TOOL_BIN_PREFIX)gcc PROJECT_CPPFLAGS += -D_WINDOWS
GPP ?= $(CROSS_TOOL_BIN_PREFIX)g++ TC_SYS_ROOT ?= /usr/$(TARGET_TRIPLET)/sys-root/mingw
LD ?= $(CROSS_TOOL_BIN_PREFIX)ld CROSS_TOOL_DIR ?=
CLANG ?= $(CROSS_TOOL_BIN_PREFIX)clang else
CLANGPP ?= $(CROSS_TOOL_BIN_PREFIX)clang++ CROSS_TOOL_DIR ?= /opt/cross-tools
STRIP ?= $(CROSS_TOOL_BIN_PREFIX)strip TC_BIN_PREFIX ?= $(CROSS_TOOL_DIR)/bin/i686-pc-mingw32-
RANLIB ?= $(CROSS_TOOL_BIN_PREFIX)ranlib endif
AR ?= $(CROSS_TOOL_BIN_PREFIX)ar WINDRES ?= $(TC_BIN_PREFIX)windres
WINDRES ?= $(CROSS_TOOL_BIN_PREFIX)windres BUILD_LDFLAGS += -lws2_32
BUILD_LDFLAGS += -lws2_32 USE_GFILTER ?= false
USE_GFILTER ?= false MS_LD ?= wine $(HOME)/local/mingw/packages/msvcpp/bin/LIB.EXE
MS_LD ?= wine $(HOME)/local/mingw/packages/msvcpp/bin/LIB.EXE endif # ifeq ($(TARGET),mingw)
else
GCC ?= gcc else # we're not cross-compiling
GPP ?= g++
LD ?= ld TC_SYS_ROOT ?= /usr
CLANG ?= clang LIBFLAGS += -ldl -lpthread
CLANGPP ?= clang++
STRIP ?= strip endif
RANLIB ?= ranlib
AR ?= ar ifeq ($(TARGET_ARCH),x86_64)
endif # ifeq ($(TARGET),mingw) 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 # compiler and linker
# gcc # gcc
@ -199,18 +213,10 @@ endif
LPPFLAGS += -lstdc++ LPPFLAGS += -lstdc++
ifeq ($(ARCH),x86_64)
ifneq ($(TARGET),mingw)
BUILD_CFLAGS += -fPIC
BUILD_CPPFLAGS+= -fPIC
LIBFLAGS +=
endif
endif
ifeq ($(GCC_MAJOR),2) ifeq ($(GCC_MAJOR),2)
LPPFLAGS += -lm LPPFLAGS += -lm
BUILD_CFLAGS += -I/usr/local/include BUILD_CFLAGS += -I/usr/local/include
BUILD_CPPFLAGS += -I/usr/local/include BUILD_CPPFLAGS += -I/usr/local/include
else else
ifeq ($(GCC_MAJOR),3) ifeq ($(GCC_MAJOR),3)
ifeq ($(GCC_MINOR),3) ifeq ($(GCC_MINOR),3)
@ -221,10 +227,10 @@ else
endif endif
ifeq ($(TARGET),mingw) ifeq ($(TARGET),mingw)
BUILD_CFLAGS += -DWIN32 BUILD_CFLAGS += -DWIN32
BUILD_CPPFLAGS += -DWIN32 BUILD_CPPFLAGS += -DWIN32
# see https://stackoverflow.com/questions/4492799 # see https://stackoverflow.com/questions/4492799
BUILD_LDFLAGS += -fstack-protector BUILD_LDFLAGS += -fstack-protector
endif endif
ifeq ($(LIBTYPE),shared) ifeq ($(LIBTYPE),shared)
@ -242,8 +248,6 @@ ifeq ($(LOG_THREAD_NAMES), true)
BUILD_CPPFLAGS+= -DSLOG_THREAD_NAMES BUILD_CPPFLAGS+= -DSLOG_THREAD_NAMES
endif endif
CPP ?= g++
# ----- standard features, switched on with USE_XXX = true # ----- standard features, switched on with USE_XXX = true
#include $(MODDIR)/make/lib-deps.mk #include $(MODDIR)/make/lib-deps.mk
@ -273,14 +277,14 @@ endif
ifneq ($(filter jw-build,$(PREREQ_BUILD)),) ifneq ($(filter jw-build,$(PREREQ_BUILD)),)
ifeq ($(TARGET),mingw) ifeq ($(TARGET),mingw)
JW_BUILD_LDFLAGS += -lglib-2.0 -lws2_32 -lstdc++ JW_BUILD_LDFLAGS += -lglib-2.0 -lws2_32 -lstdc++
endif endif
endif endif
ifeq ($(USE_SYSTEMD),true) ifeq ($(USE_SYSTEMD),true)
BUILD_CFLAGS += -D_USE_SYSTEMD_ $(shell pkg-config --cflags libsystemd) BUILD_CFLAGS += -D_USE_SYSTEMD_ $(shell $(PKG_CONFIG) --cflags libsystemd)
BUILD_CPPFLAGS += -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_LDFLAGS += $(shell $(PKG_CONFIG) --libs libsystemd)
endif endif
ifeq ($(USE_TIMER),true) ifeq ($(USE_TIMER),true)
@ -399,11 +403,9 @@ ifeq ($(CC),$(GCC))
-fno-tree-loop-optimize \ -fno-tree-loop-optimize \
-fno-early-inlining \ -fno-early-inlining \
-fno-default-inline -fno-default-inline
else else ifeq ($(CC),$(CLANG))
ifeq ($(CC),$(CLANG)) BUILD_CFLAGS += -Werror
BUILD_CFLAGS += -Werror BUILD_CPPFLAGS += -Werror
BUILD_CPPFLAGS += -Werror
endif
endif endif
ifeq ($(USE_COMPILER_OPTIMIZATION_OPTS),true) ifeq ($(USE_COMPILER_OPTIMIZATION_OPTS),true)
@ -475,21 +477,9 @@ ifeq ($(USE_FFTW),true)
endif endif
ifeq ($(USE_GLIB),true) ifeq ($(USE_GLIB),true)
ifneq ($(TARGET),mingw) PROJECT_CFLAGS += $(shell $(PKG_CONFIG) --cflags glib-2.0)
PROJECT_CFLAGS += $(shell pkg-config --cflags glib-2.0) PROJECT_CPPFLAGS += $(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 += $(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
endif endif
ifeq ($(CC),$(CLANG)) ifeq ($(CC),$(CLANG))

View file

@ -27,8 +27,14 @@ ifndef GET_OS_SH
GET_OS_SH := $(SHELL) $(MOD_SCRIPT_DIR)/get-os.sh GET_OS_SH := $(SHELL) $(MOD_SCRIPT_DIR)/get-os.sh
endif endif
ifeq ($(OS_TUPLE),) ifeq ($(HOST_TUPLE),)
OS_TUPLE := $(shell $(GET_OS_SH) 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 endif
ifneq ($(TARGET_TUPLE),) ifneq ($(TARGET_TUPLE),)
@ -47,7 +53,7 @@ else ifneq ($(TARGET_TRIPLET),)
TARGET_TUPLE := $(TARGET_ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(TARGET_ABI) TARGET_TUPLE := $(TARGET_ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(TARGET_ABI)
TARGET_TUPLE_WORDS := $(subst -, ,$(TARGET_TUPLE)) TARGET_TUPLE_WORDS := $(subst -, ,$(TARGET_TUPLE))
else else
TARGET_TUPLE := $(OS_TUPLE) TARGET_TUPLE := $(HOST_TUPLE)
TARGET_TUPLE_WORDS := $(subst -, ,$(TARGET_TUPLE)) TARGET_TUPLE_WORDS := $(subst -, ,$(TARGET_TUPLE))
TARGET_ARCH := $(word 1,$(TARGET_TUPLE_WORDS)) TARGET_ARCH := $(word 1,$(TARGET_TUPLE_WORDS))
TARGET_VENDOR := $(word 2,$(TARGET_TUPLE_WORDS)) TARGET_VENDOR := $(word 2,$(TARGET_TUPLE_WORDS))
@ -100,15 +106,12 @@ ifndef ARCH
SYSTEM_LIBDIR = /usr/$(SYSTEM_LIBDIR_NAME) SYSTEM_LIBDIR = /usr/$(SYSTEM_LIBDIR_NAME)
endif endif
ifneq ($(TARGET_TUPLE),$(OS_TUPLE)) ifneq ($(TARGET_TRIPLET),$(HOST_TRIPLET))
ifeq ($(TARGET),mingw) ifeq ($(TARGET),mingw)
FLAVOUR_PREFIX ?= win32- FLAVOUR_PREFIX ?= win32-
FLAVOUR_SUFFIX ?= -win32 FLAVOUR_SUFFIX ?= -win32
FLAVOUR_PATH_PREFIX ?= win32/ FLAVOUR_PATH_PREFIX ?= win32/
FLAVOUR_PATH_SUFFIX ?= /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 else
FLAVOUR_PREFIX ?= $(TARGET_TRIPLET)- FLAVOUR_PREFIX ?= $(TARGET_TRIPLET)-
FLAVOUR_SUFFIX ?= -$(TARGET_TRIPLET) FLAVOUR_SUFFIX ?= -$(TARGET_TRIPLET)