diff options
-rw-r--r-- | Makefile | 16 | ||||
-rw-r--r-- | makefiledir/Makefile.config_writer | 24 | ||||
-rw-r--r-- | os/macosx/Makefile | 51 | ||||
-rw-r--r-- | os/macosx/Makefile.setup | 94 |
4 files changed, 63 insertions, 122 deletions
@@ -130,7 +130,7 @@ # Makefile version tag # it checks if the version tag in Makefile.config is the same and force update outdated config files -MAKEFILE_VERSION:=8 +MAKEFILE_VERSION:=9 # CONFIG_WRITER has to be found even for manual configuration CONFIG_WRITER=makefiledir/Makefile.config_writer @@ -346,7 +346,9 @@ ifdef OSX # these compilerflags makes the app run as fast as possible without making the app unstable. It works on G3 or newer BASECFLAGS += -O3 -funroll-loops -fsched-interblock -falign-loops=16 -falign-jumps=16 -falign-functions=16 -falign-jumps-max-skip=15 -falign-loops-max-skip=15 -mdynamic-no-pic ifdef IS_G5 -BASECFLAGS += -mtune=970 -mcpu=970 -mpowerpc-gpopt +ifndef UNIVERSAL_BINARY +BASECFLAGS += $(G5_FLAGS) +endif endif else ifdef MORPHOS @@ -995,17 +997,21 @@ endif $(Q)$(CC) $(OBJCFLAGS) $(CDEFS) -MM $< | sed 's#^$(@F:%.d=%.o):#$@ $(@:.deps/%.d=%.o):#' > $@ +ifndef TRIPPLE_BINARY +# building tripple binary object files is handled in os/macosx/Makefile +# TARGET_CPU_FLAGS is used to set target CPUs in OSX universal binaries. It's empty for all other builds %.o: %.c $(MAKE_CONFIG) @echo '===> Compiling $<' - $(Q)$(CC) $(CFLAGS) $(CDEFS) -c -o $@ $< + $(Q)$(CC) $(TARGET_CPU_FLAGS) $(CFLAGS) $(CDEFS) -c -o $@ $< %.o: %.cpp $(MAKE_CONFIG) @echo '===> Compiling $<' - $(Q)$(CXX) $(CFLAGS) $(CDEFS) -c -o $@ $< + $(Q)$(CXX) $(TARGET_CPU_FLAGS) $(CFLAGS) $(CDEFS) -c -o $@ $< %.o: %.m $(MAKE_CONFIG) @echo '===> Compiling $<' - $(Q)$(CC) $(CFLAGS) $(CDEFS) -c -o $@ $< + $(Q)$(CC) $(TARGET_CPU_FLAGS) $(CFLAGS) $(CDEFS) -c -o $@ $< +endif %.o: %.rc @echo '===> Compiling resource $<' diff --git a/makefiledir/Makefile.config_writer b/makefiledir/Makefile.config_writer index 88e8e67ec..581411c54 100644 --- a/makefiledir/Makefile.config_writer +++ b/makefiledir/Makefile.config_writer @@ -85,25 +85,13 @@ $(MAKE_CONFIG): $(call CONFIG_LINE,\# Universal binary setup) $(call CONFIG_LINE,\# use these settings for building universal binaries. Most systems should work with the default settings) - $(call CONFIG_LINE,SDL_PPC_CONFIG:=$(SDL_PPC_CONFIG)) - $(call CONFIG_LINE,SDL_x86_CONFIG:=$(SDL_x86_CONFIG)) + $(call CONFIG_LINE,CFLAGS_UNIVERSAL:=$(CFLAGS_UNIVERSAL)) + $(call CONFIG_LINE,LDFLAGS_UNIVERSAL:=$(LDFLAGS_UNIVERSAL)) - $(call CONFIG_LINE,\# if you got a fat libpng you should not need to change this. It is recommended to get a fat libpng lib) - $(call CONFIG_LINE,LIBPNG_PPC_CONFIG:=$(LIBPNG_PPC_CONFIG)) - $(call CONFIG_LINE,LIBPNG_x86_CONFIG:=$(LIBPNG_x86_CONFIG)) - - $(call CONFIG_LINE,\# autodetected SDL lib path, but it is not detected in a reliable way, so verify it. It needs to be the x86 lib) - $(call CONFIG_LINE,x86_SDL_LIB:=$(x86_SDL_LIB)) - - $(call CONFIG_LINE,\# default values should be good enough for the rest of the universal binary flags, but check them anyway) - $(call CONFIG_LINE,SKIP_LIB_TEST:=$(SKIP_LIB_TEST)) - $(call CONFIG_LINE,PPC_CC:=$(PPC_CC)) - $(call CONFIG_LINE,CFLAGS_PPC:=$(CFLAGS_PPC)) - $(call CONFIG_LINE,LDFLAGS_PPC:=$(LDFLAGS_PPC)) - - $(call CONFIG_LINE,x86_CC:=$(x86_CC)) - $(call CONFIG_LINE,CFLAGS_x86:=$(CFLAGS_x86)) - $(call CONFIG_LINE,LDFLAGS_x86:=$(LDFLAGS_x86)) + $(call CONFIG_LINE,CFLAGS_JAGUAR:=$(CFLAGS_JAGUAR)) + $(call CONFIG_LINE,LDFLAGS_JAGUAR:=$(LDFLAGS_JAGUAR)) + $(call CONFIG_LINE,) + $(call CONFIG_LINE,G5_FLAGS:=$(G5_FLAGS)) $(call CONFIG_LINE,) $(call CONFIG_LINE,\# For cross-compiling) diff --git a/os/macosx/Makefile b/os/macosx/Makefile index 6e53126a7..02a7660e9 100644 --- a/os/macosx/Makefile +++ b/os/macosx/Makefile @@ -2,11 +2,29 @@ # This makefile is not a standalone makefile, but is called from the general one # it contains targets specific to MacOS X -ifdef UNIVERSAL_BINARY ifdef TRIPPLE_BINARY -TRIPPLE_BINARY:=tripple_binary -endif -UNIVERSAL_BINARY:=build_universal_binary +# this is to add G5_FLAGS to ppc970 builds only. If the ability to add flags to a single arch only shows up in the future +# we can get rid of this. Xcode supports arch dependant flags, but we can't do it in the makefile (yet?) +%.o: %.c $(MAKE_CONFIG) + @echo '===> Compiling $<' + $(Q)$(CC) $(CFLAGS) $(CDEFS) -arch ppc -c -arch i386 -o $@.uni $< + $(Q)$(CC) $(CFLAGS) $(CDEFS) $(G5_FLAGS) -arch ppc970 -c -o $@.ppc970 $< + $(Q)lipo -create -output $@ $@.uni $@.ppc970 + $(Q)rm $@.uni $@.ppc970 + +%.o: %.cpp $(MAKE_CONFIG) + @echo '===> Compiling $<' + $(Q)$(CXX) $(CFLAGS) $(CDEFS) -arch ppc -arch i386 -c -o $@.uni $< + $(Q)$(CXX) $(CFLAGS) $(CDEFS) $(G5_FLAGS) -arch ppc970 -c -o $@.ppc970 $< + $(Q)lipo -create -output $@ $@.uni $@.ppc970 + $(Q)rm $@.uni $@.ppc970 + +%.o: %.m $(MAKE_CONFIG) + @echo '===> Compiling $<' + $(Q)$(CC) $(CFLAGS) $(CDEFS) -arch ppc -arch i386 -c -o $@.uni $< + $(Q)$(CC) $(CFLAGS) $(CDEFS) -arch ppc970 $(G5_FLAGS) -c -o $@.ppc970 $< + $(Q)lipo -create -output $@ $@.uni $@.ppc970 + $(Q)rm $@.uni $@.ppc970 endif ifdef UNIVERSAL_PPC_PART @@ -16,31 +34,6 @@ else BUILD_OSX_BUNDLE:=build_OSX_bundle endif -# building an universal binary -# since we can only compile for PPC or x86 at any one time, we compile one and then -# we make clean and compile the other one. In the end we use lipo to join them together -# when this is done, we can continue with the targets from the first run, which is build_OSX_bundle - -$(UNIVERSAL_BINARY): $(TTD) - $(Q)mkdir -p temp_binary_dir - $(Q)cp $(TTD) temp_binary_dir/$(TTD)_a - $(Q)rm -rf $(TTD) $(OBJS) # delete all .o files so we can compile for a new CPU - $(Q)make UNIVERSAL_PPC_PART:=1 - $(Q)cp $(TTD) temp_binary_dir/$(TTD)_b - @echo '===> Joining the PPC and x86 binaries into one universal one' - $(Q)lipo temp_binary_dir/$(TTD)_a temp_binary_dir/$(TTD)_b -create -output $(TTD) - $(Q)rm -rf temp_binary_dir - -$(TRIPPLE_BINARY): $(UNIVERSAL_BINARY) - $(Q)mkdir -p temp_binary_dir - $(Q)cp $(TTD) temp_binary_dir/$(TTD)_a - $(Q)rm -rf $(TTD) $(OBJS) # delete all .o files so we can compile for a new CPU - $(Q)make UNIVERSAL_PPC_PART:=1 IS_G5:=1 - $(Q)cp $(TTD) temp_binary_dir/$(TTD)_b - @echo '===> Joining the Universal and G5 binaries into a tripple binary' - $(Q)lipo temp_binary_dir/$(TTD)_a temp_binary_dir/$(TTD)_b -create -output $(TTD) - $(Q)rm -rf temp_binary_dir - # build the bundle. OSX wants to keep apps in bundles, so we will give it one # the good thing about bundles is that you can keep extra files in them, so we keep lng files and a data dir in it diff --git a/os/macosx/Makefile.setup b/os/macosx/Makefile.setup index 7cfb6d965..d5419900b 100644 --- a/os/macosx/Makefile.setup +++ b/os/macosx/Makefile.setup @@ -47,80 +47,34 @@ endif endif # setup flags if none are defined -ifndef CFLAGS_PPC - CFLAGS_PPC:= -isysroot /Developer/SDKs/MacOSX10.2.8.sdk -endif -ifndef LDFLAGS_PPC - LDFLAGS_PPC:= -Wl,-syslibroot,/Developer/SDKs/MacOSX10.2.8.sdk -endif -ifndef PPC_CC - PPC_CC:=$(shell ls /usr/bin/powerpc-apple-darwin*-gcc* | tail -n 1) -endif -ifndef CFLAGS_x86 - CFLAGS_x86:= -isysroot /Developer/SDKs/MacOSX10.4u.sdk -endif -ifndef LDFLAGS_x86 - LDFLAGS_x86:= -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -endif -ifndef x86_CC - x86_CC:=$(shell ls /usr/bin/i686-apple-darwin*-gcc* | tail -n 1) -endif -ifdef WITH_PNG - ifndef LIBPNG_PPC_CONFIG - LIBPNG_PPC_CONFIG:=$(LIBPNG-CONFIG) - endif - ifndef LIBPNG_x86_CONFIG - LIBPNG_x86_CONFIG:=$(LIBPNG-CONFIG) - endif -endif -ifdef WITH_SDL - ifndef SDL_PPC_CONFIG - SDL_PPC_CONFIG:=$(SDL-CONFIG) - endif - ifndef SDL_x86_CONFIG - SDL_x86_CONFIG:=$(SDL-CONFIG) - endif - ifndef x86_SDL_LIB - x86_SDL_LIB:=$(shell echo "`$(SDL_x86_CONFIG) --prefix`/lib/libSDL-1.2.0.dylib") - endif +ifndef CFLAGS_JAGUAR + CFLAGS_JAGUAR:= -isysroot /Developer/SDKs/MacOSX10.2.8.sdk +endif +ifndef LDFLAGS_JAGUAR + LDFLAGS_JAGUAR:= -Wl,-syslibroot,/Developer/SDKs/MacOSX10.2.8.sdk +endif + +ifndef CFLAGS_UNIVERSAL + CFLAGS_UNIVERSAL:= -isysroot /Developer/SDKs/MacOSX10.4u.sdk +endif +ifndef LDFLAGS_UNIVERSAL + LDFLAGS_UNIVERSAL:= -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk endif ifdef JAGUAR - LIBPNG-CONFIG:=$(LIBPNG_PPC_CONFIG) - SDL-CONFIG:=$(SDL_PPC_CONFIG) - CC_TARGET:=$(PPC_CC) - CFLAGS:= $(CFLAGS_PPC) -arch ppc - LDFLAGS:= $(LDFLAGS_PPC) + CFLAGS:= $(CFLAGS_JAGUAR) -arch ppc + LDFLAGS:= $(LDFLAGS_JAGUAR) +endif + +ifndef G5_FLAGS +G5_FLAGS := -mtune=970 -mcpu=970 -mpowerpc-gpopt endif ifdef UNIVERSAL_BINARY - # set up config files - ifndef SKIP_LIB_TEST - ifdef WITH_PNG - TEST:=$(shell lipo -info `$(LIBPNG_PPC_CONFIG) --prefix`/lib/libpng.a | xargs -n 1 | grep "ppc")) - ifndef TEST -$(error no PPC libpng found) - endif - TEST:=$(shell lipo -info `$(LIBPNG_x86_CONFIG) --prefix`/lib/libpng.a | xargs -n 1 | grep "i386")) - ifndef TEST -$(error no x86 libpng found) - endif - endif - endif - LIBS:= - OBJS:= - ifdef UNIVERSAL_PPC_PART - LIBPNG-CONFIG:=$(LIBPNG_PPC_CONFIG) - SDL-CONFIG:=$(SDL_PPC_CONFIG) - CC_TARGET:=$(PPC_CC) - CFLAGS:= $(CFLAGS_PPC) -arch ppc - LDFLAGS:= $(LDFLAGS_PPC) - else - LIBPNG-CONFIG:=$(LIBPNG_x86_CONFIG) - SDL-CONFIG:=$(SDL_x86_CONFIG) - CC_TARGET:=$(x86_CC) - # clear the cached list of PPC libs - CFLAGS:= $(CFLAGS_x86) -arch i386 - LDFLAGS:= $(LDFLAGS_x86) - endif +TARGET_CPU_FLAGS:= -arch ppc -arch i386 +LDFLAGS := $(LDFLAGS_UNIVERSAL) -arch ppc -arch i386 +CFLAGS += $(CFLAGS_UNIVERSAL) +ifdef TRIPPLE_BINARY +LDFLAGS += -arch ppc970 +endif endif |