This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
/
fatbuild.sh
executable file
·396 lines (369 loc) · 11.2 KB
1
2
3
4
#!/bin/sh
#
# Build a fat binary on Mac OS X, thanks Ryan!
5
6
# Number of CPUs (for make -j)
NCPU=`sysctl -n hw.ncpu`
7
8
9
if test x$NJOB = x; then
NJOB=$NCPU
fi
10
11
12
13
# Generic, cross-platform CFLAGS you always want go here.
CFLAGS="-O3 -g -pipe"
14
# PowerPC 32-bit configure flags (10.4 runtime compatibility)
15
16
17
18
# We dynamically load X11, so using the system X11 headers is fine.
CONFIG_PPC="--build=`uname -p`-apple-darwin --host=powerpc-apple-darwin \
--x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib"
19
# PowerPC 32-bit compiler flags
20
21
CC_PPC="gcc-4.0 -arch ppc"
CXX_PPC="g++-4.0 -arch ppc"
22
CFLAGS_PPC="-mmacosx-version-min=10.4"
23
CPPFLAGS_PPC="-DMAC_OS_X_VERSION_MIN_REQUIRED=1040 \
24
-nostdinc \
25
26
27
-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks \
-I/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/powerpc-apple-darwin10/4.0.1/include \
-isystem /Developer/SDKs/MacOSX10.4u.sdk/usr/include"
28
29
# PowerPC 32-bit linker flags
30
LFLAGS_PPC="-arch ppc -Wl,-headerpad_max_install_names -mmacosx-version-min=10.4 \
31
32
33
-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks \
-L/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/powerpc-apple-darwin10/4.0.1 \
-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk"
34
35
36
37
38
39
40
41
42
# PowerPC 64-bit configure flags (10.5 runtime compatibility)
# We dynamically load X11, so using the system X11 headers is fine.
CONFIG_PPC64="--build=`uname -p`-apple-darwin --host=powerpc-apple-darwin \
--x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib"
# PowerPC 64-bit compiler flags
CC_PPC64="gcc-4.0 -arch ppc64"
CXX_PPC64="g++-4.0 -arch ppc64"
43
CFLAGS_PPC64="-mmacosx-version-min=10.5"
44
45
46
47
48
49
50
CPPFLAGS_PPC64="-DMAC_OS_X_VERSION_MIN_REQUIRED=1050 \
-nostdinc \
-F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks \
-I/Developer/SDKs/MacOSX10.5.sdk/usr/lib/gcc/powerpc-apple-darwin10/4.0.1/include \
-isystem /Developer/SDKs/MacOSX10.5.sdk/usr/include"
# PowerPC 64-bit linker flags
51
LFLAGS_PPC64="-arch ppc64 -Wl,-headerpad_max_install_names -mmacosx-version-min=10.5 \
52
53
54
55
56
57
58
59
60
61
-F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks \
-L/Developer/SDKs/MacOSX10.5.sdk/usr/lib/gcc/powerpc-apple-darwin10/4.0.1/ppc64 \
-Wl,-syslibroot,/Developer/SDKs/MacOSX10.5.sdk"
# Intel 32-bit configure flags (10.4 runtime compatibility)
# We dynamically load X11, so using the system X11 headers is fine.
CONFIG_X86="--build=`uname -p`-apple-darwin --host=i386-apple-darwin \
--x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib"
# Intel 32-bit configure flags (10.4 runtime compatibility)
62
63
64
65
# We dynamically load X11, so using the system X11 headers is fine.
CONFIG_X86="--build=`uname -p`-apple-darwin --host=i386-apple-darwin \
--x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib"
66
67
68
69
70
71
72
73
74
75
# They changed this to "darwin10" in Xcode 3.2 (Snow Leopard).
GCCUSRPATH_X86="$SDK_PATH/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin9/4.0.1"
if [ ! -d "$GCCUSRPATH" ]; then
GCCUSRPATH_X86="$SDK_PATH/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin10/4.0.1"
fi
if [ ! -d "$GCCUSRPATH_X86" ]; then
echo "Couldn't find any GCC usr path for x86"
exit 1
fi
76
# Intel 32-bit compiler flags
77
CC_X86="gcc-4.0 -arch i386"
78
CXX_X86="g++-4.0 -arch i386"
79
CFLAGS_X86="-mmacosx-version-min=10.4"
80
CPPFLAGS_X86="-DMAC_OS_X_VERSION_MIN_REQUIRED=1040 \
81
-nostdinc \
82
-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks \
83
-I$GCCUSRPATH_X86/include \
84
-isystem /Developer/SDKs/MacOSX10.4u.sdk/usr/include"
85
86
# Intel 32-bit linker flags
87
LFLAGS_X86="-arch i386 -Wl,-headerpad_max_install_names -mmacosx-version-min=10.4 \
88
-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks \
89
-L$GCCUSRPATH_X86 \
90
91
-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk"
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# Intel 64-bit configure flags (10.5 runtime compatibility)
# We dynamically load X11, so using the system X11 headers is fine.
CONFIG_X64="--build=`uname -p`-apple-darwin --host=i386-apple-darwin \
--x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib"
# Intel 64-bit compiler flags
CC_X64="gcc-4.0 -arch x86_64"
CXX_X64="g++-4.0 -arch x86_64"
CFLAGS_X64="-mmacosx-version-min=10.5"
CPPFLAGS_X64="-DMAC_OS_X_VERSION_MIN_REQUIRED=1050 \
-nostdinc \
-F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks \
-I/Developer/SDKs/MacOSX10.5.sdk/usr/lib/gcc/i686-apple-darwin10/4.0.1/include \
-isystem /Developer/SDKs/MacOSX10.5.sdk/usr/include"
# Intel 64-bit linker flags
108
LFLAGS_X64="-arch x86_64 -Wl,-headerpad_max_install_names -mmacosx-version-min=10.5 \
109
110
111
112
-F/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks \
-L/Developer/SDKs/MacOSX10.5.sdk/usr/lib/gcc/i686-apple-darwin10/4.0.1/x86_64 \
-Wl,-syslibroot,/Developer/SDKs/MacOSX10.5.sdk"
113
114
115
#
# Find the configure script
#
116
117
118
srcdir=`dirname $0`/..
auxdir=$srcdir/build-scripts
cd $srcdir
119
120
121
122
#
# Figure out which phase to build:
# all,
123
124
# configure, configure-ppc, configure-ppc64, configure-x86, configure-x64
# make, make-ppc, make-ppc64, make-x86, make-x64, merge
125
# install
126
# clean
127
128
129
130
131
132
133
134
if test x"$1" = x; then
phase=all
else
phase="$1"
fi
case $phase in
all)
configure_ppc="yes"
135
configure_ppc64="yes"
136
configure_x86="yes"
137
configure_x64="yes"
138
make_ppc="yes"
139
make_ppc64="yes"
140
make_x86="yes"
141
make_x64="yes"
142
143
144
145
merge="yes"
;;
configure)
configure_ppc="yes"
146
configure_ppc64="yes"
147
configure_x86="yes"
148
configure_x64="yes"
149
150
151
152
;;
configure-ppc)
configure_ppc="yes"
;;
153
154
155
configure-ppc64)
configure_ppc64="yes"
;;
156
157
158
configure-x86)
configure_x86="yes"
;;
159
160
161
configure-x64)
configure_x64="yes"
;;
162
163
make)
make_ppc="yes"
164
make_ppc64="yes"
165
make_x86="yes"
166
make_x64="yes"
167
168
169
170
171
merge="yes"
;;
make-ppc)
make_ppc="yes"
;;
172
173
174
make-ppc64)
make_ppc64="yes"
;;
175
176
177
make-x86)
make_x86="yes"
;;
178
179
180
make-x64)
make_x64="yes"
;;
181
182
183
184
merge)
merge="yes"
;;
install)
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
install_bin="yes"
install_hdrs="yes"
install_lib="yes"
install_data="yes"
install_man="yes"
;;
install-bin)
install_bin="yes"
;;
install-hdrs)
install_hdrs="yes"
;;
install-lib)
install_lib="yes"
;;
install-data)
install_data="yes"
;;
install-man)
install_man="yes"
;;
206
207
clean)
clean_ppc="yes"
208
clean_ppc64="yes"
209
clean_x86="yes"
210
clean_x64="yes"
211
212
213
214
;;
clean-ppc)
clean_ppc="yes"
;;
215
216
217
clean-ppc64)
clean_ppc64="yes"
;;
218
219
220
clean-x86)
clean_x86="yes"
;;
221
222
223
clean-x64)
clean_x64="yes"
;;
224
*)
225
echo "Usage: $0 [all|configure[-ppc|-ppc64|-x86|-x64]|make[-ppc|-ppc64|-x86|-x64]|merge|install|clean[-ppc|-ppc64|-x86|-x64]]"
226
227
228
229
230
231
232
exit 1
;;
esac
case `uname -p` in
powerpc)
native_path=ppc
;;
233
234
235
powerpc64)
native_path=ppc64
;;
236
237
238
*86)
native_path=x86
;;
239
240
241
x86_64)
native_path=x64
;;
242
243
244
*)
echo "Couldn't figure out native architecture path"
exit 1
245
246
247
248
249
250
;;
esac
#
# Create the build directories
#
251
for dir in build build/ppc build/ppc64 build/x86 build/x64; do
252
253
254
255
256
257
258
259
if test -d $dir; then
:
else
mkdir $dir || exit 1
fi
done
#
260
# Build the PowerPC 32-bit binary
261
262
263
#
if test x$configure_ppc = xyes; then
(cd build/ppc && \
264
sh ../../configure $CONFIG_PPC CC="$CC_PPC" CXX="$CXX_PPC" CFLAGS="$CFLAGS $CFLAGS_PPC" CPPFLAGS="$CPPFLAGS_PPC" LDFLAGS="$LFLAGS_PPC") || exit 2
265
266
fi
if test x$make_ppc = xyes; then
267
(cd build/ppc && ls include && make -j$NJOB) || exit 3
268
269
270
fi
#
271
272
273
274
275
276
277
278
279
280
281
282
# Build the PowerPC 64-bit binary
#
if test x$configure_ppc64 = xyes; then
(cd build/ppc64 && \
sh ../../configure $CONFIG_PPC64 CC="$CC_PPC64" CXX="$CXX_PPC64" CFLAGS="$CFLAGS $CFLAGS_PPC64" CPPFLAGS="$CPPFLAGS_PPC64" LDFLAGS="$LFLAGS_PPC64") || exit 2
fi
if test x$make_ppc64 = xyes; then
(cd build/ppc64 && ls include && make -j$NJOB) || exit 3
fi
#
# Build the Intel 32-bit binary
283
284
285
#
if test x$configure_x86 = xyes; then
(cd build/x86 && \
286
sh ../../configure $CONFIG_X86 CC="$CC_X86" CXX="$CXX_X86" CFLAGS="$CFLAGS $CFLAGS_X86" CPPFLAGS="$CPPFLAGS_X86" LDFLAGS="$LFLAGS_X86") || exit 2
287
288
fi
if test x$make_x86 = xyes; then
289
(cd build/x86 && make -j$NJOB) || exit 3
290
291
fi
292
293
294
295
296
297
298
299
300
301
302
#
# Build the Intel 32-bit binary
#
if test x$configure_x64 = xyes; then
(cd build/x64 && \
sh ../../configure $CONFIG_X64 CC="$CC_X64" CXX="$CXX_X64" CFLAGS="$CFLAGS $CFLAGS_X64" CPPFLAGS="$CPPFLAGS_X64" LDFLAGS="$LFLAGS_X64") || exit 2
fi
if test x$make_x64 = xyes; then
(cd build/x64 && make -j$NJOB) || exit 3
fi
303
304
305
306
#
# Combine into fat binary
#
if test x$merge = xyes; then
307
308
309
output=.libs
sh $auxdir/mkinstalldirs build/$output
cd build
310
311
target=`find . -mindepth 4 -maxdepth 4 -type f -name '*.dylib' | head -1 | sed 's|.*/||'`
(lipo -create -o $output/$target `find . -mindepth 4 -maxdepth 4 -type f -name "*.dylib"` &&
312
313
314
315
316
317
ln -sf $target $output/libSDL.dylib &&
lipo -create -o $output/libSDL.a */build/.libs/libSDL.a &&
cp $native_path/build/.libs/libSDL.la $output &&
cp $native_path/build/.libs/libSDL.lai $output &&
cp $native_path/build/libSDL.la . &&
lipo -create -o libSDLmain.a */build/libSDLmain.a &&
318
319
echo "Build complete!" &&
echo "Files can be found in the build directory.") || exit 4
320
cd ..
321
322
323
324
325
fi
#
# Install
#
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
do_install()
{
echo $*
$* || exit 5
}
if test x$prefix = x; then
prefix=/usr/local
fi
if test x$exec_prefix = x; then
exec_prefix=$prefix
fi
if test x$bindir = x; then
bindir=$exec_prefix/bin
fi
if test x$libdir = x; then
libdir=$exec_prefix/lib
fi
if test x$includedir = x; then
includedir=$prefix/include
fi
if test x$datadir = x; then
datadir=$prefix/share
fi
if test x$mandir = x; then
mandir=$prefix/man
fi
if test x$install_bin = xyes; then
do_install sh $auxdir/mkinstalldirs $bindir
do_install /usr/bin/install -c -m 755 build/$native_path/sdl-config $bindir/sdl-config
fi
if test x$install_hdrs = xyes; then
do_install sh $auxdir/mkinstalldirs $includedir/SDL
for src in $srcdir/include/*.h; do \
file=`echo $src | sed -e 's|^.*/||'`; \
do_install /usr/bin/install -c -m 644 $src $includedir/SDL/$file; \
done
do_install /usr/bin/install -c -m 644 $srcdir/include/SDL_config_macosx.h $includedir/SDL/SDL_config.h
fi
if test x$install_lib = xyes; then
do_install sh $auxdir/mkinstalldirs $libdir
do_install sh build/$native_path/libtool --mode=install /usr/bin/install -c build/libSDL.la $libdir/libSDL.la
do_install /usr/bin/install -c -m 644 build/libSDLmain.a $libdir/libSDLmain.a
do_install ranlib $libdir/libSDLmain.a
fi
if test x$install_data = xyes; then
do_install sh $auxdir/mkinstalldirs $datadir/aclocal
do_install /usr/bin/install -c -m 644 $srcdir/sdl.m4 $datadir/aclocal/sdl.m4
fi
if test x$install_man = xyes; then
do_install sh $auxdir/mkinstalldirs $mandir/man3
for src in $srcdir/docs/man3/*.3; do \
file=`echo $src | sed -e 's|^.*/||'`; \
do_install /usr/bin/install -c -m 644 $src $mandir/man3/$file; \
done
380
fi
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
#
# Clean up
#
do_clean()
{
echo $*
$* || exit 6
}
if test x$clean_x86 = xyes; then
do_clean rm -r build/x86
fi
if test x$clean_ppc = xyes; then
do_clean rm -r build/ppc
fi