summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile3
-rw-r--r--os/macosx/Makefile29
-rw-r--r--os/macosx/Makefile.setup36
3 files changed, 44 insertions, 24 deletions
diff --git a/Makefile b/Makefile
index dbc0c0e21..16ebb6508 100644
--- a/Makefile
+++ b/Makefile
@@ -106,7 +106,8 @@
#
# Special for crosscompiling there are some commands available:
#
-# FAT_BINARY: builds a universal binary for OSX. Make sure you got both PPC and x86 libs. Only works with GCC 4 or newer
+# UNIVERSAL_BINARY: builds a universal binary for OSX. Make sure you got both PPC and x86 libs. Only works with GCC 4 or newer
+# TRIPPLE_BINARY: builds a universal binary with the addition of code optimised for G5 (which means a total of 3 binaries in one file)
#
# JAGUAR: Crosscompiling for OSX 1.2.8 (codenamed Jaguar). Only works if OSX is defined too. Only works with GCC 4 or newer
# This can be changed to any PPC version of OSX by changing the ppc flags in Makefile.config
diff --git a/os/macosx/Makefile b/os/macosx/Makefile
index 93de65acd..dd850428c 100644
--- a/os/macosx/Makefile
+++ b/os/macosx/Makefile
@@ -2,11 +2,14 @@
# This makefile is not a standalone makefile, but is called from the general one
# it contains targets specific to MacOS X
-ifdef FAT_BINARY
-FAT_BINARY:=build_universal_binary
+ifdef UNIVERSAL_BINARY
+ifdef TRIPPLE_BINARY
+TRIPPLE_BINARY:=tripple_binary
+endif
+UNIVERSAL_BINARY:=build_universal_binary
endif
-ifdef UNIVERSAL_x86_PART
+ifdef UNIVERSAL_PPC_PART
# the bundle is build by the PPC compile when making universal binaries
BUILD_OSX_BUNDLE:=
else
@@ -18,20 +21,30 @@ endif
# 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
-$(FAT_BINARY): $(TTD)
+$(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 endian
- $(Q)make UNIVERSAL_x86_PART:=1
+ $(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
-$(BUILD_OSX_BUNDLE): $(TTD) $(FAT_BINARY)
+$(BUILD_OSX_BUNDLE): $(TTD) $(UNIVERSAL_BINARY) $(TRIPPLE_BINARY)
@echo '===> Building application bundle'
$(Q)rm -fr "$(OSXAPP)"
$(Q)mkdir -p "$(OSXAPP)"/Contents/MacOS
@@ -67,4 +80,4 @@ release: all
$(OSX): $(TTD) $(BUILD_OSX_BUNDLE)
-.PHONY: release $(BUILD_OSX_BUNDLE) $(FAT_BINARY)
+.PHONY: release $(BUILD_OSX_BUNDLE) $(UNIVERSAL_BINARY)
diff --git a/os/macosx/Makefile.setup b/os/macosx/Makefile.setup
index 3e9e2cf27..990efb122 100644
--- a/os/macosx/Makefile.setup
+++ b/os/macosx/Makefile.setup
@@ -11,22 +11,29 @@ endif
endif
ifdef RELEASE
-ifndef FAT_BINARY
+ifndef UNIVERSAL_BINARY
$(warning Compiling a release build, that is not a universal binary)
endif
endif
-ifndef FAT_BINARY
+ifdef TRIPPLE_BINARY
+ifdef DEBUG
+$(error no G5 optimisation is made in debug builds, so tripple binaries aren't possible. Use UNIVERSAL_BINARY instead if you really want a universal debug build)
+endif
+UNIVERSAL_BINARY:=1
+endif
+
+ifndef UNIVERSAL_BINARY
ifndef JAGUAR
ifeq ($(shell uname), Darwin)
# it's a hardware mac, not crosscompiling
-$(Q)$(CC_HOST) os/macosx/G5_detector.c -o os/macosx/G5_detector
+$(shell $(CC_HOST) os/macosx/G5_detector.c -o os/macosx/G5_detector)
IS_G5:=$(shell os/macosx/G5_detector)
endif
endif
endif
-ifdef FAT_BINARY
+ifdef UNIVERSAL_BINARY
ifndef STATIC
$(warning Compiling a universal binary, that is not static. Adding static flag)
STATIC:=1
@@ -86,7 +93,7 @@ ifdef JAGUAR
LDFLAGS:= $(LDFLAGS_PPC)
endif
-ifdef FAT_BINARY
+ifdef UNIVERSAL_BINARY
# set up config files
ifndef SKIP_LIB_TEST
ifdef WITH_PNG
@@ -100,21 +107,20 @@ $(error no x86 libpng found)
endif
endif
endif
-
- ifdef UNIVERSAL_x86_PART
+ 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
- LIBS:=
- OBJS:=
CFLAGS:= $(CFLAGS_x86) -arch i386
LDFLAGS:= $(LDFLAGS_x86)
- else
- LIBPNG-CONFIG:=$(LIBPNG_PPC_CONFIG)
- SDL-CONFIG:=$(SDL_PPC_CONFIG)
- CC_TARGET:=$(PPC_CC)
- CFLAGS:= $(CFLAGS_PPC) -arch ppc
- LDFLAGS:= $(LDFLAGS_PPC)
endif
endif