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 8SDK_PATH=/Developer/SDKs 9if [ ! -d $SDK_PATH ]; then 10 echo "Couldn't find SDK path" 11 exit 1 12fi 13 14if [ -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 28else # 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 42fi # 10.2 or 10.3 SDK 43 44# Intel compiler flags (10.4 runtime compatibility) 45GCC_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 52GCC_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 57args="$*" 58compile=yes 59link=yes 60while 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 75done 76if 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" 79fi 80if 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 86fi 87 88if 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 95fi 96set -- $args 97while 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 104done 105$GCC_COMPILE_PPC $ppc_args || exit $? 106if test x"$output" != x; then 107 cp $output ppc/$output 108fi 109 110if 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 117fi 118set -- $args 119while 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 126done 127$GCC_COMPILE_X86 $x86_args || exit $? 128if test x"$output" != x; then 129 cp $output x86/$output 130fi 131 132if test x"$output" != x; then 133 lipo -create -o $output ppc/$output x86/$output 134fi 135