[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