From 1fe6df05a865cc0d1f713f95e3792882c99943b9 Mon Sep 17 00:00:00 2001 From: tjw Date: Thu, 3 Jan 2008 06:19:11 +0000 Subject: * Update the Mac OS X build process (again) * Allow BUILD_* env vars to be passed to make to build only specific components git-svn-id: svn://svn.icculus.org/quake3/trunk@1246 edf5b092-35ff-0310-97b2-ce42778d08ea --- make-macosx-ub.sh | 200 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 132 insertions(+), 68 deletions(-) (limited to 'make-macosx-ub.sh') diff --git a/make-macosx-ub.sh b/make-macosx-ub.sh index f580f0f..1e64f13 100755 --- a/make-macosx-ub.sh +++ b/make-macosx-ub.sh @@ -11,11 +11,11 @@ Q3_VERSION=`grep "\#define Q3_VERSION" code/qcommon/q_shared.h | \ sed -e 's/.*".* \([^ ]*\)"/\1/'`; BIN_OBJ=" - build/release-darwin-ppc/ioquake3.ppc - build/release-darwin-i386/ioquake3.i386 + build/release-darwin-ppc/ioquake3-smp.ppc + build/release-darwin-i386/ioquake3-smp.i386 " BIN_DEDOBJ=" - build/release-darwin-ppc/ioq3ded.ppc + build/release-darwin-ub/ioq3ded.ppc build/release-darwin-i386/ioq3ded.i386 " BASE_OBJ=" @@ -38,78 +38,141 @@ if [ ! -f Makefile ]; then echo "This script must be run from the ioquake3 build directory"; fi +TIGERHOST=0 +if uname -r | grep ^8. > /dev/null; then + TIGERHOST=1 +fi + # we want to use the oldest available SDK for max compatiblity -unset PPC_SDK_DIR -unset X86_SDK_DIR -unset PPC_SDK_INC -unset X86_SDK_INC -unset PPC_SDK_LIB -unset X86_SDK_LIB -unset PPC_SDK_OPENAL_DLOPEN -for availsdks in $(find /Developer/SDKs -type d -maxdepth 1 -mindepth 1 -name "MacOSX*" -exec basename {} \; | sort -r) -do - case "$availsdks" in - 'MacOSX10.5.sdk') - PPC_SDK_DIR=/Developer/SDKs/MacOSX10.5.sdk - X86_SDK_DIR=/Developer/SDKs/MacOSX10.5.sdk - PPC_SDK_INC=usr/lib/gcc/powerpc-apple-darwin9/4.0.1/include - X86_SDK_INC=usr/lib/gcc/i686-apple-darwin9/4.0.1/include - PPC_SDK_LIB=usr/lib/gcc/powerpc-apple-darwin9/4.0.1 - X86_SDK_LIB=usr/lib/gcc/i686-apple-darwin9/4.0.1 - PPC_SDK_OPENAL_DLOPEN=0 - ;; - 'MacOSX10.4u.sdk') - PPC_SDK_DIR=/Developer/SDKs/MacOSX10.4u.sdk - X86_SDK_DIR=/Developer/SDKs/MacOSX10.4u.sdk - PPC_SDK_INC=usr/lib/gcc/powerpc-apple-darwin9/4.0.1/include - X86_SDK_INC=usr/lib/gcc/i686-apple-darwin9/4.0.1/include - PPC_SDK_LIB=usr/lib/gcc/powerpc-apple-darwin9/4.0.1 - X86_SDK_LIB=usr/lib/gcc/i686-apple-darwin9/4.0.1 - PPC_SDK_OPENAL_DLOPEN=0 - ;; - 'MacOSX10.3.9.sdk') - PPC_SDK_DIR=/Developer/SDKs/MacOSX10.3.9.sdk - PPC_SDK_INC=usr/lib/gcc/powerpc-apple-darwin7/4.0.1/include - PPC_SDK_LIB=usr/lib/gcc/powerpc-apple-darwin7/4.0.1 - PPC_SDK_OPENAL_DLOPEN=1 - ;; - 'MacOSX10.2.8.sdk') - # no longer supported due to lack of dlfcn.h - #PPC_SDK_DIR=/Developer/SDKs/MacOSX10.2.8.sdk - #PPC_SDK_INC=usr/include/gcc/darwin/3.3 - #PPC_SDK_LIB=usr/lib/gcc/darwin/3.3 - #PPC_SDK_OPENAL_DLOPEN=1 - ;; - *) - echo "WARNING: detected unknown MacOSX SDK ($availsdks)" - esac -done - -if [ -z $PPC_SDK_DIR ] || [ -z $X86_SDK_DIR ]; then - echo "Error detecting compatible Mac OS X SDK." - exit 1; +unset PPC_CLIENT_SDK +PPC_CLIENT_CC=gcc +unset PPC_CLIENT_CFLAGS +unset PPC_CLIENT_LDFLAGS +unset PPC_SERVER_SDK +unset PPC_SERVER_CFLAGS +unset PPC_SERVER_LDFLAGS +unset X86_SDK +unset X86_CFLAGS +unset X86_LDFLAGS +if [ -d /Developer/SDKs/MacOSX10.5.sdk ]; then + PPC_CLIENT_SDK=/Developer/SDKs/MacOSX10.5.sdk + PPC_CLIENT_CC=gcc-4.0 + PPC_CLIENT_CFLAGS="-arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk \ + -DMAC_OS_X_VERSION_MIN_REQUIRED=1050" + PPC_CLIENT_LDFLAGS="-arch ppc \ + -isysroot /Developer/SDKs/MacOSX10.5.sdk \ + -mmacosx-version-min=10.5" + PPC_SERVER_SDK=/Developer/SDKs/MacOSX10.5.sdk + PPC_SERVER_CFLAGS=$PPC_CLIENT_CFLAGS + PPC_SERVER_LDFLAGS=$PPC_CLIENT_LDFLAGS + + X86_SDK=/Developer/SDKs/MacOSX10.5.sdk + X86_CFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk \ + -DMAC_OS_X_VERSION_MIN_REQUIRED=1050" + X86_LDFLAGS="-arch i386 \ + -isysroot /Developer/SDKs/MacOSX10.5.sdk \ + -mmacosx-version-min=10.5" + X86_ENV="CFLAGS=$CFLAGS LDFLAGS=$LDFLAGS" fi -if [ $PPC_SDK_DIR != "/Developer/SDKs/MacOSX10.3.9.sdk" ]; then - echo "WARNING: missing MacOS10.3.9.sdk. Resulting binary may not be compatible with Mac OS X 10.3" - sleep 1 +if [ -d /Developer/SDKs/MacOSX10.4u.sdk ]; then + PPC_CLIENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk + PPC_CLIENT_CC=gcc-4.0 + PPC_CLIENT_CFLAGS="-arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk \ + -DMAC_OS_X_VERSION_MIN_REQUIRED=1040" + PPC_CLIENT_LDFLAGS="-arch ppc \ + -isysroot /Developer/SDKs/MacOSX10.4u.sdk \ + -mmacosx-version-min=10.4" + PPC_SERVER_SDK=/Developer/SDKs/MacOSX10.4u.sdk + PPC_SERVER_CFLAGS=$PPC_CLIENT_CFLAGS + PPC_SERVER_LDFLAGS=$PPC_CLIENT_LDFLAGS + + X86_SDK=/Developer/SDKs/MacOSX10.4u.sdk + X86_CFLAGS="-arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk \ + -DMAC_OS_X_VERSION_MIN_REQUIRED=1040" + LDFLAGS="-arch i386 \ + -isysroot /Developer/SDKs/MacOSX10.4u.sdk \ + -mmacosx-version-min=10.4" + X86_ENV="CFLAGS=$CFLAGS LDFLAGS=$LDFLAGS" fi -if [ $X86_SDK_DIR != "/Developer/SDKs/MacOSX10.4u.sdk" ]; then - echo "WARNING: missing MacOS10.4u.sdk. Resulting binary may not be compatible with Mac OS X 10.4" - sleep 1 + +if [ -d /Developer/SDKs/MacOSX10.3.9.sdk ] && [ $TIGERHOST ]; then + PPC_CLIENT_SDK=/Developer/SDKs/MacOSX10.3.9.sdk + PPC_CLIENT_CC=gcc-4.0 + PPC_CLIENT_CFLAGS="-arch ppc -isysroot /Developer/SDKs/MacOSX10.3.9.sdk \ + -DMAC_OS_X_VERSION_MIN_REQUIRED=1030" + PPC_CLIENT_LDFLAGS="-arch ppc \ + -isysroot /Developer/SDKs/MacOSX10.3.9.sdk \ + -mmacosx-version-min=10.3" + PPC_SERVER_SDK=/Developer/SDKs/MacOSX10.3.9.sdk + PPC_SERVER_CFLAGS=$PPC_CLIENT_CFLAGS + PPC_SERVER_LDFLAGS=$PPC_CLIENT_LDFLAGS fi -echo "Using $PPC_SDK_DIR for PowerPC" -echo "Using $X86_SDK_DIR for Intel" +if [ -d /Developer/SDKs/MacOSX10.2.8.sdk ] && [ -x /usr/bin/gcc-3.3 ] && [ $TIGERHOST ]; then + PPC_CLIENT_SDK=/Developer/SDKs/MacOSX10.2.8.sdk + PPC_CLIENT_CC=gcc-3.3 + PPC_CLIENT_CFLAGS="-arch ppc \ + -nostdinc \ + -F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks \ + -I/Developer/SDKs/MacOSX10.2.8.sdk/usr/include/gcc/darwin/3.3 \ + -isystem /Developer/SDKs/MacOSX10.2.8.sdk/usr/include \ + -DMAC_OS_X_VERSION_MIN_REQUIRED=1020" + PPC_CLIENT_LDFLAGS="-arch ppc \ + -L/Developer/SDKs/MacOSX10.2.8.sdk/usr/lib/gcc/darwin/3.3 \ + -F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks \ + -Wl,-syslibroot,/Developer/SDKs/MacOSX10.2.8.sdk,-m" +fi + +echo "Building PPC Dedicated Server against \"$PPC_SERVER_SDK\"" +echo "Building PPC Client against \"$PPC_CLIENT_SDK\"" +echo "Building X86 Client/Dedicated Server against \"$X86_SDK\"" +if [ "$PPC_CLIENT_SDK" != "/Developer/SDKs/MacOSX10.2.8.sdk" ] || \ + [ "$PPC_SERVER_SDK" != "/Developer/SDKs/MacOSX10.3.9.sdk" ] || \ + [ "$X86_SDK" != "/Developer/SDKs/MacOSX10.4u.sdk" ]; then + echo "\ +WARNING: in order to build a binary with maximum compatibility you must + build on Mac OS X 10.4 using Xcode 2.3 or 2.5 and have the + MacOSX10.2.8, MacOSX10.3.9, and MacOSX10.4u SDKs installed + from the Xcode install disk Packages folder." +fi -(USE_OPENAL_DLOPEN=$PPC_SDK_OPENAL_DLOPEN \ - MACOSX_SDK_DIR=$PPC_SDK_DIR \ - MACOSX_SDK_INC=$PPC_SDK_INC \ - MACOSX_SDK_LIB=$PPC_SDK_LIB BUILD_MACOSX_UB=ppc make \ -&& - MACOSX_SDK_DIR=$X86_SDK_DIR \ - MACOSX_SDK_INC=$X86_SDK_INC \ - MACOSX_SDK_LIB=$X86_SDK_LIB BUILD_MACOSX_UB=i386 make ) || exit 1 +if [ -z $PPC_CLIENT_SDK ] || [ -z $PPC_SERVER_SDK ] || [ -z $X86_SDK ]; then + echo "\ +ERROR: This script is for building a Universal Binary. You cannot build + for a different architecture unless you have the proper Mac OS X SDKs + installed. If you just want to to compile for your own system run + 'make' instead of this script." + exit 1 +fi +sleep 3 + +if [ ! -d $DESTDIR ]; then + mkdir -p $DESTDIR +fi + +# ppc dedicated server +echo "Building Dedicated Server using $PPC_SERVER_SDK" +sleep 2 +if [ -d build/release-darwin-ppc ]; then + rm -r build/release-darwin-ppc +fi +(ARCH=ppc BUILD_CLIENT_SMP=0 BUILD_CLIENT=0 BUILD_GAME_VM=0 BUILD_GAME_SO=0 \ + CFLAGS=$PPC_SERVER_CFLAGS LDFLAGS=$PPC_SERVER_LDFLAGS make) || exit 1; +cp build/release-darwin-ppc/ioq3ded.ppc $DESTDIR + +# ppc client +if [ -d build/release-darwin-ppc ]; then + rm -r build/release-darwin-ppc +fi +(ARCH=ppc USE_OPENAL_DLOPEN=1 BUILD_SERVER=0 CC=$PPC_CLIENT_CC \ + CFLAGS=$PPC_CLIENT_CFLAGS LDFLAGS=$PPC_CLIENT_LDFLAGS make) || exit 1; + +# intel client and server +if [ -d build/release-darwin-i386 ]; then + rm -r build/release-darwin-i386 +fi +(ARCH=i386 CFLAGS=$X86_CFLAGS LDFLAGS=$X86_LDFLAGS make) || exit 1; echo "Creating .app bundle $DESTDIR/$APPBUNDLE" if [ ! -d $DESTDIR/$APPBUNDLE/Contents/MacOS/$BASEDIR ]; then @@ -162,6 +225,7 @@ echo " lipo -create -o $DESTDIR/$APPBUNDLE/Contents/MacOS/$BINARY $BIN_OBJ lipo -create -o $DESTDIR/$APPBUNDLE/Contents/MacOS/$DEDBIN $BIN_DEDOBJ +rm $DESTDIR/ioq3ded.ppc cp $BASE_OBJ $DESTDIR/$APPBUNDLE/Contents/MacOS/$BASEDIR/ cp $MPACK_OBJ $DESTDIR/$APPBUNDLE/Contents/MacOS/$MPACKDIR/ cp code/libs/macosx/*.dylib $DESTDIR/$APPBUNDLE/Contents/MacOS/ -- cgit v1.2.3