This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
/
fatbuild.sh
executable file
·410 lines (382 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
14
15
# SDK path
if test x$SDK_PATH = x; then
SDK_PATH=/Developer/SDKs
fi
16
17
18
# Generic, cross-platform CFLAGS you always want go here.
CFLAGS="-O3 -g -pipe"
19
20
21
22
23
24
25
26
27
28
29
30
# They changed this from "darwin9" to "darwin10" in Xcode 3.2 (Snow Leopard).
GCCUSRPATH_PPC=`ls -d $SDK_PATH/MacOSX10.4u.sdk/usr/lib/gcc/powerpc-apple-darwin*/4.0.1`
if [ ! -d "$GCCUSRPATH_PPC" ]; then
echo "Couldn't find any GCC usr path for 32-bit ppc"
exit 1
fi
GCCUSRPATH_PPC64=`ls -d $SDK_PATH/MacOSX10.5.sdk/usr/lib/gcc/powerpc-apple-darwin*/4.0.1`
if [ ! -d "$GCCUSRPATH_PPC64" ]; then
echo "Couldn't find any GCC usr path for 64-bit ppc"
exit 1
fi
31
# PowerPC 32-bit configure flags (10.4 runtime compatibility)
32
33
34
35
# 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"
36
# PowerPC 32-bit compiler flags
37
38
CC_PPC="gcc-4.0 -arch ppc"
CXX_PPC="g++-4.0 -arch ppc"
39
CFLAGS_PPC="-mmacosx-version-min=10.4"
40
CPPFLAGS_PPC="-DMAC_OS_X_VERSION_MIN_REQUIRED=1040 \
41
-nostdinc \
42
-F$SDK_PATH/MacOSX10.4u.sdk/System/Library/Frameworks \
43
-I$GCCUSRPATH_PPC/include \
44
-isystem $SDK_PATH/MacOSX10.4u.sdk/usr/include"
45
46
# PowerPC 32-bit linker flags
47
LFLAGS_PPC="-arch ppc -Wl,-headerpad_max_install_names -mmacosx-version-min=10.4 \
48
-F$SDK_PATH/MacOSX10.4u.sdk/System/Library/Frameworks \
49
-L$GCCUSRPATH_PPC \
50
-Wl,-syslibroot,$SDK_PATH/MacOSX10.4u.sdk"
51
52
53
54
55
56
57
58
59
# 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"
60
CFLAGS_PPC64="-mmacosx-version-min=10.5"
61
62
CPPFLAGS_PPC64="-DMAC_OS_X_VERSION_MIN_REQUIRED=1050 \
-nostdinc \
63
-F$SDK_PATH/MacOSX10.5.sdk/System/Library/Frameworks \
64
-I$GCCUSRPATH_PPC64/include \
65
-isystem $SDK_PATH/MacOSX10.5.sdk/usr/include"
66
67
# PowerPC 64-bit linker flags
68
LFLAGS_PPC64="-arch ppc64 -Wl,-headerpad_max_install_names -mmacosx-version-min=10.5 \
69
-F$SDK_PATH/MacOSX10.5.sdk/System/Library/Frameworks \
70
-L$GCCUSRPATH_PPC64/ppc64 \
71
-Wl,-syslibroot,$SDK_PATH/MacOSX10.5.sdk"
72
73
74
75
76
77
# 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"
78
79
# They changed this from "darwin9" to "darwin10" in Xcode 3.2 (Snow Leopard).
GCCUSRPATH_X86=`ls -d $SDK_PATH/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin*/4.0.1`
80
if [ ! -d "$GCCUSRPATH_X86" ]; then
81
82
echo "Couldn't find any GCC usr path for 32-bit x86"
exit 1
83
fi
84
85
86
GCCUSRPATH_X64=`ls -d $SDK_PATH/MacOSX10.5.sdk/usr/lib/gcc/i686-apple-darwin*/4.0.1`
if [ ! -d "$GCCUSRPATH_X64" ]; then
echo "Couldn't find any GCC usr path for 64-bit x86"
87
88
89
exit 1
fi
90
# Intel 32-bit compiler flags
91
CC_X86="gcc-4.0 -arch i386"
92
CXX_X86="g++-4.0 -arch i386"
93
CFLAGS_X86="-mmacosx-version-min=10.4"
94
CPPFLAGS_X86="-DMAC_OS_X_VERSION_MIN_REQUIRED=1040 \
95
-nostdinc \
96
-F$SDK_PATH/MacOSX10.4u.sdk/System/Library/Frameworks \
97
-I$GCCUSRPATH_X86/include \
98
-isystem $SDK_PATH/MacOSX10.4u.sdk/usr/include"
99
100
# Intel 32-bit linker flags
101
LFLAGS_X86="-arch i386 -Wl,-headerpad_max_install_names -mmacosx-version-min=10.4 \
102
-F$SDK_PATH/MacOSX10.4u.sdk/System/Library/Frameworks \
103
-L$GCCUSRPATH_X86 \
104
-Wl,-syslibroot,$SDK_PATH/MacOSX10.4u.sdk"
105
106
107
108
109
110
111
112
113
114
115
116
# 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 \
117
-F$SDK_PATH/MacOSX10.5.sdk/System/Library/Frameworks \
118
-I$GCCUSRPATH_X64/include \
119
-isystem $SDK_PATH/MacOSX10.5.sdk/usr/include"
120
121
# Intel 64-bit linker flags
122
LFLAGS_X64="-arch x86_64 -Wl,-headerpad_max_install_names -mmacosx-version-min=10.5 \
123
-F$SDK_PATH/MacOSX10.5.sdk/System/Library/Frameworks \
124
-L$GCCUSRPATH_X64/x86_64 \
125
-Wl,-syslibroot,$SDK_PATH/MacOSX10.5.sdk"
126
127
128
129
#
# Find the configure script
#
130
131
132
srcdir=`dirname $0`/..
auxdir=$srcdir/build-scripts
cd $srcdir
133
134
135
136
#
# Figure out which phase to build:
# all,
137
138
# configure, configure-ppc, configure-ppc64, configure-x86, configure-x64
# make, make-ppc, make-ppc64, make-x86, make-x64, merge
139
# install
140
# clean
141
142
143
144
145
146
147
148
if test x"$1" = x; then
phase=all
else
phase="$1"
fi
case $phase in
all)
configure_ppc="yes"
149
configure_ppc64="yes"
150
configure_x86="yes"
151
configure_x64="yes"
152
make_ppc="yes"
153
make_ppc64="yes"
154
make_x86="yes"
155
make_x64="yes"
156
157
158
159
merge="yes"
;;
configure)
configure_ppc="yes"
160
configure_ppc64="yes"
161
configure_x86="yes"
162
configure_x64="yes"
163
164
165
166
;;
configure-ppc)
configure_ppc="yes"
;;
167
168
169
configure-ppc64)
configure_ppc64="yes"
;;
170
171
172
configure-x86)
configure_x86="yes"
;;
173
174
175
configure-x64)
configure_x64="yes"
;;
176
177
make)
make_ppc="yes"
178
make_ppc64="yes"
179
make_x86="yes"
180
make_x64="yes"
181
182
183
184
185
merge="yes"
;;
make-ppc)
make_ppc="yes"
;;
186
187
188
make-ppc64)
make_ppc64="yes"
;;
189
190
191
make-x86)
make_x86="yes"
;;
192
193
194
make-x64)
make_x64="yes"
;;
195
196
197
198
merge)
merge="yes"
;;
install)
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
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"
;;
220
221
clean)
clean_ppc="yes"
222
clean_ppc64="yes"
223
clean_x86="yes"
224
clean_x64="yes"
225
226
227
228
;;
clean-ppc)
clean_ppc="yes"
;;
229
230
231
clean-ppc64)
clean_ppc64="yes"
;;
232
233
234
clean-x86)
clean_x86="yes"
;;
235
236
237
clean-x64)
clean_x64="yes"
;;
238
*)
239
echo "Usage: $0 [all|configure[-ppc|-ppc64|-x86|-x64]|make[-ppc|-ppc64|-x86|-x64]|merge|install|clean[-ppc|-ppc64|-x86|-x64]]"
240
241
242
243
244
245
246
exit 1
;;
esac
case `uname -p` in
powerpc)
native_path=ppc
;;
247
248
249
powerpc64)
native_path=ppc64
;;
250
251
252
*86)
native_path=x86
;;
253
254
255
x86_64)
native_path=x64
;;
256
257
258
*)
echo "Couldn't figure out native architecture path"
exit 1
259
260
261
262
263
264
;;
esac
#
# Create the build directories
#
265
for dir in build build/ppc build/ppc64 build/x86 build/x64; do
266
267
268
269
270
271
272
273
if test -d $dir; then
:
else
mkdir $dir || exit 1
fi
done
#
274
# Build the PowerPC 32-bit binary
275
276
277
#
if test x$configure_ppc = xyes; then
(cd build/ppc && \
278
sh ../../configure $CONFIG_PPC CC="$CC_PPC" CXX="$CXX_PPC" CFLAGS="$CFLAGS $CFLAGS_PPC" CPPFLAGS="$CPPFLAGS_PPC" LDFLAGS="$LFLAGS_PPC") || exit 2
279
280
fi
if test x$make_ppc = xyes; then
281
(cd build/ppc && ls include && make -j$NJOB) || exit 3
282
283
284
fi
#
285
286
287
288
289
290
291
292
293
294
295
296
# 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
297
298
299
#
if test x$configure_x86 = xyes; then
(cd build/x86 && \
300
sh ../../configure $CONFIG_X86 CC="$CC_X86" CXX="$CXX_X86" CFLAGS="$CFLAGS $CFLAGS_X86" CPPFLAGS="$CPPFLAGS_X86" LDFLAGS="$LFLAGS_X86") || exit 2
301
302
fi
if test x$make_x86 = xyes; then
303
(cd build/x86 && make -j$NJOB) || exit 3
304
305
fi
306
307
308
309
310
311
312
313
314
315
316
#
# 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
317
318
319
320
#
# Combine into fat binary
#
if test x$merge = xyes; then
321
322
323
output=.libs
sh $auxdir/mkinstalldirs build/$output
cd build
324
325
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"` &&
326
327
328
329
330
331
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 &&
332
333
echo "Build complete!" &&
echo "Files can be found in the build directory.") || exit 4
334
cd ..
335
336
337
338
339
fi
#
# Install
#
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
380
381
382
383
384
385
386
387
388
389
390
391
392
393
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
394
fi
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
#
# 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