mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
common.mak: improve cross compilation support
Introduce `BUILD_ARCH` and `(CC|LINK|...|OBJDUMP)_FOR_BUILD` variables in order to properly support the build of tools that generate code or data during the build process. Replace existing variables `HOSTCC` with `CC_FOR_BUILD` and `HOSTCFLAGS` `CFLAGS_FOR_BUILD`. The Makefile variables for the `HOST_ARCH` are unchanged. Reviewed-by: Jan Höppner <hoeppner@linux.ibm.com> Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com> Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
This commit is contained in:
committed by
Steffen Eiden
parent
e2b68b4d9b
commit
ed4c68e867
@@ -16,6 +16,12 @@ Release history for s390-tools (MIT version)
|
||||
`CROSS_COMPILE` is set
|
||||
- rename Makefile variable `ARCH` to `HOST_ARCH`. `HOST_ARCH` is the
|
||||
architecture that will run the produced (executable) objects
|
||||
- add the Makefile variable `BUILD_ARCH`. `BUILD_ARCH` is the
|
||||
architecture of the build system. For each Makefile variable like
|
||||
`CC`, `LINK`, `CPP`, ... there is a suffixed version of it - e.g.
|
||||
`CC_FOR_BUILD`. This is useful for cross compiling, and this naming
|
||||
convention is very similar to the Meson convention (see
|
||||
https://mesonbuild.com/Reference-tables.html#environment-variables-per-machine).
|
||||
|
||||
Bug Fixes:
|
||||
|
||||
|
||||
61
common.mak
61
common.mak
@@ -12,7 +12,10 @@ MAKECMDGOALS ?=
|
||||
ifeq ($(COMMON_INCLUDED),false)
|
||||
COMMON_INCLUDED := true
|
||||
|
||||
HOST_ARCH ?= $(shell uname -m | sed -e 's/i.86/i386/' -e 's/sun4u/sparc64/' -e 's/arm.*/arm/' -e 's/sa110/arm/')
|
||||
# 'BUILD_ARCH' is the architecture of the machine where the build takes place
|
||||
BUILD_ARCH := $(shell uname -m | sed -e 's/i.86/i386/' -e 's/sun4u/sparc64/' -e 's/arm.*/arm/' -e 's/sa110/arm/')
|
||||
# 'HOST_ARCH' is the architecture of the machine that will run the compiled output
|
||||
HOST_ARCH ?= $(BUILD_ARCH)
|
||||
|
||||
# Global definitions
|
||||
# The variable "DISTRELEASE" should be overwritten in rpm spec files with:
|
||||
@@ -29,9 +32,9 @@ rootdir= $(dir $(filter %common.mak,$(MAKEFILE_LIST)))
|
||||
export S390_TEST_LIB_PATH=$(rootdir)/s390-tools-testsuite/lib
|
||||
|
||||
#
|
||||
# For cross compiles specify CROSS_COMPILE= on the commandline:
|
||||
# For cross compiles specify HOST_ARCH= and CROSS_COMPILE= on the commandline:
|
||||
#
|
||||
# $ make CROSS_COMPILE="s390x-5.1.0-"
|
||||
# $ make HOST_ARCH=s390x CROSS_COMPILE="s390x-linux-gnu-"
|
||||
#
|
||||
|
||||
CROSS_COMPILE =
|
||||
@@ -78,18 +81,35 @@ define cmd_define_and_export
|
||||
export $(strip $(1))
|
||||
endef
|
||||
|
||||
$(eval $(call cmd_define_and_export, AS," AS ",$(CROSS_COMPILE)as))
|
||||
$(eval $(call cmd_define_and_export, CC," CC ",$(CROSS_COMPILE)gcc))
|
||||
$(eval $(call cmd_define_and_export, LINK," LINK ",$(CC)))
|
||||
$(eval $(call cmd_define_and_export, HOSTCC," HOSTCC ",gcc))
|
||||
$(eval $(call cmd_define_and_export, CXX," CXX ",$(CROSS_COMPILE)g++))
|
||||
$(eval $(call cmd_define_and_export, LINKXX," LINKXX ",$(CXX)))
|
||||
$(eval $(call cmd_define_and_export, CPP," CPP ",$(CROSS_COMPILE)gcc -E))
|
||||
$(eval $(call cmd_define_and_export, AR," AR ",$(CROSS_COMPILE)ar))
|
||||
$(eval $(call cmd_define_and_export, NM," NM ",$(CROSS_COMPILE)nm))
|
||||
$(eval $(call cmd_define_and_export, STRIP," STRIP ",$(CROSS_COMPILE)strip))
|
||||
$(eval $(call cmd_define_and_export,OBJCOPY," OBJCOPY ",$(CROSS_COMPILE)objcopy))
|
||||
$(eval $(call cmd_define_and_export,OBJDUMP," OBJDUMP ",$(CROSS_COMPILE)objdump))
|
||||
define define_toolchain_variables
|
||||
$(eval $(call cmd_define_and_export, AS$(1)," AS$(1) ",$(2)as))
|
||||
$(eval $(call cmd_define_and_export, CC$(1)," CC$(1) ",$(2)gcc))
|
||||
$(eval $(call cmd_define_and_export, LINK$(1)," LINK$(1) ",$$(CC$(1))))
|
||||
$(eval $(call cmd_define_and_export, CXX$(1)," CXX$(1) ",$(2)g++))
|
||||
$(eval $(call cmd_define_and_export, LINKXX$(1)," LINKXX$(1) ",$$(CXX$(1))))
|
||||
$(eval $(call cmd_define_and_export, CPP$(1)," CPP$(1) ",$(2)gcc -E))
|
||||
$(eval $(call cmd_define_and_export, AR$(1)," AR$(1) ",$(2)ar))
|
||||
$(eval $(call cmd_define_and_export, NM$(1)," NM$(1) ",$(2)nm))
|
||||
$(eval $(call cmd_define_and_export, STRIP$(1)," STRIP$(1) ",$(2)strip))
|
||||
$(eval $(call cmd_define_and_export,OBJCOPY$(1)," OBJCOPY$(1) ",$(2)objcopy))
|
||||
$(eval $(call cmd_define_and_export,OBJDUMP$(1)," OBJDUMP$(1) ",$(2)objdump))
|
||||
$(eval PKG_CONFIG$(1) = pkg-config)
|
||||
$(eval export PKG_CONFIG$(1))
|
||||
endef
|
||||
|
||||
# If the host architecture is not the same as the build architecture
|
||||
# 'CROSS_COMPILE=...' is always required (except for the '*clean' targets).
|
||||
ifneq ($(HOST_ARCH),$(BUILD_ARCH))
|
||||
ifeq ($(CROSS_COMPILE),)
|
||||
# `make clean` and similar must always work!
|
||||
ifeq ($(filter %clean,$(MAKECMDGOALS)),)
|
||||
$(error Please specify CROSS_COMPILE=... and try it again!)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
$(call define_toolchain_variables,_FOR_BUILD,)
|
||||
$(call define_toolchain_variables,,$(CROSS_COMPILE))
|
||||
|
||||
$(eval $(call cmd_define,RUNTEST," RUNTEST ",$(S390_TEST_LIB_PATH)/s390_runtest))
|
||||
$(eval $(call cmd_define, CAT," CAT ",cat))
|
||||
@@ -98,9 +118,6 @@ $(eval $(call cmd_define, GZIP," GZIP ",gzip))
|
||||
$(eval $(call cmd_define, MV," MV ",mv))
|
||||
$(eval $(call cmd_define, PERLC," PERLC ",perl -c))
|
||||
|
||||
PKG_CONFIG = pkg-config
|
||||
export PKG_CONFIG
|
||||
|
||||
CHECK = sparse
|
||||
CHECK_SILENT := $(CHECK)
|
||||
CHECKTOOL = $(call echocmd," CHECK ",/$@)$(CHECK_SILENT)
|
||||
@@ -269,10 +286,10 @@ ZFCPDUMP_INITRD = zfcpdump-initrd
|
||||
ZFCPDUMP_FLAVOR = zfcpdump
|
||||
export ZFCPDUMP_DIR ZFCPDUMP_IMAGE ZFCPDUMP_INITRD ZFCPDUMP_FLAVOR
|
||||
|
||||
CFLAGS ?= $(DEFAULT_CFLAGS) $(OPT_FLAGS)
|
||||
HOSTCFLAGS ?= $(DEFAULT_CFLAGS) $(OPT_FLAGS)
|
||||
CPPFLAGS ?= $(DEFAULT_CPPFLAGS)
|
||||
LDFLAGS ?= $(DEFAULT_LDFLAGS)
|
||||
CFLAGS ?= $(DEFAULT_CFLAGS) $(OPT_FLAGS)
|
||||
CFLAGS_FOR_BUILD ?= $(DEFAULT_CFLAGS) $(OPT_FLAGS)
|
||||
CPPFLAGS ?= $(DEFAULT_CPPFLAGS)
|
||||
LDFLAGS ?= $(DEFAULT_LDFLAGS)
|
||||
|
||||
ALL_CFLAGS = -DS390_TOOLS_RELEASE=$(S390_TOOLS_RELEASE) \
|
||||
-DS390_TOOLS_LIBDIR=$(TOOLS_LIBDIR) \
|
||||
|
||||
@@ -27,7 +27,7 @@ check_dep:
|
||||
all: check_dep $(ZFCPDUMP_INITRD) scripts
|
||||
|
||||
cpioinit: cpioinit.c
|
||||
$(HOSTCC) $(HOSTCFLAGS) -o $@ $^
|
||||
$(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) -o $@ $^
|
||||
|
||||
zfcpdump_part: zfcpdump.o zfcpdump_part.o
|
||||
$(LINK) $(ALL_LDFLAGS) $^ -static -o $@
|
||||
|
||||
Reference in New Issue
Block a user