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