From 21cdc2e77a4ca99941fac8b82281a6dc2c8cab87 Mon Sep 17 00:00:00 2001 From: Thomas Monjalon Date: Mon, 19 May 2014 23:45:03 +0200 Subject: [PATCH] mk: fix 32-bit link with gcc MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Some linker options were not prefixed by -Wl, when using CC: -z muldefs -melf_i386 (CPU_LDFLAGS in 32-bit config) I didn't see any error with -z muldefs but it isn't documented in gcc manual. So it's safer to explicitly pass it to the linker. Also building 32-bit shared library raises this error: gcc: error: unrecognized command line option ‘-melf_i386’ Using macro linkerprefix fixes it. Signed-off-by: Thomas Monjalon Reviewed-by: Neil Horman Acked-by: Olivier Matz --- mk/rte.lib.mk | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk index f5d2789a9c..c58e68e847 100644 --- a/mk/rte.lib.mk +++ b/mk/rte.lib.mk @@ -62,6 +62,8 @@ exe2cmd = $(strip $(call dotfile,$(patsubst %,%.cmd,$(1)))) ifeq ($(LINK_USING_CC),1) # Override the definition of LD here, since we're linking with CC LD := $(CC) +LD_MULDEFS := $(call linkerprefix,-z$(comma)muldefs) +CPU_LDFLAGS := $(call linkerprefix,$(CPU_LDFLAGS)) endif O_TO_A = $(AR) crus $(LIB) $(OBJS-y) @@ -73,7 +75,7 @@ O_TO_A_DO = @set -e; \ $(O_TO_A) && \ echo $(O_TO_A_CMD) > $(call exe2cmd,$(@)) -O_TO_S = $(LD) $(CPU_LDFLAGS) -z muldefs -shared $(OBJS-y) -o $(LIB) +O_TO_S = $(LD) $(CPU_LDFLAGS) $(LD_MULDEFS) -shared $(OBJS-y) -o $(LIB) O_TO_S_STR = $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight O_TO_S_DISP = $(if $(V),"$(O_TO_S_STR)"," LD $(@)") O_TO_S_DO = @set -e; \ @@ -89,7 +91,7 @@ O_TO_C_DO = @set -e; \ $(lib_dir) \ $(copy_obj) else -O_TO_C = $(LD) -z muldefs -shared $(OBJS-y) -o $(LIB_ONE) +O_TO_C = $(LD) $(LD_MULDEFS) -shared $(OBJS-y) -o $(LIB_ONE) O_TO_C_STR = $(subst ','\'',$(O_TO_C)) #'# fix syntax highlight O_TO_C_DISP = $(if $(V),"$(O_TO_C_STR)"," LD_C $(@)") O_TO_C_DO = @set -e; \ -- 2.20.1