Use -Wl,-r to do partial linking with clang, and -r to do partial linking with GCC. Hopefully this fixes building with GCC 4.6.0 while still working with GCC on sparc, and with clang on all platforms

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/tools/make/trunk@32835 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Nicola Pero 2011-04-11 20:23:50 +00:00
parent 2a8870194a
commit a70a23a808
5 changed files with 81 additions and 13 deletions

View file

@ -1,3 +1,12 @@
2011-04-11 Nicola Pero <nicola.pero@meta-innovation.com>
* configure.ac: Set OBJ_MERGE_CMD_FLAG to -r or -Wl,-r depending
on whether we're using GCC or clang.
* configure: Regenerated.
* config.make.in (OBJ_MERGE_CMD_FLAG): New.
* target.make: Use OBJ_MERGE_CMD_FLAG instead of -Wl,-r
-mno-relax.
2011-04-09 Nicola Pero <nicola.pero@meta-innovation.com>
* common.make: Updated comments.

View file

@ -229,3 +229,8 @@ GCC_WITH_PRECOMPILED_HEADERS = @GCC_WITH_PRECOMPILED_HEADERS@
# be an absolute path.
#
GNUSTEP_ABSOLUTE_INSTALL_PATHS = @GNUSTEP_ABSOLUTE_INSTALL_PATHS@
#
# Whether to use -r or -Wl,-r when doing partial linking
#
OBJ_MERGE_CMD_FLAG = @OBJ_MERGE_CMD_FLAG@

29
configure vendored
View file

@ -587,6 +587,7 @@ SOLARIS_SHARED
GCC_WITH_PRECOMPILED_HEADERS
AUTO_DEPENDENCIES
USE_OBJC_EXCEPTIONS
OBJ_MERGE_CMD_FLAG
USE_NONFRAGILE_ABI
OBJCXX
ac_cv_objc_threaded
@ -5655,6 +5656,34 @@ fi
# Keep LIBS and CFLAGS as they are for a while - we need them in
# the following Objective-C tests!
#--------------------------------------------------------------------
# Check if we should use -r or -Wl,-r when doing partial linking
#--------------------------------------------------------------------
# Ideally, we'd use -r or -Wl,-r everywhere and that would work with
# both GCC and clang. But -r doesn't work with clang on some
# platforms, while using -Wl,-r is a problem with GCC on some Sparc
# systems, where GCC automatically passes --relax to the linker unless
# you specify -r. If you specify -Wl,-r, it still passes --relax,
# producing the error
#
# ld: --relax and -r may not be used together
#
# To work around this, we use -Wl,-r with clang, and -r with GCC.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the flag to use to do partial linking" >&5
$as_echo_n "checking for the flag to use to do partial linking... " >&6; }
if test ${GCC} = "yes" ; then
OBJ_MERGE_CMD_FLAG=-r
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: -r" >&5
$as_echo "-r" >&6; }
else
OBJ_MERGE_CMD_FLAG=-Wl,-r
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: -Wl,-r" >&5
$as_echo "-Wl,-r" >&6; }
fi
#--------------------------------------------------------------------
# Check for the GCC version - this is used in the following tests
#--------------------------------------------------------------------

View file

@ -1365,6 +1365,31 @@ AC_SUBST(USE_NONFRAGILE_ABI)
# Keep LIBS and CFLAGS as they are for a while - we need them in
# the following Objective-C tests!
#--------------------------------------------------------------------
# Check if we should use -r or -Wl,-r when doing partial linking
#--------------------------------------------------------------------
# Ideally, we'd use -r or -Wl,-r everywhere and that would work with
# both GCC and clang. But -r doesn't work with clang on some
# platforms, while using -Wl,-r is a problem with GCC on some Sparc
# systems, where GCC automatically passes --relax to the linker unless
# you specify -r. If you specify -Wl,-r, it still passes --relax,
# producing the error
#
# ld: --relax and -r may not be used together
#
# To work around this, we use -Wl,-r with clang, and -r with GCC.
AC_MSG_CHECKING(for the flag to use to do partial linking)
if test ${GCC} = "yes" ; then
OBJ_MERGE_CMD_FLAG=-r
AC_MSG_RESULT([-r])
else
OBJ_MERGE_CMD_FLAG=-Wl,-r
AC_MSG_RESULT([-Wl,-r])
fi
AC_SUBST(OBJ_MERGE_CMD_FLAG)
#--------------------------------------------------------------------
# Check for the GCC version - this is used in the following tests
#--------------------------------------------------------------------

View file

@ -231,7 +231,7 @@ SHARED_LIB_LINK_CMD = \
endif # OBJC_COMPILER
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r -mno-relax -d $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) -d $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
STATIC_LIB_LINK_CMD = \
/usr/bin/libtool $(STATIC_LD_PREFLAGS) -static $(ARCH_FLAGS) $(ALL_LDFLAGS) -o $@ $^ \
@ -375,7 +375,7 @@ AFTER_INSTALL_SHARED_LIB_CMD = \
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE) )
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r -mno-relax -d $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) -d $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
STATIC_LIB_LINK_CMD = \
/usr/bin/libtool $(STATIC_LD_PREFLAGS) -static $(ARCH_FLAGS) $(ALL_LDFLAGS) -o $@ $^ \
@ -563,7 +563,7 @@ AFTER_INSTALL_SHARED_LIB_CHOWN = \
chown $(CHOWN_TO) $(LIB_LINK_FILE))
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r -mno-relax $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
SHARED_CFLAGS += -fPIC
SHARED_LIBEXT = .so
@ -641,7 +641,7 @@ AFTER_INSTALL_SHARED_LIB_CHOWN = \
chown $(CHOWN_TO) $(LIB_LINK_SONAME_FILE); \
chown $(CHOWN_TO) $(LIB_LINK_FILE))
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r -mno-relax $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
SHARED_CFLAGS += -fPIC
SHARED_LIBEXT = .so
@ -683,7 +683,7 @@ SHARED_LIB_LINK_CMD = \
$(RM_LN_S) $(LIB_LINK_FILE); \
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r -mno-relax $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
SHARED_CFLAGS += -fPIC
SHARED_LIBEXT = .so
@ -716,7 +716,7 @@ SHARED_LIB_LINK_CMD = \
$(RM_LN_S) $(LIB_LINK_FILE); \
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r -mno-relax $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
SHARED_CFLAGS += -fPIC
SHARED_LIBEXT = .so
@ -762,7 +762,7 @@ AFTER_INSTALL_SHARED_LIB_CMD = \
)
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r -mno-relax $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
SHARED_CFLAGS += -fPIC
SHARED_LIBEXT = .so
@ -794,7 +794,7 @@ SHARED_LIB_LINK_CMD = \
$(RM_LN_S) $(LIB_LINK_FILE); \
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r -mno-relax $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
SHARED_CFLAGS += -fPIC
SHARED_LIBEXT = .so
@ -851,7 +851,7 @@ SHARED_CFLAGS += -fPIC
SHARED_LIBEXT = .so
OBJ_MERGE_CMD = \
$(LD) -Wl,-r -mno-relax $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
ADDITIONAL_LDFLAGS +=
STATIC_LDFLAGS +=
@ -906,7 +906,7 @@ DLL_LIBEXT = .dll
#SHARED_CFLAGS +=
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
HAVE_BUNDLES = yes
BUNDLE_LD = $(LD)
@ -956,7 +956,7 @@ CYGWIN_LD_FLAGS = -Wl,--export-all-symbols -Wl,--enable-auto-import
#SHARED_CFLAGS +=
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r $(ALL_LDFLAGS) $(CYGWIN_LD_FLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) $(CYGWIN_LD_FLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
HAVE_BUNDLES = yes
BUNDLE_LD = $(LD)
@ -1017,7 +1017,7 @@ AFTER_INSTALL_SHARED_LIB_CHOWN = \
chown $(CHOWN_TO) $(LIB_LINK_FILE))
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
SHARED_CFLAGS += -fpic -fPIC -std=gnu99
SHARED_LIBEXT = .so
@ -1077,7 +1077,7 @@ SHARED_LIB_LINK_CMD = \
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
OBJ_MERGE_CMD = \
$(LD) -nostdlib -Wl,-r $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
ifeq ($(CC), cc)
SHARED_CFLAGS += +z