[ipxe-devel] [PATCH] Fix host compiler no-pie flag detection and enable build env flags
Geert Stappers
geert.stappers at hendrikx-itc.nl
Fri Mar 1 13:49:09 UTC 2019
On Wed, Feb 20, 2019 at 05:15:54PM -0800, christopher.w.clark at gmail.com wrote:
> From: Christopher Clark <christopher.w.clark at gmail.com>
>
> Cannot assume that that flags detected for the target compiler are
> the same as for the host compiler. Perform detection for both.
>
> Add EXTRA_HOST_CFLAGS and EXTRA_HOST_LDFLAGS variable for supplying
> host tool arguments. This replaces prior hardcoded '-O2 -g'.
>
> Signed-off-by: Christopher Clark <christopher.clark6 at baesystems.com>
> ---
>
> This patch fixes compilation of ipxe with modern Yocto and OpenEmbedded
> on build hosts with different native toolchains.
>
> src/Makefile.housekeeping | 5 +++--
> src/arch/i386/Makefile | 17 +++++++++++++----
> 2 files changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping
> index f8334921..5451c39c 100644
> --- a/src/Makefile.housekeeping
> +++ b/src/Makefile.housekeeping
> @@ -133,6 +133,7 @@ eval :
> WORKAROUND_CFLAGS :=
> WORKAROUND_ASFLAGS :=
> WORKAROUND_LDFLAGS :=
> +WORKAROUND_HOST_CFLAGS :=
>
> # Make syntax does not allow use of comma or space in certain places.
> # This ugly workaround is suggested in the manual.
> @@ -445,7 +446,7 @@ endif
> CFLAGS += $(WORKAROUND_CFLAGS) $(EXTRA_CFLAGS)
> ASFLAGS += $(WORKAROUND_ASFLAGS) $(EXTRA_ASFLAGS)
> LDFLAGS += $(WORKAROUND_LDFLAGS) $(EXTRA_LDFLAGS)
> -HOST_CFLAGS += $(WORKAROUND_CFLAGS) -O2 -g
> +HOST_CFLAGS += $(WORKAROUND_HOST_CFLAGS) $(EXTRA_HOST_CFLAGS)
>
> # Inhibit -Werror if NO_WERROR is specified on make command line
> #
> @@ -1375,7 +1376,7 @@ endif # defined(BIN)
> # The compression utilities
> #
>
> -ZBIN_LDFLAGS := -llzma
> +ZBIN_LDFLAGS := -llzma $(EXTRA_HOST_LDFLAGS)
>
> $(ZBIN) : util/zbin.c $(MAKEDEPS)
> $(QM)$(ECHO) " [HOSTCC] $@"
> diff --git a/src/arch/i386/Makefile b/src/arch/i386/Makefile
> index b7c2792d..4a637ad3 100644
> --- a/src/arch/i386/Makefile
> +++ b/src/arch/i386/Makefile
> @@ -78,11 +78,20 @@ CFLAGS += -Ui386
> # -nopie. We therefore test for both.
> #
> ifeq ($(CCTYPE),gcc)
> -PIE_TEST = [ -z "`$(CC) -fno-PIE -no-pie -x c -c /dev/null -o /dev/null 2>&1`" ]
> -PIE_FLAGS := $(shell $(PIE_TEST) && $(ECHO) '-fno-PIE -no-pie')
> -PIE_TEST2 = [ -z "`$(CC) -fno-PIE -nopie -x c -c /dev/null -o /dev/null 2>&1`" ]
> +PIE_TEST1_FLAGS = "-fno-PIE -no-pie -x c -c /dev/null -o /dev/null 2>&1"
> +PIE_TEST2_FLAGS = "-fno-PIE -nopie -x c -c /dev/null -o /dev/null 2>&1"
> +
> +PIE_TEST1 = [ -z "`$(CC) "$(PIE_TEST1_FLAGS)"`" ]
> +PIE_TEST2 = [ -z "`$(CC) "$(PIE_TEST2_FLAGS)"`" ]
> +PIE_FLAGS1 := $(shell $(PIE_TEST1) && $(ECHO) '-fno-PIE -no-pie')
> PIE_FLAGS2 := $(shell $(PIE_TEST2) && $(ECHO) '-fno-PIE -nopie')
> -WORKAROUND_CFLAGS += $(PIE_FLAGS) $(PIE_FLAGS2)
> +WORKAROUND_CFLAGS += $(PIE_FLAGS1) $(PIE_FLAGS2)
> +
> +HOST_PIE_TEST1 = [ -z "`$(HOSTCC) "$(PIE_TEST1_FLAGS)"`" ]
> +HOST_PIE_TEST2 = [ -z "`$(HOSTCC) "$(PIE_TEST2_FLAGS)"`" ]
> +HOST_PIE_FLAGS1 := $(shell $(HOST_PIE_TEST1) && $(ECHO) '-fno-PIE -no-pie')
> +HOST_PIE_FLAGS2 := $(shell $(HOST_PIE_TEST2) && $(ECHO) '-fno-PIE -nopie')
> +WORKAROUND_HOST_CFLAGS += $(HOST_PIE_FLAGS1) $(HOST_PIE_FLAGS2)
> endif
>
> # i386-specific directories containing source files
> --
Doing `git am` went fine. Compiling on Linux amd64 also fine.
Included in https://gitlab.com/hendrikx-itc/ipxe/tree/mailinglist
in an attempt to prevent that the patch gets lost in the ML archive.
Cheers
Geert Stappers
DevOps Engineer at Hendrikx ITC
More information about the ipxe-devel
mailing list