aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2009-01-25 16:11:27 -0500
committerKevin O'Connor <kevin@koconnor.net>2009-01-25 16:11:27 -0500
commit231f710715a7f6ddf1626fda38ebdb511b5d55dc (patch)
treec5599786cc20556873fe99cc43d88b0f381afe08
parentd99908e5114d428a6b142d1f222a8d0a3fd9cfe9 (diff)
downloadseabios-231f710715a7f6ddf1626fda38ebdb511b5d55dc.tar.gz
Enhance makefile to autodetect if AVOIDCOMBINE is needed.
-rw-r--r--Makefile6
-rwxr-xr-xtools/test-combine.sh23
2 files changed, 28 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index eebc4d15..186ef51f 100644
--- 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
index 00000000..6d17fd05
--- /dev/null
+++ b/tools/test-combine.sh
@@ -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