Enhance makefile to autodetect if AVOIDCOMBINE is needed.
authorKevin O'Connor <kevin@koconnor.net>
Sun, 25 Jan 2009 21:11:27 +0000 (16:11 -0500)
committerKevin O'Connor <kevin@koconnor.net>
Sun, 25 Jan 2009 21:11:27 +0000 (16:11 -0500)
Makefile
tools/test-combine.sh [new file with mode: 0755]

index eebc4d1507aba3deea5f7b4ff5ca9c1008faf06c..186ef51f25ef6224d0640ca7895d956282c80a39 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -54,10 +54,14 @@ vpath %.S src
 
 ################ Build rules
 
+ifndef AVOIDCOMBINE
+AVOIDCOMBINE=$(shell CC=$(CC) tools/test-combine.sh)
+endif
+
 # Do a whole file compile - two methods are supported.  The first
 # involves including all the content textually via #include
 # directives.  The second method uses gcc's "-combine" option.
-ifdef AVOIDCOMBINE
+ifeq "$(AVOIDCOMBINE)" "1"
 define whole-compile
 @echo "  Compiling whole program $3"
 $(Q)printf '$(foreach i,$2,#include "../$i"\n)' > $3.tmp.c
diff --git a/tools/test-combine.sh b/tools/test-combine.sh
new file mode 100755 (executable)
index 0000000..6d17fd0
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Script to test if gcc's -combine option works properly.
+
+TMPFILE1=out/tmp_testcompile1.c
+TMPFILE2=out/tmp_testcompile.o
+
+mkdir -p out
+cat - > $TMPFILE1 <<EOF
+struct ts { union { int u1; struct { int u2; }; }; };
+void t1(struct ts *r);
+EOF
+
+$CC -c -fwhole-program -combine $TMPFILE1 $TMPFILE1 -o $TMPFILE2 > /dev/null 2>&1
+
+if [ $? -eq 0 ]; then
+    #echo "  Setting AVOIDCOMBINE=0" > /dev/fd/2
+    echo 0
+else
+    echo "  Enabling AVOIDCOMBINE=1" > /dev/fd/2
+    echo 1
+fi
+
+rm -f $TMPFILE1 $TMPFILE2