1#!/bin/sh 2# 3# Build Universal binaries on Mac OS X, thanks Ryan! 4# 5# Usage: ./configure CC="sh gcc-fat.sh" && make && rm -rf ppc x86 6 7# PowerPC compiler flags (10.2 runtime compatibility) 8GCC_COMPILE_PPC="gcc-3.3 -arch ppc \ 9-DMAC_OS_X_VERSION_MIN_REQUIRED=1020 \ 10-nostdinc \ 11-F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks \ 12-I/Developer/SDKs/MacOSX10.2.8.sdk/usr/include/gcc/darwin/3.3 \ 13-isystem /Developer/SDKs/MacOSX10.2.8.sdk/usr/include" 14 15GCC_LINK_PPC="\ 16-L/Developer/SDKs/MacOSX10.2.8.sdk/usr/lib/gcc/darwin/3.3 \ 17-F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks \ 18-Wl,-syslibroot,/Developer/SDKs/MacOSX10.2.8.sdk" 19 20# Intel compiler flags (10.4 runtime compatibility) 21GCC_COMPILE_X86="gcc-4.0 -arch i386 -mmacosx-version-min=10.4 \ 22-DMAC_OS_X_VERSION_MIN_REQUIRED=1040 \ 23-nostdinc \ 24-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks \ 25-I/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.1/include \ 26-isystem /Developer/SDKs/MacOSX10.4u.sdk/usr/include" 27 28GCC_LINK_X86="\ 29-L/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.0 \ 30-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk" 31 32# Output both PowerPC and Intel object files 33args="$*" 34compile=yes 35link=yes 36while test x$1 != x; do 37 case $1 in 38 --version) exec gcc $1;; 39 -v) exec gcc $1;; 40 -V) exec gcc $1;; 41 -print-prog-name=*) exec gcc $1;; 42 -print-search-dirs) exec gcc $1;; 43 -E) GCC_COMPILE_PPC="$GCC_COMPILE_PPC -E" 44 GCC_COMPILE_X86="$GCC_COMPILE_X86 -E" 45 compile=no; link=no;; 46 -c) link=no;; 47 -o) output=$2;; 48 *.c|*.cc|*.cpp|*.S) source=$1;; 49 esac 50 shift 51done 52if test x$link = xyes; then 53 GCC_COMPILE_PPC="$GCC_COMPILE_PPC $GCC_LINK_PPC" 54 GCC_COMPILE_X86="$GCC_COMPILE_X86 $GCC_LINK_X86" 55fi 56if test x"$output" = x; then 57 if test x$link = xyes; then 58 output=a.out 59 elif test x$compile = xyes; then 60 output=`echo $source | sed -e 's|.*/||' -e 's|\(.*\)\.[^\.]*|\1|'`.o 61 fi 62fi 63 64if test x"$output" != x; then 65 dir=ppc/`dirname $output` 66 if test -d $dir; then 67 : 68 else 69 mkdir -p $dir 70 fi 71fi 72set -- $args 73while test x$1 != x; do 74 if test -f "ppc/$1" && test "$1" != "$output"; then 75 ppc_args="$ppc_args ppc/$1" 76 else 77 ppc_args="$ppc_args $1" 78 fi 79 shift 80done 81$GCC_COMPILE_PPC $ppc_args || exit $? 82if test x"$output" != x; then 83 cp $output ppc/$output 84fi 85 86if test x"$output" != x; then 87 dir=x86/`dirname $output` 88 if test -d $dir; then 89 : 90 else 91 mkdir -p $dir 92 fi 93fi 94set -- $args 95while test x$1 != x; do 96 if test -f "x86/$1" && test "$1" != "$output"; then 97 x86_args="$x86_args x86/$1" 98 else 99 x86_args="$x86_args $1" 100 fi 101 shift 102done 103$GCC_COMPILE_X86 $x86_args || exit $? 104if test x"$output" != x; then 105 cp $output x86/$output 106fi 107 108if test x"$output" != x; then 109 lipo -create -o $output ppc/$output x86/$output 110fi 111