diff options
author | bjarni <bjarni@openttd.org> | 2006-03-29 16:28:41 +0000 |
---|---|---|
committer | bjarni <bjarni@openttd.org> | 2006-03-29 16:28:41 +0000 |
commit | 9c96bcb9975c4f9e197cebf0562f81de5be99b5b (patch) | |
tree | 1e4688cde558014e598671f4a0d212ecd112c4ce /os/macosx/Makefile | |
parent | 2aff28be2b790270a60a2958ed278cc5effa8aae (diff) | |
download | openttd-9c96bcb9975c4f9e197cebf0562f81de5be99b5b.tar.xz |
(svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
Now OSX stores object files in .OSX and instead of making FAT object files, there are one for each architecture
Each architecture got their own targets to make a non-FAT binary and in the end, lipo will merge them into one binary
It's now possible to select which architectures you want to support by defining OTTD_PPC, OTTD_PPC970 (G5) and/or OTTD_i386
All combos are supported. UNIVERSAL_BINARY and TRIPLE_BINARY can still be used even though it's possible to gain the same result by using the new flags
Making a universal build when you already got part of it compiled (say the PPC part), it will reuse it and only compile the i386 part to save time
Note: in some cases when you switch flags, you risk that openttd is not updated. Delete it and try again. The Makefile can't solve this except if it forces linking each time
This fixes: FS#87 universal binary building borked in 0.4.7
Now universal binaries work on OSX 10.3.9 again
Building universal binaries no longer needs to store flags in Makefile.config as the new design makes it possible to figure everything out automatically
Diffstat (limited to 'os/macosx/Makefile')
-rw-r--r-- | os/macosx/Makefile | 96 |
1 files changed, 73 insertions, 23 deletions
diff --git a/os/macosx/Makefile b/os/macosx/Makefile index a9c0d6c3a..a8c276362 100644 --- a/os/macosx/Makefile +++ b/os/macosx/Makefile @@ -2,29 +2,79 @@ # This makefile is not a standalone makefile, but is called from the general one # it contains targets specific to MacOS X -ifdef TRIPLE_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 +ifdef NATIVE_OSX + +DEPS_MAGIC := $(shell mkdir -p $(sort $(dir $(OBJS:%.o=.OSX/%)))) + +ifdef OTTD_PPC +OTTD_PPC :=.OSX/openttd.ppc +OBJS_ppc := $(OBJS:%.o=.OSX/%.o.ppc) +endif + +ifdef OTTD_i386 +OTTD_i386 :=.OSX/openttd.i386 +OBJS_i386 := $(OBJS:%.o=.OSX/%.o.i386) +endif + +ifdef OTTD_PPC970 +OTTD_PPC970 :=.OSX/openttd.ppc970 +OBJS_ppc970 := $(OBJS:%.o=.OSX/%.o.ppc970) +endif + +# targets to link OpenTTD +$(TTD): $(OTTD_PPC) $(OTTD_i386) $(OTTD_PPC970) + @echo '===> Linking $@ into a single file' + $(Q)lipo -create -output $@ $(OTTD_PPC) $(OTTD_i386) $(OTTD_PPC970) + +$(OTTD_PPC): $(MAKE_CONFIG) $(OBJS_ppc) + @echo '[PowerPC] Linking $(TTD)' + $(Q)$(CC) $(LDFLAGS) $(TTDLDFLAGS) $(OBJS_ppc) $(LIBS) $(LDFLAGS_PPC) -arch ppc -o $@ + +$(OTTD_i386): $(MAKE_CONFIG) $(OBJS_i386) + @echo '[i386] Linking $(TTD)' + $(Q)$(CC) $(LDFLAGS) $(TTDLDFLAGS) $(OBJS_i386) $(LIBS) $(LDFLAGS_i386) -arch i386 -o $@ + +$(OTTD_PPC970): $(MAKE_CONFIG) $(OBJS_ppc970) + @echo '[PowerPC G5] Linking $(TTD)' + $(Q)$(CC) $(LDFLAGS) $(TTDLDFLAGS) $(OBJS_ppc970) $(LIBS) $(LDFLAGS_PPC) $(G5_FLAGS) -arch ppc970 -o $@ + +# targets to compile each c, m and cpp file +.OSX/%.o.ppc: %.c .deps/%.d + @echo '[PowerPC] Compiling $<' + $(Q)$(CC) $(CFLAGS) $(CFLAGS_PPC) $(CDEFS) -arch ppc -c -o $@ $< + +.OSX/%.o.ppc: %.cpp .deps/%.d + @echo '[PowerPC] Compiling $<' + $(Q)$(CPP) $(CFLAGS) $(CFLAGS_PPC) $(CDEFS) -arch ppc -c -o $@ $< + +.OSX/%.o.ppc: %.m .deps/%.d + @echo '[PowerPC] Compiling $<' + $(Q)$(CC) $(CFLAGS) $(CFLAGS_PPC) $(CDEFS) -arch ppc -c -o $@ $< + +.OSX/%.o.i386: %.c .deps/%.d + @echo '[i386] Compiling $<' + $(Q)$(CC) $(CFLAGS) $(CFLAGS_i386) $(CDEFS) -arch i386 -c -o $@ $< + +.OSX/%.o.i386: %.cpp .deps/%.d + @echo '[i386] Compiling $<' + $(Q)$(CPP) $(CFLAGS) $(CFLAGS_i386) $(CDEFS) -arch i386 -c -o $@ $< + +.OSX/%.o.i386: %.m .deps/%.d + @echo '[i386] Compiling $<' + $(Q)$(CC) $(CFLAGS) $(CFLAGS_i386) $(CDEFS) -arch i386 -c -o $@ $< + +.OSX/%.o.ppc970: %.c .deps/%.d + @echo '[PowerPC G5] Compiling $<' + $(Q)$(CC) $(CFLAGS) $(CFLAGS_PPC) $(G5_FLAGS) $(CDEFS) -arch ppc970 -c -o $@ $< + +.OSX/%.o.ppc970: %.cpp .deps/%.d + @echo '[PowerPC G5] Compiling $<' + $(Q)$(CPP) $(CFLAGS) $(CFLAGS_PPC) $(G5_FLAGS) $(CDEFS) -arch ppc970 -c -o $@ $< + +.OSX/%.o.ppc970: %.m .deps/%.d + @echo '[PowerPC G5] Compiling $<' + $(Q)$(CC) $(CFLAGS) $(CFLAGS_PPC) $(G5_FLAGS) $(CDEFS) -arch ppc970 -c -o $@ $< + endif ifdef JAGUAR |