aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfigure23
-rw-r--r--rules.mak5
2 files changed, 24 insertions, 4 deletions
diff --git a/configure b/configure
index 8fbe35b00e..4111e7cf00 100755
--- a/configure
+++ b/configure
@@ -1691,6 +1691,29 @@ bsd)
;;
esac
+# Determine what linker flags to use to force archive inclusion
+check_linker_flags()
+{
+ $cc $ARCH_CFLAGS -o $TMPE $OS_CFLAGS $TMPC -Wl,$1 -Wl,$2 >/dev/null 2>/dev/null
+}
+
+cat > $TMPC << EOF
+int main(void) { }
+EOF
+if check_linker_flags --whole-archive --no-whole-archive ; then
+ # GNU ld
+ echo "ARLIBS_BEGIN=-Wl,--whole-archive" >> $config_mak
+ echo "ARLIBS_END=-Wl,--no-whole-archive" >> $config_mak
+elif check_linker_flags -z,allextract -z,defaultextract ; then
+ # Solaris ld
+ echo "ARLIBS_BEGIN=-Wl,-z,allextract" >> $config_mak
+ echo "ARLIBS_END=-Wl,-z,defaultextract" >> $config_mak
+else
+ echo "Error: your linker does not support --whole-archive or -z."
+ echo "Please report to qemu-devel@nongnu.org"
+ exit 1
+fi
+
tools=
if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then
tools="qemu-img\$(EXESUF) $tools"
diff --git a/rules.mak b/rules.mak
index 8471d4007b..8d6d96e5b1 100644
--- a/rules.mak
+++ b/rules.mak
@@ -8,10 +8,7 @@
%.o: %.m
$(call quiet-command,$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<," OBJC $(TARGET_DIR)$@")
-WAS=-Wl,--whole-archive
-WAE=-Wl,--no-whole-archive
-
-LINK = $(call quiet-command,$(CC) $(LDFLAGS) -o $@ $(1) $(LIBS) $(WAS) $(ARLIBS) $(WAE)," LINK $(TARGET_DIR)$@")
+LINK = $(call quiet-command,$(CC) $(LDFLAGS) -o $@ $(1) $(ARLIBS_BEGIN) $(ARLIBS) $(ARLIBS_END) $(LIBS)," LINK $(TARGET_DIR)$@")
%$(EXESUF): %.o
$(call LINK,$^)