MCONFIG: build GCCOPT one step at a time, don't align stack
authorH. Peter Anvin <hpa@zytor.com>
Wed, 24 Jun 2009 22:55:43 +0000 (15:55 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Wed, 24 Jun 2009 22:55:43 +0000 (15:55 -0700)
Some gcc options are only valid together with other gcc options, so
build GCCOPT one bit at a time, and change gcc_ok to take already
existing GCCOPT flags into account.

This lets us build with -mpreferred-stack-boundary=2, which is only
valid on 32 bits and therefore with -m32.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
MCONFIG
MCONFIG.embedded
com32/MCONFIG
com32/lib/MCONFIG

diff --git a/MCONFIG b/MCONFIG
index b98c572..894bf23 100644 (file)
--- a/MCONFIG
+++ b/MCONFIG
@@ -41,7 +41,8 @@ CHMOD  = chmod
 
 CC      = gcc
 gcc_ok   = $(shell tmpf=gcc_ok.$$$$.tmp; \
-                  if $(CC) $(1) -c $(topdir)/dummy.c -o $$tmpf 2>/dev/null ; \
+                  if $(CC) $(GCCOPT) $(1) -c $(topdir)/dummy.c \
+                       -o $$tmpf 2>/dev/null ; \
                   then echo '$(1)'; else echo '$(2)'; fi; \
                   rm -f $$tmpf)
 
index 586afc3..b5c8f5d 100644 (file)
 
 include $(topdir)/MCONFIG
 
-GCCOPT    := $(call gcc_ok,-m32,) \
-            $(call gcc_ok,-ffreestanding,) \
-            $(call gcc_ok,-fno-stack-protector,) \
-            $(call gcc_ok,-falign-functions=0,-malign-functions=0) \
-            $(call gcc_ok,-falign-jumps=0,-malign-jumps=0) \
-            $(call gcc_ok,-falign-loops=0,-malign-loops=0) \
-            -march=i386 -Os -fomit-frame-pointer -mregparm=3 -DREGPARM=3 \
+GCCOPT    := $(call gcc_ok,-m32,)
+GCCOPT    += $(call gcc_ok,-ffreestanding,)
+GCCOPT   += $(call gcc_ok,-fno-stack-protector,)
+GCCOPT    += -march=i386 -Os -fomit-frame-pointer -mregparm=3 -DREGPARM=3 \
             -msoft-float
+GCCOPT   += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
+GCCOPT    += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
+GCCOPT    += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
+GCCOPT    += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
+GCCOPT    += $(call gcc_ok,-mpreferred-stack-boundary=2,)
 
 LIBGCC    := $(shell $(CC) $(GCCOPT) --print-libgcc)
 
index 6d25b2d..0fa7802 100644 (file)
 
 include $(topdir)/MCONFIG
 
-GCCOPT := $(call gcc_ok,-std=gnu99,) \
-         $(call gcc_ok,-m32,) \
-         $(call gcc_ok,-fno-stack-protector,) \
-         $(call gcc_ok,-fPIE,-fPIC) \
-         -mregparm=3 -DREGPARM=3 -march=i386 -Os
+GCCOPT := $(call gcc_ok,-std=gnu99,)
+GCCOPT += $(call gcc_ok,-m32,)
+GCCOPT += $(call gcc_ok,-fno-stack-protector,)
+GCCOPT += -mregparm=3 -DREGPARM=3 -march=i386 -Os
+GCCOPT += $(call gcc_ok,-fPIE,-fPIC)
+GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
+GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
+GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
+GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
+GCCOPT += $(call gcc_ok,-mpreferred-stack-boundary=2,)
 
 com32  := $(topdir)/com32
 RELOCS := $(com32)/tools/relocs
index ba23c91..d539529 100644 (file)
@@ -2,10 +2,15 @@
 
 include $(topdir)/MCONFIG
 
-GCCOPT := $(call gcc_ok,-std=gnu99,) \
-         $(call gcc_ok,-m32,) \
-         $(call gcc_ok,-fno-stack-protector,) \
-         $(call gcc_ok,-fPIE,-fPIC)
+GCCOPT := $(call gcc_ok,-std=gnu99,)
+GCCOPT += $(call gcc_ok,-m32,)
+GCCOPT += $(call gcc_ok,-fno-stack-protector,)
+GCCOPT += $(call gcc_ok,-fPIE,-fPIC)
+GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
+GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
+GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
+GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
+GCCOPT += $(call gcc_ok,-mpreferred-stack-boundary=2,)
 
 INCLUDE        = -I.
 STRIP  = strip --strip-all -R .comment -R .note
@@ -23,8 +28,7 @@ LIBFLAGS = -DDYNAMIC_CRC_TABLE -DPNG_NO_CONSOLE_IO \
 
 REQFLAGS  = $(GCCOPT) -g -mregparm=3 -DREGPARM=3 -D__COM32__ \
            -nostdinc -iwithprefix include -I. -I./sys -I../include
-OPTFLAGS  = -Os -march=i386 -falign-functions=0 -falign-jumps=0 \
-           -falign-labels=0 -ffast-math -fomit-frame-pointer
+OPTFLAGS  = -Os -march=i386 -ffast-math -fomit-frame-pointer
 WARNFLAGS = -W -Wall -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Winline
 
 CFLAGS  = $(OPTFLAGS) $(REQFLAGS) $(WARNFLAGS) $(LIBFLAGS)