From: Fabrice Bellard <fabrice@bellard.org>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] qemu Makefile configure
Date: Wed, 03 Jan 2007 16:43:44 +0100 [thread overview]
Message-ID: <459BCF30.5010200@bellard.org> (raw)
In-Reply-To: <20070103135950.GB5849@networkno.de>
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.
Fabrice.
Thiemo Seufer wrote:
> Thiemo Seufer wrote:
>
>>CVSROOT: /sources/qemu
>>Module name: qemu
>>Changes by: Thiemo Seufer <ths> 07/01/01 21:31:01
>>
>>Modified files:
>> . : Makefile configure
>>
>>Log message:
>> Fix Makefile weirdness.
>>
>>CVSWeb URLs:
>>http://cvs.savannah.gnu.org/viewcvs/qemu/Makefile?cvsroot=qemu&r1=1.106&r2=1.107
>>http://cvs.savannah.gnu.org/viewcvs/qemu/configure?cvsroot=qemu&r1=1.114&r2=1.115
>
>
> As mentioned on IRC, this patch makes configure's --extra-cflags and
> --extra-ldflags functional, but at the same time it breaks overriding
> CFLAGS/LDFLAGS at make time.
>
> The appended patch is an attempt to allow both, and to untangle the
> various flags settings. It collects and records the overridable defaults
> at configure time, adds OS_CFLAGS for mandatory OS specific flags,
> prefers the more standard CPPFLAGS over other preprocessor flag names,
> and OP_CFLAGS a separate set of flags which has also an overridable
> portion.
>
> All of this works fine for me, but patches of this sort are likely to
> break things, so please test and comment.
>
>
> 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 13:47:50 -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
> +CFLAGS += $(OS_CFLAGS)
> ifeq ($(ARCH),sparc)
> -CFLAGS+=-mcpu=ultrasparc
> +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
> +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 13:47:50 -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)
> @@ -65,15 +63,17 @@ ifdef CONFIG_STATIC
> 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
> +OP_CFLAGS+=-mpreferred-stack-boundary=2 -fomit-frame-pointer
> ifeq ($(HAVE_GCC3_OPTIONS),yes)
> OP_CFLAGS+= -falign-functions=0 -fno-gcse
> else
> OP_CFLAGS+= -malign-functions=0
> endif
> -
> ifdef TARGET_GPROF
> USE_I386_LD=y
> endif
> @@ -81,7 +81,7 @@ ifdef CONFIG_STATIC
> USE_I386_LD=y
> endif
> ifdef USE_I386_LD
> -LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386.ld
> +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
> @@ -91,66 +91,66 @@ endif
> endif
>
> ifeq ($(ARCH),x86_64)
> -OP_CFLAGS=$(CFLAGS) -falign-functions=0
> -LDFLAGS+=-Wl,-T,$(SRC_PATH)/x86_64.ld
> +LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
> endif
>
> ifeq ($(ARCH),ppc)
> CFLAGS+= -D__powerpc__
> -OP_CFLAGS=$(CFLAGS)
> -LDFLAGS+=-Wl,-T,$(SRC_PATH)/ppc.ld
> +LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
> endif
>
> ifeq ($(ARCH),s390)
> -OP_CFLAGS=$(CFLAGS)
> -LDFLAGS+=-Wl,-T,$(SRC_PATH)/s390.ld
> +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
> +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
> +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
> +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
> +LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
> +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
> +CFLAGS+=-msmall-data
> +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
> +CFLAGS+=-mno-sdata
> +OP_CFLAGS+=-mno-sdata
> +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
> +OP_CFLAGS+=-mno-sched-prolog -fno-omit-frame-pointer
> +LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
> endif
>
> ifeq ($(ARCH),m68k)
> -OP_CFLAGS=$(CFLAGS) -fomit-frame-pointer
> -LDFLAGS+=-Wl,-T,m68k.ld
> +OP_CFLAGS+=-fomit-frame-pointer
> +LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
> +endif
> +
> +ifeq ($(ARCH),mips)
> +LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
> endif
>
> ifeq ($(HAVE_GCC3_OPTIONS),yes)
> @@ -159,13 +159,14 @@ OP_CFLAGS+=-fno-reorder-blocks -fno-opti
> endif
>
> ifeq ($(CONFIG_DARWIN),yes)
> -OP_CFLAGS+= -mdynamic-no-pic
> LIBS+=-lmx
> endif
>
> +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
> @@ -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
> @@ -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 13:47:50 -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
>
> @@ -599,12 +604,10 @@ echo "#define CONFIG_QEMU_SHAREDIR \"$da
> echo "MAKE=$make" >> $config_mak
> echo "INSTALL=$install" >> $config_mak
> echo "CC=$cc" >> $config_mak
> -if test "$have_gcc3_options" = "yes" ; then
> - echo "HAVE_GCC3_OPTIONS=yes" >> $config_mak
> -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
>
>
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel
>
>
next prev parent reply other threads:[~2007-01-03 15:46 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 [this message]
2007-01-03 16:16 ` Thiemo Seufer
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=459BCF30.5010200@bellard.org \
--to=fabrice@bellard.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).