tune the preloads a bit
[sdl_omap.git] / build-scripts / fatbuild.sh
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="-Wl,-headerpad_max_install_names -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="-Wl,-headerpad_max_install_names -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="-Wl,-headerpad_max_install_names -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