os/macosx/Makefile.setup
author bjarni
Wed, 29 Mar 2006 16:28:41 +0000
changeset 3354 88222b8dafef
parent 3313 767d77394c61
child 3900 4984308f9125
permissions -rw-r--r--
(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
2722
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
     1
# $Id: Makefile 3214 2005-11-17 19:43:37Z bjarni $
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
     2
# This makefile is not a standalone makefile, but is called from the general one
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
     3
# it contains code specific to MacOS X
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
     4
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
     5
ifdef RELEASE
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
     6
ifndef STATIC
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
     7
# all OSX releases needs to be static
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
     8
# end users don't tend to have the dynamic libs installed
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
     9
$(warning Compiling a dynamic release. It should be static unless you really know what you are doing!!!)
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    10
endif
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    11
endif
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    12
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    13
ifdef RELEASE
3085
cbcafb482b75 (svn r3674) -Feature: [OSX] Added support for tripple binaries (binaries optimised for G3, G5 and i686)
bjarni
parents: 3084
diff changeset
    14
ifndef UNIVERSAL_BINARY
2722
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    15
$(warning Compiling a release build, that is not a universal binary)
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    16
endif
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    17
endif
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    18
3212
60517b6883c0 (svn r3884) renamed TRIPPLE_BINARY to TRIPLE_BINARY
bjarni
parents: 3211
diff changeset
    19
ifdef TRIPLE_BINARY
3085
cbcafb482b75 (svn r3674) -Feature: [OSX] Added support for tripple binaries (binaries optimised for G3, G5 and i686)
bjarni
parents: 3084
diff changeset
    20
ifdef DEBUG
3354
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    21
$(error no G5 optimisation is made in debug builds, so triple binaries aren't possible. Use UNIVERSAL_BINARY instead if you really want a universal debug build)
3085
cbcafb482b75 (svn r3674) -Feature: [OSX] Added support for tripple binaries (binaries optimised for G3, G5 and i686)
bjarni
parents: 3084
diff changeset
    22
endif
cbcafb482b75 (svn r3674) -Feature: [OSX] Added support for tripple binaries (binaries optimised for G3, G5 and i686)
bjarni
parents: 3084
diff changeset
    23
UNIVERSAL_BINARY:=1
cbcafb482b75 (svn r3674) -Feature: [OSX] Added support for tripple binaries (binaries optimised for G3, G5 and i686)
bjarni
parents: 3084
diff changeset
    24
endif
cbcafb482b75 (svn r3674) -Feature: [OSX] Added support for tripple binaries (binaries optimised for G3, G5 and i686)
bjarni
parents: 3084
diff changeset
    25
cbcafb482b75 (svn r3674) -Feature: [OSX] Added support for tripple binaries (binaries optimised for G3, G5 and i686)
bjarni
parents: 3084
diff changeset
    26
ifdef UNIVERSAL_BINARY
2728
18a4eda1aec6 (svn r3273) -Fix: [OSX] PPC part of universal binaries now target 10.3 instead of 10.4
bjarni
parents: 2722
diff changeset
    27
ifndef STATIC
18a4eda1aec6 (svn r3273) -Fix: [OSX] PPC part of universal binaries now target 10.3 instead of 10.4
bjarni
parents: 2722
diff changeset
    28
$(warning Compiling a universal binary, that is not static. Adding static flag)
18a4eda1aec6 (svn r3273) -Fix: [OSX] PPC part of universal binaries now target 10.3 instead of 10.4
bjarni
parents: 2722
diff changeset
    29
STATIC:=1
18a4eda1aec6 (svn r3273) -Fix: [OSX] PPC part of universal binaries now target 10.3 instead of 10.4
bjarni
parents: 2722
diff changeset
    30
endif
18a4eda1aec6 (svn r3273) -Fix: [OSX] PPC part of universal binaries now target 10.3 instead of 10.4
bjarni
parents: 2722
diff changeset
    31
endif
18a4eda1aec6 (svn r3273) -Fix: [OSX] PPC part of universal binaries now target 10.3 instead of 10.4
bjarni
parents: 2722
diff changeset
    32
2722
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    33
ifdef RELEASE
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    34
ifdef DEBUG
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    35
$(warning Compiling a release build, that is a debug build)
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    36
endif
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    37
endif
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    38
3354
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    39
ifeq ($(shell uname), Darwin)
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    40
	# it's a hardware mac, not crosscompiling
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    41
	NATIVE_OSX:=1
2722
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    42
endif
3211
044f84240f65 (svn r3882) -Codechange: [OSX] changed the way universal and tripple binaries are build
bjarni
parents: 3090
diff changeset
    43
3354
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    44
ifndef PPC_OSX_TARGET
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    45
PPC_OSX_TARGET:=10.3.9
3211
044f84240f65 (svn r3882) -Codechange: [OSX] changed the way universal and tripple binaries are build
bjarni
parents: 3090
diff changeset
    46
endif
3354
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    47
ifndef i386_OSX_TARGET
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    48
i386_OSX_TARGET:=10.4u
3211
044f84240f65 (svn r3882) -Codechange: [OSX] changed the way universal and tripple binaries are build
bjarni
parents: 3090
diff changeset
    49
endif
044f84240f65 (svn r3882) -Codechange: [OSX] changed the way universal and tripple binaries are build
bjarni
parents: 3090
diff changeset
    50
044f84240f65 (svn r3882) -Codechange: [OSX] changed the way universal and tripple binaries are build
bjarni
parents: 3090
diff changeset
    51
ifndef G5_FLAGS
044f84240f65 (svn r3882) -Codechange: [OSX] changed the way universal and tripple binaries are build
bjarni
parents: 3090
diff changeset
    52
G5_FLAGS := -mtune=970 -mcpu=970 -mpowerpc-gpopt
2834
6c29ece4f24b (svn r3382) -Feature: [OSX] added the flag JAGUAR to crosscompile for OSX 10.2.8 on 10.4
bjarni
parents: 2741
diff changeset
    53
endif
6c29ece4f24b (svn r3382) -Feature: [OSX] added the flag JAGUAR to crosscompile for OSX 10.2.8 on 10.4
bjarni
parents: 2741
diff changeset
    54
3085
cbcafb482b75 (svn r3674) -Feature: [OSX] Added support for tripple binaries (binaries optimised for G3, G5 and i686)
bjarni
parents: 3084
diff changeset
    55
ifdef UNIVERSAL_BINARY
3354
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    56
	OTTD_PPC:=1
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    57
	OTTD_i386:=1
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    58
	ifdef TRIPLE_BINARY
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    59
		OTTD_PPC970:=1
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    60
	endif
2722
dcbf94a5ad1a (svn r3267) -Codechange: [OSX] universal binary makefile code cleanup
bjarni
parents:
diff changeset
    61
endif
3354
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    62
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    63
# if any targets have been defined by now, we are crosscompiling and we will set up paths accordingly
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    64
ifdef OTTD_PPC
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    65
	CFLAGS_PPC   += -isysroot /Developer/SDKs/MacOSX$(PPC_OSX_TARGET).sdk
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    66
	LDFLAGS_PPC  += -Wl,-syslibroot,/Developer/SDKs/MacOSX$(PPC_OSX_TARGET).sdk
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    67
endif
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    68
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    69
ifdef OTTD_i386
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    70
	CFLAGS_i386  += -isysroot /Developer/SDKs/MacOSX$(i386_OSX_TARGET).sdk
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    71
	LDFLAGS_i386 += -Wl,-syslibroot,/Developer/SDKs/MacOSX$(i386_OSX_TARGET).sdk
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    72
endif
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    73
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    74
ifdef OTTD_PPC970
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    75
	ifndef OTTD_PPC
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    76
		CFLAGS_PPC   += -isysroot /Developer/SDKs/MacOSX$(PPC_OSX_TARGET).sdk
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    77
		LDFLAGS_PPC  += -Wl,-syslibroot,/Developer/SDKs/MacOSX$(PPC_OSX_TARGET).sdk
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    78
	endif
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    79
endif
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    80
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    81
ifdef JAGUAR
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    82
	CFLAGS  += -isysroot /Developer/SDKs/MacOSX10.2.8.sdk
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    83
	LDFLAGS += -Wl,-syslibroot,/Developer/SDKs/MacOSX10.2.8.sdk
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    84
	OTTD_PPC:=1
3211
044f84240f65 (svn r3882) -Codechange: [OSX] changed the way universal and tripple binaries are build
bjarni
parents: 3090
diff changeset
    85
endif
3294
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
    86
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
    87
# setting up flags to make a binary, that fits the system it builds on
3354
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    88
ifdef NATIVE_OSX
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    89
	ifndef UNIVERSAL_BINARY
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    90
		# we are not crosscompiling for other macs
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    91
		ifndef JAGUAR
3294
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
    92
			# the next line fails if it got whitespace in front of it
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
    93
$(shell $(CC) os/macosx/G5_detector.c -o os/macosx/G5_detector)
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
    94
			IS_G5:=$(shell os/macosx/G5_detector)
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
    95
			ifeq ($(shell uname -r), 6.8)
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
    96
			# OSX 10.2.8 uses Darwin 6.8, so we better set JAGUAR so we avoid the stuff that was added in 10.3 or later
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
    97
				JAGUAR:=1
3354
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
    98
				OTTD_PPC:=1
3294
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
    99
			endif
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
   100
		endif
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
   101
	endif
be3b1e6b4b74 (svn r4019) -Fix: [OSX] stopped using iconv for 10.2.8, since it was added in 10.3
bjarni
parents: 3212
diff changeset
   102
endif
3354
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   103
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   104
ifdef NATIVE_OSX
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   105
	ifndef OTTD_PPC
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   106
		ifndef OTTD_i386
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   107
			ifndef OTTD_PPC970
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   108
				# no flags have been set for target versions of OSX, so we will set it to compile for the current host
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   109
				ifeq ($(shell uname -p), powerpc)
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   110
					ifdef IS_G5
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   111
						OTTD_PPC970:=1
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   112
					else
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   113
						OTTD_PPC:=1
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   114
					endif
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   115
				else
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   116
					# we are not using a PowerPC CPU, so we assume that it's an Intel mac
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   117
					OTTD_i386:=1
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   118
				endif
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   119
			endif
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   120
		endif
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   121
	endif
88222b8dafef (svn r4149) -Codechange: [OSX] rewrite of how universal binaries are compiled
bjarni
parents: 3313
diff changeset
   122
endif