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

@ -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))