From: Thiemo Seufer <ths@networkno.de>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] qemu Makefile configure
Date: Wed, 3 Jan 2007 16:16:53 +0000 [thread overview]
Message-ID: <20070103161653.GF5849@networkno.de> (raw)
In-Reply-To: <459BCF30.5010200@bellard.org>
Fabrice Bellard wrote:
> IMHO, CFLAGS and LDFLAGS overriding should not be allowed for QEMU as it
> is almost sure to break the dyngen stuff. If ever it is allowed, it
> should be done so that the CFLAGS for the files used by dyngen are not
> modified.
That's why I made OP_CFLAGS a separate set of flags.
I append the next version of the patch, which incorporates the
suggestions made by Daniel and Bernhard, and fixes a gcc3 detection
bug I introduced earlier.
Thiemo
Index: Makefile
===================================================================
RCS file: /sources/qemu/qemu/Makefile,v
retrieving revision 1.107
diff -u -p -r1.107 Makefile
--- Makefile 1 Jan 2007 21:31:01 -0000 1.107
+++ Makefile 3 Jan 2007 16:10:06 -0000
@@ -5,19 +5,15 @@ include config-host.mak
.PHONY: all clean distclean dvi info install install-doc tar tarbin \
speed test test2 html dvi info
-CFLAGS+=-Wall -O2 -g -fno-strict-aliasing -I.
-ifdef CONFIG_DARWIN
-CFLAGS+= -mdynamic-no-pic
-endif
+override CFLAGS += $(OS_CFLAGS)
ifeq ($(ARCH),sparc)
-CFLAGS+=-mcpu=ultrasparc
+override CFLAGS += -mcpu=ultrasparc
endif
-LDFLAGS+=-g
+CPPFLAGS += -I. -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
LIBS=
-DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
TOOLS=qemu-img$(EXESUF)
ifdef CONFIG_STATIC
-LDFLAGS+=-static
+override LDFLAGS += -static
endif
ifdef BUILD_DOCS
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1
@@ -41,10 +37,10 @@ subdir-%: dyngen$(EXESUF)
recurse-all: $(patsubst %,subdir-%, $(TARGET_DIRS))
qemu-img$(EXESUF): qemu-img.c block.c block-raw.c block-cow.c block-qcow.c aes.c block-vmdk.c block-cloop.c block-dmg.c block-bochs.c block-vpc.c block-vvfat.c block-qcow2.c
- $(CC) -DQEMU_TOOL $(CFLAGS) $(LDFLAGS) $(DEFINES) -o $@ $^ -lz $(LIBS)
+ $(CC) -DQEMU_TOOL $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $^ -lz $(LIBS)
dyngen$(EXESUF): dyngen.c
- $(HOST_CC) $(CFLAGS) $(DEFINES) -o $@ $^
+ $(HOST_CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^
clean:
# avoid old build problems by removing potentially incorrect old files
Index: Makefile.target
===================================================================
RCS file: /sources/qemu/qemu/Makefile.target,v
retrieving revision 1.134
diff -u -p -r1.134 Makefile.target
--- Makefile.target 7 Dec 2006 18:15:35 -0000 1.134
+++ Makefile.target 3 Jan 2007 16:10:07 -0000
@@ -12,14 +12,12 @@ TARGET_BASE_ARCH:=sparc
endif
TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH)
VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw:$(SRC_PATH)/audio
-DEFINES=-I. -I.. -I$(TARGET_PATH) -I$(SRC_PATH)
+CPPFLAGS=-I. -I.. -I$(TARGET_PATH) -I$(SRC_PATH)
ifdef CONFIG_USER_ONLY
VPATH+=:$(SRC_PATH)/linux-user
-DEFINES+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH)
+CPPFLAGS+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH)
endif
-CFLAGS=-Wall -O2 -g -fno-strict-aliasing
#CFLAGS+=-Werror
-LDFLAGS=-g
LIBS=
HELPER_CFLAGS=$(CFLAGS)
DYNGEN=../dyngen$(EXESUF)
@@ -62,18 +60,20 @@ endif
endif # !CONFIG_USER_ONLY
ifdef CONFIG_STATIC
-LDFLAGS+=-static
+override LDFLAGS+=-static
endif
+# We require -O2 to avoid the stack setup prologue in EXIT_TB
+OP_CFLAGS := -Wall -O2 -g -fno-strict-aliasing
+
ifeq ($(ARCH),i386)
-HELPER_CFLAGS:=$(CFLAGS) -fomit-frame-pointer
-OP_CFLAGS:=$(CFLAGS) -mpreferred-stack-boundary=2 -fomit-frame-pointer
+HELPER_CFLAGS+=-fomit-frame-pointer
+override OP_CFLAGS+=-mpreferred-stack-boundary=2 -fomit-frame-pointer
ifeq ($(HAVE_GCC3_OPTIONS),yes)
-OP_CFLAGS+= -falign-functions=0 -fno-gcse
+override OP_CFLAGS+= -falign-functions=0 -fno-gcse
else
-OP_CFLAGS+= -malign-functions=0
+override OP_CFLAGS+= -malign-functions=0
endif
-
ifdef TARGET_GPROF
USE_I386_LD=y
endif
@@ -81,91 +81,92 @@ ifdef CONFIG_STATIC
USE_I386_LD=y
endif
ifdef USE_I386_LD
-LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386.ld
+override LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
else
# WARNING: this LDFLAGS is _very_ tricky : qemu is an ELF shared object
# that the kernel ELF loader considers as an executable. I think this
# is the simplest way to make it self virtualizable!
-LDFLAGS+=-Wl,-shared
+override LDFLAGS+=-Wl,-shared
endif
endif
ifeq ($(ARCH),x86_64)
-OP_CFLAGS=$(CFLAGS) -falign-functions=0
-LDFLAGS+=-Wl,-T,$(SRC_PATH)/x86_64.ld
+override LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif
ifeq ($(ARCH),ppc)
-CFLAGS+= -D__powerpc__
-OP_CFLAGS=$(CFLAGS)
-LDFLAGS+=-Wl,-T,$(SRC_PATH)/ppc.ld
+CPPFLAGS+= -D__powerpc__
+override LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif
ifeq ($(ARCH),s390)
-OP_CFLAGS=$(CFLAGS)
-LDFLAGS+=-Wl,-T,$(SRC_PATH)/s390.ld
+override LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif
ifeq ($(ARCH),sparc)
ifeq ($(CONFIG_SOLARIS),yes)
-CFLAGS+=-mcpu=ultrasparc -m32 -ffixed-g2 -ffixed-g3
-LDFLAGS+=-m32
-OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -fno-omit-frame-pointer -ffixed-i0
+override CFLAGS+=-mcpu=ultrasparc -m32 -ffixed-g2 -ffixed-g3
+override LDFLAGS+=-m32
+override OP_CFLAGS+=-fno-delayed-branch -fno-omit-frame-pointer -ffixed-i0
else
-CFLAGS+=-mcpu=ultrasparc -m32 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
-LDFLAGS+=-m32
-OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
+override CFLAGS+=-mcpu=ultrasparc -m32 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
+override LDFLAGS+=-m32
+override OP_CFLAGS+=-fno-delayed-branch -ffixed-i0
HELPER_CFLAGS=$(CFLAGS) -ffixed-i0 -mflat
# -static is used to avoid g1/g3 usage by the dynamic linker
-LDFLAGS+=-Wl,-T,$(SRC_PATH)/sparc.ld -static
+override LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld -static
endif
endif
ifeq ($(ARCH),sparc64)
-CFLAGS+=-mcpu=ultrasparc -m64 -ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7
-LDFLAGS+=-m64
-LDFLAGS+=-Wl,-T,$(SRC_PATH)/sparc64.ld
-OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
+override CFLAGS+=-mcpu=ultrasparc -m64 -ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7
+override LDFLAGS+=-m64
+override LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
+override OP_CFLAGS+=-mcpu=ultrasparc -m64 -ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7 -fno-delayed-branch -ffixed-i0
endif
ifeq ($(ARCH),alpha)
-# -msmall-data is not used because we want two-instruction relocations
-# for the constant constructions
-OP_CFLAGS=-Wall -O2 -g
+# -msmall-data is not used for OP_CFLAGS because we want two-instruction
+# relocations for the constant constructions
# Ensure there's only a single GP
-CFLAGS += -msmall-data
-LDFLAGS+=-Wl,-T,$(SRC_PATH)/alpha.ld
+override CFLAGS+=-msmall-data
+override LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif
ifeq ($(ARCH),ia64)
-CFLAGS += -mno-sdata
-OP_CFLAGS=$(CFLAGS)
-LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld
+override CFLAGS+=-mno-sdata
+override OP_CFLAGS+=-mno-sdata
+override LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif
ifeq ($(ARCH),arm)
-OP_CFLAGS=$(CFLAGS) -mno-sched-prolog -fno-omit-frame-pointer
-LDFLAGS+=-Wl,-T,$(SRC_PATH)/arm.ld
+override OP_CFLAGS+=-mno-sched-prolog -fno-omit-frame-pointer
+override LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif
ifeq ($(ARCH),m68k)
-OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
-LDFLAGS+=-Wl,-T,m68k.ld
+override OP_CFLAGS+=-fomit-frame-pointer
+override LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
+endif
+
+ifeq ($(ARCH),mips)
+override LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
endif
ifeq ($(HAVE_GCC3_OPTIONS),yes)
# very important to generate a return at the end of every operation
-OP_CFLAGS+=-fno-reorder-blocks -fno-optimize-sibling-calls
+override OP_CFLAGS+=-fno-reorder-blocks -fno-optimize-sibling-calls
endif
ifeq ($(CONFIG_DARWIN),yes)
-OP_CFLAGS+= -mdynamic-no-pic
LIBS+=-lmx
endif
+override OP_CFLAGS+=$(OS_CFLAGS)
+
#########################################################
-DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
+CPPFLAGS+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
LIBS+=-lm
ifndef CONFIG_USER_ONLY
LIBS+=-lz
@@ -179,8 +180,8 @@ endif
# profiling code
ifdef TARGET_GPROF
-LDFLAGS+=-p
-main.o: CFLAGS+=-p
+override LDFLAGS+=-p
+main.o: override CFLAGS+=-p
endif
OBJS= main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o \
@@ -211,7 +212,7 @@ LIBOBJS+=fpu/softfloat.o
else
LIBOBJS+=fpu/softfloat-native.o
endif
-DEFINES+=-I$(SRC_PATH)/fpu
+CPPFLAGS+=-I$(SRC_PATH)/fpu
ifeq ($(TARGET_ARCH), i386)
LIBOBJS+=helper.o helper2.o
@@ -324,7 +325,7 @@ LIBS += -lole32 -ldxguid
endif
ifdef CONFIG_FMOD
AUDIODRV += fmodaudio.o
-audio.o fmodaudio.o: DEFINES := -I$(CONFIG_FMOD_INC) $(DEFINES)
+audio.o fmodaudio.o: CPPFLAGS := -I$(CONFIG_FMOD_INC) $(CPPFLAGS)
LIBS += $(CONFIG_FMOD_LIB)
endif
ifdef CONFIG_ADLIB
@@ -347,14 +348,14 @@ VL_OBJS+= ide.o pckbd.o ps2.o vga.o $(SO
VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pcspk.o pc.o
VL_OBJS+= cirrus_vga.o mixeng.o apic.o parallel.o acpi.o piix_pci.o
VL_OBJS+= usb-uhci.o
-DEFINES += -DHAS_AUDIO
+CPPFLAGS += -DHAS_AUDIO
endif
ifeq ($(TARGET_BASE_ARCH), ppc)
VL_OBJS+= ppc.o ide.o pckbd.o ps2.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
VL_OBJS+= mc146818rtc.o serial.o i8259.o i8254.o fdc.o m48t59.o
VL_OBJS+= ppc_prep.o ppc_chrp.o cuda.o adb.o openpic.o heathrow_pic.o mixeng.o
VL_OBJS+= grackle_pci.o prep_pci.o unin_pci.o
-DEFINES += -DHAS_AUDIO
+CPPFLAGS += -DHAS_AUDIO
endif
ifeq ($(TARGET_ARCH), mips)
VL_OBJS+= mips_r4k.o mips_timer.o dma.o vga.o serial.o i8254.o i8259.o ide.o
@@ -395,7 +396,7 @@ COCOA_LIBS+=-framework CoreAudio
endif
endif
ifdef CONFIG_SLIRP
-DEFINES+=-I$(SRC_PATH)/slirp
+CPPFLAGS+=-I$(SRC_PATH)/slirp
SLIRP_OBJS=cksum.o if.o ip_icmp.o ip_input.o ip_output.o \
slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o \
tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
@@ -418,7 +419,7 @@ endif
endif
endif
ifdef TARGET_GPROF
-vl.o: CFLAGS+=-p
+vl.o: override CFLAGS+=-p
VL_LDFLAGS+=-p
endif
@@ -439,22 +440,22 @@ $(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS)
cocoa.o: cocoa.m
- $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
+ $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
sdl.o: sdl.c keymaps.c sdl_keysym.h
- $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(SDL_CFLAGS) -c -o $@ $<
vnc.o: vnc.c keymaps.c sdl_keysym.h vnchextile.h
- $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
+ $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
sdlaudio.o: sdlaudio.c
- $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(SDL_CFLAGS) -c -o $@ $<
depend: $(SRCS)
- $(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
+ $(CC) -MM $(CFLAGS) $(CPPFLAGS) $^ 1>.depend
vldepend: $(VL_OBJS:.o=.c)
- $(CC) -MM $(CFLAGS) $(DEFINES) $^ 1>.depend
+ $(CC) -MM $(CFLAGS) $(CPPFLAGS) $^ 1>.depend
# libqemu
@@ -478,26 +479,26 @@ gen-op.h: op.o $(DYNGEN)
$(DYNGEN) -g -o $@ $<
op.o: op.c
- $(CC) $(OP_CFLAGS) $(DEFINES) -c -o $@ $<
+ $(CC) $(OP_CFLAGS) $(CPPFLAGS) -c -o $@ $<
# HELPER_CFLAGS is used for all the code compiled with static register
# variables
ifeq ($(TARGET_BASE_ARCH), i386)
# XXX: rename helper.c to op_helper.c
helper.o: helper.c
- $(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<
+ $(CC) $(HELPER_CFLAGS) $(CPPFLAGS) -c -o $@ $<
else
op_helper.o: op_helper.c
- $(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<
+ $(CC) $(HELPER_CFLAGS) $(CPPFLAGS) -c -o $@ $<
endif
cpu-exec.o: cpu-exec.c
- $(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<
+ $(CC) $(HELPER_CFLAGS) $(CPPFLAGS) -c -o $@ $<
# Note: this is a workaround. The real fix is to avoid compiling
# cpu_signal_handler() in cpu-exec.c.
signal.o: signal.c
- $(CC) $(HELPER_CFLAGS) $(DEFINES) -c -o $@ $<
+ $(CC) $(HELPER_CFLAGS) $(CPPFLAGS) -c -o $@ $<
ifeq ($(TARGET_BASE_ARCH), i386)
op.o: op.c opreg_template.h ops_template.h ops_template_mem.h ops_mem.h ops_sse.h
@@ -539,10 +540,10 @@ endif
$(OBJS) $(LIBOBJS) $(VL_OBJS): config.h ../config-host.h
%.o: %.c
- $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
+ $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
%.o: %.S
- $(CC) $(DEFINES) -c -o $@ $<
+ $(CC) $(CPPFLAGS) -c -o $@ $<
clean:
rm -f *.o *.a *~ $(PROGS) gen-op.h opc.h op.h nwfpe/*.o slirp/*.o fpu/*.o
Index: configure
===================================================================
RCS file: /sources/qemu/qemu/configure,v
retrieving revision 1.115
diff -u -p -r1.115 configure
--- configure 1 Jan 2007 21:31:01 -0000 1.115
+++ configure 3 Jan 2007 16:10:07 -0000
@@ -103,7 +103,7 @@ targetos=`uname -s`
case $targetos in
CYGWIN*)
mingw32="yes"
-CFLAGS="-O2 -mno-cygwin"
+OS_CFLAGS="-mno-cygwin"
;;
MINGW32*)
mingw32="yes"
@@ -126,6 +126,7 @@ oss="yes"
Darwin)
bsd="yes"
darwin="yes"
+OS_CFLAGS="-mdynamic-no-pic"
;;
SunOS)
solaris="yes"
@@ -243,6 +244,10 @@ for opt do
esac
done
+# default flags for all hosts
+CFLAGS="$CFLAGS -Wall -O2 -g -fno-strict-aliasing"
+LDFLAGS="$LDFLAGS -g"
+
if test x"$show_help" = x"yes" ; then
cat << EOF
@@ -605,6 +610,7 @@ fi
echo "HOST_CC=$host_cc" >> $config_mak
echo "AR=$ar" >> $config_mak
echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak
+echo "OS_CFLAGS=$OS_CFLAGS" >> $config_mak
echo "CFLAGS=$CFLAGS" >> $config_mak
echo "LDFLAGS=$LDFLAGS" >> $config_mak
echo "EXESUF=$EXESUF" >> $config_mak
next prev parent reply other threads:[~2007-01-03 16:16 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-01 21:31 [Qemu-devel] qemu Makefile configure Thiemo Seufer
2007-01-03 13:59 ` Thiemo Seufer
2007-01-03 14:23 ` Bernhard Fischer
2007-01-03 15:09 ` Thiemo Seufer
2007-01-07 21:58 ` Pierre d'Herbemont
2007-01-03 14:42 ` Thiemo Seufer
2007-01-03 14:55 ` Daniel Jacobowitz
2007-01-03 15:36 ` Thiemo Seufer
2007-01-03 15:43 ` Fabrice Bellard
2007-01-03 16:16 ` Thiemo Seufer [this message]
2007-01-03 16:58 ` Bernhard Fischer
2007-01-04 12:26 ` Thiemo Seufer
2007-01-05 1:03 ` Thiemo Seufer
-- strict thread matches above, loose matches on Subject: below --
2007-12-09 5:10 Thiemo Seufer
2007-09-22 16:49 Paul Brook
2006-04-23 17:57 Paul Brook
2006-04-30 15:04 ` Leonardo E. Reiter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070103161653.GF5849@networkno.de \
--to=ths@networkno.de \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.