On Wed, Feb 20, 2019 at 05:15:54PM -0800, christopher.w.cl...@gmail.com wrote:
> From: Christopher Clark <christopher.w.cl...@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.cla...@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

_______________________________________________
ipxe-devel mailing list
ipxe-devel@lists.ipxe.org
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel

Reply via email to