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_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

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

View file

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