|
1 #!/bin/sh |
|
2 # |
|
3 # Build a fat binary on Mac OS X, thanks Ryan! |
|
4 |
|
5 # Number of CPUs (for make -j) |
|
6 NCPU=`sysctl -n hw.ncpu` |
|
7 NJOB=$NCPU |
|
8 #NJOB=`expr $NCPU + 1` |
|
9 |
|
10 # Generic, cross-platform CFLAGS you always want go here. |
|
11 CFLAGS="-O3 -g -pipe" |
|
12 |
|
13 # Locate Xcode SDK path |
|
14 SDK_PATH=/Developer/SDKs |
|
15 if [ ! -d $SDK_PATH ]; then |
|
16 echo "Couldn't find SDK path" |
|
17 exit 1 |
|
18 fi |
|
19 |
|
20 # See if we can use 10.2 or 10.3 runtime compatibility |
|
21 if [ -d "$SDK_PATH/MacOSX10.2.8.sdk" ]; then |
|
22 # PowerPC configure flags (10.2 runtime compatibility) |
|
23 # We dynamically load X11, so using the system X11 headers is fine. |
|
24 CONFIG_PPC="--build=`uname -p`-apple-darwin --host=powerpc-apple-darwin \ |
|
25 --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib" |
|
26 |
|
27 # PowerPC compiler flags |
|
28 CC_PPC="gcc-3.3 -arch ppc" |
|
29 CXX_PPC="g++-3.3 -arch ppc" |
|
30 CFLAGS_PPC="" |
|
31 CPPFLAGS_PPC="-DMAC_OS_X_VERSION_MIN_REQUIRED=1020 \ |
|
32 -nostdinc \ |
|
33 -F$SDK_PATH/MacOSX10.2.8.sdk/System/Library/Frameworks \ |
|
34 -I$SDK_PATH/MacOSX10.2.8.sdk/usr/include/gcc/darwin/3.3 \ |
|
35 -isystem $SDK_PATH/MacOSX10.2.8.sdk/usr/include" |
|
36 |
|
37 # PowerPC linker flags |
|
38 LFLAGS_PPC="-arch ppc \ |
|
39 -L$SDK_PATH/MacOSX10.2.8.sdk/usr/lib/gcc/darwin/3.3 \ |
|
40 -F$SDK_PATH/MacOSX10.2.8.sdk/System/Library/Frameworks \ |
|
41 -Wl,-syslibroot,$SDK_PATH/MacOSX10.2.8.sdk" |
|
42 |
|
43 else # 10.2 or 10.3 SDK |
|
44 |
|
45 # PowerPC configure flags (10.3 runtime compatibility) |
|
46 # We dynamically load X11, so using the system X11 headers is fine. |
|
47 CONFIG_PPC="--build=`uname -p`-apple-darwin --host=powerpc-apple-darwin \ |
|
48 --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib" |
|
49 |
|
50 # PowerPC compiler flags |
|
51 CC_PPC="gcc-4.0 -arch ppc" |
|
52 CXX_PPC="g++-4.0 -arch ppc" |
|
53 CFLAGS_PPC="" |
|
54 CPPFLAGS_PPC="-DMAC_OS_X_VERSION_MIN_REQUIRED=1030 \ |
|
55 -nostdinc \ |
|
56 -F$SDK_PATH/MacOSX10.3.9.sdk/System/Library/Frameworks \ |
|
57 -I$SDK_PATH/MacOSX10.3.9.sdk/usr/lib/gcc/powerpc-apple-darwin9/4.0.1/include \ |
|
58 -isystem $SDK_PATH/MacOSX10.3.9.sdk/usr/include" |
|
59 |
|
60 # PowerPC linker flags |
|
61 LFLAGS_PPC="-arch ppc -mmacosx-version-min=10.3 \ |
|
62 -L$SDK_PATH/MacOSX10.3.9.sdk/usr/lib/gcc/powerpc-apple-darwin9/4.0.1 \ |
|
63 -F$SDK_PATH/MacOSX10.3.9.sdk/System/Library/Frameworks \ |
|
64 -Wl,-syslibroot,$SDK_PATH/MacOSX10.3.9.sdk" |
|
65 |
|
66 fi # 10.2 or 10.3 SDK |
|
67 |
|
68 # Intel configure flags (10.4 runtime compatibility) |
|
69 # We dynamically load X11, so using the system X11 headers is fine. |
|
70 CONFIG_X86="--build=`uname -p`-apple-darwin --host=i386-apple-darwin \ |
|
71 --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib" |
|
72 |
|
73 # Intel compiler flags |
|
74 CC_X86="gcc-4.0 -arch i386" |
|
75 CXX_X86="g++-4.0 -arch i386" |
|
76 CFLAGS_X86="-mmacosx-version-min=10.4" |
|
77 CPPFLAGS_X86="-DMAC_OS_X_VERSION_MIN_REQUIRED=1040 \ |
|
78 -nostdinc \ |
|
79 -F$SDK_PATH/MacOSX10.4u.sdk/System/Library/Frameworks \ |
|
80 -I$SDK_PATH/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin9/4.0.1/include \ |
|
81 -isystem $SDK_PATH/MacOSX10.4u.sdk/usr/include" |
|
82 |
|
83 # Intel linker flags |
|
84 LFLAGS_X86="-arch i386 -mmacosx-version-min=10.4 \ |
|
85 -L$SDK_PATH/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin9/4.0.1 \ |
|
86 -Wl,-syslibroot,$SDK_PATH/MacOSX10.4u.sdk" |
|
87 |
|
88 # |
|
89 # Find the configure script |
|
90 # |
|
91 srcdir=`dirname $0`/.. |
|
92 auxdir=$srcdir/build-scripts |
|
93 cd $srcdir |
|
94 |
|
95 # |
|
96 # Figure out which phase to build: |
|
97 # all, |
|
98 # configure, configure-ppc, configure-x86, |
|
99 # make, make-ppc, make-x86, merge |
|
100 # install |
|
101 # clean |
|
102 if test x"$1" = x; then |
|
103 phase=all |
|
104 else |
|
105 phase="$1" |
|
106 fi |
|
107 case $phase in |
|
108 all) |
|
109 configure_ppc="yes" |
|
110 configure_x86="yes" |
|
111 make_ppc="yes" |
|
112 make_x86="yes" |
|
113 merge="yes" |
|
114 ;; |
|
115 configure) |
|
116 configure_ppc="yes" |
|
117 configure_x86="yes" |
|
118 ;; |
|
119 configure-ppc) |
|
120 configure_ppc="yes" |
|
121 ;; |
|
122 configure-x86) |
|
123 configure_x86="yes" |
|
124 ;; |
|
125 make) |
|
126 make_ppc="yes" |
|
127 make_x86="yes" |
|
128 merge="yes" |
|
129 ;; |
|
130 make-ppc) |
|
131 make_ppc="yes" |
|
132 ;; |
|
133 make-x86) |
|
134 make_x86="yes" |
|
135 ;; |
|
136 merge) |
|
137 merge="yes" |
|
138 ;; |
|
139 install) |
|
140 install_bin="yes" |
|
141 install_hdrs="yes" |
|
142 install_lib="yes" |
|
143 install_data="yes" |
|
144 install_man="yes" |
|
145 ;; |
|
146 install-bin) |
|
147 install_bin="yes" |
|
148 ;; |
|
149 install-hdrs) |
|
150 install_hdrs="yes" |
|
151 ;; |
|
152 install-lib) |
|
153 install_lib="yes" |
|
154 ;; |
|
155 install-data) |
|
156 install_data="yes" |
|
157 ;; |
|
158 install-man) |
|
159 install_man="yes" |
|
160 ;; |
|
161 clean) |
|
162 clean_ppc="yes" |
|
163 clean_x86="yes" |
|
164 ;; |
|
165 clean-ppc) |
|
166 clean_ppc="yes" |
|
167 ;; |
|
168 clean-x86) |
|
169 clean_x86="yes" |
|
170 ;; |
|
171 *) |
|
172 echo "Usage: $0 [all|configure[-ppc|-x86]|make[-ppc|-x86]|merge|install|clean]" |
|
173 exit 1 |
|
174 ;; |
|
175 esac |
|
176 case `uname -p` in |
|
177 powerpc) |
|
178 native_path=ppc |
|
179 ;; |
|
180 *86) |
|
181 native_path=x86 |
|
182 ;; |
|
183 *) |
|
184 echo "Couldn't figure out native architecture path" |
|
185 exit 1 |
|
186 ;; |
|
187 esac |
|
188 |
|
189 # |
|
190 # Create the build directories |
|
191 # |
|
192 for dir in build build/ppc build/x86; do |
|
193 if test -d $dir; then |
|
194 : |
|
195 else |
|
196 mkdir $dir || exit 1 |
|
197 fi |
|
198 done |
|
199 |
|
200 # |
|
201 # Build the PowerPC binary |
|
202 # |
|
203 if test x$configure_ppc = xyes; then |
|
204 (cd build/ppc && \ |
|
205 sh ../../configure $CONFIG_PPC CC="$CC_PPC" CXX="$CXX_PPC" CFLAGS="$CFLAGS $CFLAGS_PPC" CPPFLAGS="$CPPFLAGS_PPC" LDFLAGS="$LFLAGS_PPC") || exit 2 |
|
206 fi |
|
207 if test x$make_ppc = xyes; then |
|
208 (cd build/ppc && ls include && make -j$NJOB) || exit 3 |
|
209 fi |
|
210 |
|
211 # |
|
212 # Build the Intel binary |
|
213 # |
|
214 if test x$configure_x86 = xyes; then |
|
215 (cd build/x86 && \ |
|
216 sh ../../configure $CONFIG_X86 CC="$CC_X86" CXX="$CXX_X86" CFLAGS="$CFLAGS $CFLAGS_X86" CPPFLAGS="$CPPFLAGS_X86" LDFLAGS="$LFLAGS_X86") || exit 2 |
|
217 fi |
|
218 if test x$make_x86 = xyes; then |
|
219 (cd build/x86 && make -j$NJOB) || exit 3 |
|
220 fi |
|
221 |
|
222 # |
|
223 # Combine into fat binary |
|
224 # |
|
225 if test x$merge = xyes; then |
|
226 output=.libs |
|
227 sh $auxdir/mkinstalldirs build/$output |
|
228 cd build |
|
229 target=`find . -mindepth 3 -type f -name '*.dylib' | head -1 | sed 's|.*/||'` |
|
230 (lipo -create -o $output/$target `find . -mindepth 3 -type f -name "*.dylib"` && |
|
231 ln -sf $target $output/libSDL-1.2.0.dylib && |
|
232 ln -sf $target $output/libSDL.dylib && |
|
233 lipo -create -o $output/libSDL.a */build/.libs/libSDL.a && |
|
234 cp $native_path/build/.libs/libSDL.la $output && |
|
235 cp $native_path/build/.libs/libSDL.lai $output && |
|
236 cp $native_path/build/libSDL.la . && |
|
237 lipo -create -o libSDLmain.a */build/libSDLmain.a && |
|
238 echo "Build complete!" && |
|
239 echo "Files can be found in the build directory.") || exit 4 |
|
240 cd .. |
|
241 fi |
|
242 |
|
243 # |
|
244 # Install |
|
245 # |
|
246 do_install() |
|
247 { |
|
248 echo $* |
|
249 $* || exit 5 |
|
250 } |
|
251 if test x$prefix = x; then |
|
252 prefix=/usr/local |
|
253 fi |
|
254 if test x$exec_prefix = x; then |
|
255 exec_prefix=$prefix |
|
256 fi |
|
257 if test x$bindir = x; then |
|
258 bindir=$exec_prefix/bin |
|
259 fi |
|
260 if test x$libdir = x; then |
|
261 libdir=$exec_prefix/lib |
|
262 fi |
|
263 if test x$includedir = x; then |
|
264 includedir=$prefix/include |
|
265 fi |
|
266 if test x$datadir = x; then |
|
267 datadir=$prefix/share |
|
268 fi |
|
269 if test x$mandir = x; then |
|
270 mandir=$prefix/man |
|
271 fi |
|
272 if test x$install_bin = xyes; then |
|
273 do_install sh $auxdir/mkinstalldirs $bindir |
|
274 do_install /usr/bin/install -c -m 755 build/$native_path/sdl-config $bindir/sdl-config |
|
275 fi |
|
276 if test x$install_hdrs = xyes; then |
|
277 do_install sh $auxdir/mkinstalldirs $includedir/SDL |
|
278 for src in $srcdir/include/*.h; do \ |
|
279 file=`echo $src | sed -e 's|^.*/||'`; \ |
|
280 do_install /usr/bin/install -c -m 644 $src $includedir/SDL/$file; \ |
|
281 done |
|
282 do_install /usr/bin/install -c -m 644 $srcdir/include/SDL_config_macosx.h $includedir/SDL/SDL_config.h |
|
283 fi |
|
284 if test x$install_lib = xyes; then |
|
285 do_install sh $auxdir/mkinstalldirs $libdir |
|
286 do_install sh build/$native_path/libtool --mode=install /usr/bin/install -c build/libSDL.la $libdir/libSDL.la |
|
287 do_install /usr/bin/install -c -m 644 build/libSDLmain.a $libdir/libSDLmain.a |
|
288 do_install ranlib $libdir/libSDLmain.a |
|
289 fi |
|
290 if test x$install_data = xyes; then |
|
291 do_install sh $auxdir/mkinstalldirs $datadir/aclocal |
|
292 do_install /usr/bin/install -c -m 644 $srcdir/sdl.m4 $datadir/aclocal/sdl.m4 |
|
293 fi |
|
294 if test x$install_man = xyes; then |
|
295 do_install sh $auxdir/mkinstalldirs $mandir/man3 |
|
296 for src in $srcdir/docs/man3/*.3; do \ |
|
297 file=`echo $src | sed -e 's|^.*/||'`; \ |
|
298 do_install /usr/bin/install -c -m 644 $src $mandir/man3/$file; \ |
|
299 done |
|
300 fi |
|
301 |
|
302 # |
|
303 # Clean up |
|
304 # |
|
305 do_clean() |
|
306 { |
|
307 echo $* |
|
308 $* || exit 6 |
|
309 } |
|
310 if test x$clean_x86 = xyes; then |
|
311 do_clean rm -r build/x86 |
|
312 fi |
|
313 if test x$clean_ppc = xyes; then |
|
314 do_clean rm -r build/ppc |
|
315 fi |
|
316 |