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 # Locate Xcode SDK path 8 SDK_PATH=/Developer/SDKs 9 if [ ! -d $SDK_PATH ]; then 10 echo "Couldn't find SDK path" 11 exit 1 12 fi 13 14 if [ -d "$SDK_PATH/MacOSX10.2.8.sdk" ]; then 15 # PowerPC compiler flags (10.2 runtime compatibility) 16 GCC_COMPILE_PPC="gcc-3.3 -arch ppc \ 17 -DMAC_OS_X_VERSION_MIN_REQUIRED=1020 \ 18 -nostdinc \ 19 -F$SDK_PATH/MacOSX10.2.8.sdk/System/Library/Frameworks \ 20 -I$SDK_PATH/MacOSX10.2.8.sdk/usr/include/gcc/darwin/3.3 \ 21 -isystem $SDK_PATH/MacOSX10.2.8.sdk/usr/include" 22 23 GCC_LINK_PPC="\ 24 -L$SDK_PATH/MacOSX10.2.8.sdk/usr/lib/gcc/darwin/3.3 \ 25 -F$SDK_PATH/MacOSX10.2.8.sdk/System/Library/Frameworks \ 26 -Wl,-syslibroot,$SDK_PATH/MacOSX10.2.8.sdk" 27 28 else # 10.2 or 10.3 SDK 29 # PowerPC compiler flags (10.3 runtime compatibility) 30 GCC_COMPILE_PPC="gcc-4.0 -arch ppc -mmacosx-version-min=10.3 \ 31 -DMAC_OS_X_VERSION_MIN_REQUIRED=1030 \ 32 -nostdinc \ 33 -F$SDK_PATH/MacOSX10.3.9.sdk/System/Library/Frameworks \ 34 -I$SDK_PATH/MacOSX10.3.9.sdk/usr/lib/gcc/powerpc-apple-darwin9/4.0.1/include \ 35 -isystem $SDK_PATH/MacOSX10.3.9.sdk/usr/include" 36 37 GCC_LINK_PPC="\ 38 -L$SDK_PATH/MacOSX10.3.9.sdk/usr/lib/gcc/powerpc-apple-darwin9/4.0.1 \ 39 -F$SDK_PATH/MacOSX10.3.9.sdk/System/Library/Frameworks \ 40 -Wl,-syslibroot,$SDK_PATH/MacOSX10.3.9.sdk" 41 42 fi # 10.2 or 10.3 SDK 43 44 # Intel compiler flags (10.4 runtime compatibility) 45 GCC_COMPILE_X86="gcc-4.0 -arch i386 -mmacosx-version-min=10.4 \ 46 -DMAC_OS_X_VERSION_MIN_REQUIRED=1040 \ 47 -nostdinc \ 48 -F$SDK_PATH/MacOSX10.4u.sdk/System/Library/Frameworks \ 49 -I$SDK_PATH/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin9/4.0.1/include \ 50 -isystem $SDK_PATH/MacOSX10.4u.sdk/usr/include" 51 52 GCC_LINK_X86="\ 53 -L$SDK_PATH/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin9/4.0.1 \ 54 -Wl,-syslibroot,$SDK_PATH/MacOSX10.4u.sdk" 55 56 # Output both PowerPC and Intel object files 57 args="$*" 58 compile=yes 59 link=yes 60 while test x$1 != x; do 61 case $1 in 62 --version) exec gcc $1;; 63 -v) exec gcc $1;; 64 -V) exec gcc $1;; 65 -print-prog-name=*) exec gcc $1;; 66 -print-search-dirs) exec gcc $1;; 67 -E) GCC_COMPILE_PPC="$GCC_COMPILE_PPC -E" 68 GCC_COMPILE_X86="$GCC_COMPILE_X86 -E" 69 compile=no; link=no;; 70 -c) link=no;; 71 -o) output=$2;; 72 *.c|*.cc|*.cpp|*.S) source=$1;; 73 esac 74 shift 75 done 76 if test x$link = xyes; then 77 GCC_COMPILE_PPC="$GCC_COMPILE_PPC $GCC_LINK_PPC" 78 GCC_COMPILE_X86="$GCC_COMPILE_X86 $GCC_LINK_X86" 79 fi 80 if test x"$output" = x; then 81 if test x$link = xyes; then 82 output=a.out 83 elif test x$compile = xyes; then 84 output=`echo $source | sed -e 's|.*/||' -e 's|\(.*\)\.[^\.]*|\1|'`.o 85 fi 86 fi 87 88 if test x"$output" != x; then 89 dir=ppc/`dirname $output` 90 if test -d $dir; then 91 : 92 else 93 mkdir -p $dir 94 fi 95 fi 96 set -- $args 97 while test x$1 != x; do 98 if test -f "ppc/$1" && test "$1" != "$output"; then 99 ppc_args="$ppc_args ppc/$1" 100 else 101 ppc_args="$ppc_args $1" 102 fi 103 shift 104 done 105 $GCC_COMPILE_PPC $ppc_args || exit $? 106 if test x"$output" != x; then 107 cp $output ppc/$output 108 fi 109 110 if test x"$output" != x; then 111 dir=x86/`dirname $output` 112 if test -d $dir; then 113 : 114 else 115 mkdir -p $dir 116 fi 117 fi 118 set -- $args 119 while test x$1 != x; do 120 if test -f "x86/$1" && test "$1" != "$output"; then 121 x86_args="$x86_args x86/$1" 122 else 123 x86_args="$x86_args $1" 124 fi 125 shift 126 done 127 $GCC_COMPILE_X86 $x86_args || exit $? 128 if test x"$output" != x; then 129 cp $output x86/$output 130 fi 131 132 if test x"$output" != x; then 133 lipo -create -o $output ppc/$output x86/$output 134 fi 135