* adds a shell script ./make-macosx-ub.sh that builds Mac OS X Universal Binary
* fixes Mac OS X x86 VM crashes (-mstackrealign)
* adds current working directory to the search path on Mac OS X to make
  working with .app bundles easier
* various tweaks to make ioquake3 build against the 10.2 SDK 
* changed default OpenAL .dylib location to the path of the one included with
  the Framework bundled in 10.4 (for USE_OPENAL_DLOPEN)
* updated to a Universal libSDL-1.2.0.dylib
This commit is contained in:
Tony J. White = 2006-08-02 04:01:36 +00:00
parent 7cb5edc9ed
commit 9a6fad9cf1
7 changed files with 165 additions and 47 deletions

133
Makefile
View file

@ -262,44 +262,107 @@ else # ifeq Linux
ifeq ($(PLATFORM),darwin) ifeq ($(PLATFORM),darwin)
CC=gcc CC=gcc
# !!! FIXME: calling conventions are still broken! See Bugzilla #2519
VM_PPC=vm_ppc_new VM_PPC=vm_ppc_new
HAVE_VM_COMPILED=true
BASE_CFLAGS=
CLIENT_LDFLAGS=
LDFLAGS=
OPTIMIZE=
ifeq ($(BUILD_MACOSX_UB),ppc)
CC=gcc-3.3
BASE_CFLAGS += -arch ppc -DSMP \
-DMAC_OS_X_VERSION_MIN_REQUIRED=1020 -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
# when using the 10.2 SDK we are not allowed the two-level namespace so
# in order to get the OpenAL dlopen() stuff to work without major
# modifications, the controversial -m linker flag must be used. this
# throws a ton of multiply defined errors which cannot be suppressed.
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
ARCH=ppc
BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes # OS X 10.2 sdk lacks dlopen() so ded would need libSDL anyway
BASE_CFLAGS += -DMACOS_X -fno-common -pipe BUILD_SERVER=0
# because of a problem with linking on 10.2 this will generate multiply
# defined symbol errors. The errors can be turned into warnings with
# the -m linker flag, but you can't shut up the warnings
USE_OPENAL_DLOPEN=1
else
ifeq ($(BUILD_MACOSX_UB),x86)
CC=gcc-4.0
BASE_CFLAGS += -arch i386 -DSMP \
-isysroot /Developer/SDKs/MacOSX10.4u.sdk \
-mmacosx-version-min=10.4 \
-DMAC_OS_X_VERSION_MIN_REQUIRED=1040 -nostdinc \
-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks \
-I/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.1/include \
-isystem /Developer/SDKs/MacOSX10.4u.sdk/usr/include
LDFLAGS = -mmacosx-version-min=10.4 \
-L/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.1
ARCH=x86
BUILD_SERVER=0
else
# for whatever reason using the headers in the MacOSX SDKs tend to throw
# errors even though they are identical to the system ones which don't
# therefore we shut up warning flags when running the universal build
# script as much as possible.
BASE_CFLAGS += -Wall -Wimplicit -Wstrict-prototypes
endif
endif
ifeq ($(ARCH),ppc)
OPTIMIZE += -faltivec
# Carbon is required on PPC only to make a call to MakeDataExecutable
# in the PPC vm (should be a better non-Carbon way).
LDFLAGS += -framework Carbon
endif
ifeq ($(ARCH),x86)
OPTIMIZE += -msse2
# x86 vm will crash without -mstackrealign since MMX instructions will be
# used no matter what and they corrupt the frame pointer in VM calls
BASE_CFLAGS += -mstackrealign
endif
BASE_CFLAGS += -fno-strict-aliasing -DMACOS_X -fno-common -pipe
# Always include debug symbols...you can strip the binary later... # Always include debug symbols...you can strip the binary later...
BASE_CFLAGS += -gfull BASE_CFLAGS += -gfull
ifeq ($(USE_OPENAL),1) ifeq ($(USE_OPENAL),1)
BASE_CFLAGS += -DUSE_OPENAL=1 BASE_CFLAGS += -DUSE_OPENAL=1
ifeq ($(USE_OPENAL_DLOPEN),1) ifneq ($(USE_OPENAL_DLOPEN),1)
CLIENT_LDFLAGS += -framework OpenAL
else
BASE_CFLAGS += -DUSE_OPENAL_DLOPEN=1 BASE_CFLAGS += -DUSE_OPENAL_DLOPEN=1
endif endif
endif endif
ifeq ($(USE_CODEC_VORBIS),1) ifeq ($(USE_CODEC_VORBIS),1)
BASE_CFLAGS += -DUSE_CODEC_VORBIS=1 BASE_CFLAGS += -DUSE_CODEC_VORBIS=1
CLIENT_LDFLAGS += -lvorbisfile -lvorbis -logg
endif endif
ifeq ($(USE_SDL),1) ifeq ($(USE_SDL),1)
BASE_CFLAGS += -DUSE_SDL_VIDEO=1 -DUSE_SDL_SOUND=1 -D_THREAD_SAFE=1 -I$(SDLHDIR)/include BASE_CFLAGS += -DUSE_SDL_VIDEO=1 -DUSE_SDL_SOUND=1 -D_THREAD_SAFE=1 \
-I$(SDLHDIR)/include
GL_CFLAGS = GL_CFLAGS =
# We copy sdlmain before ranlib'ing it so that subversion doesn't think
# the file has been modified by each build.
LIBSDLMAIN=$(B)/libSDLmain.a
LIBSDLMAINSRC=$(LIBSDIR)/macosx/libSDLmain.a
CLIENT_LDFLAGS += -framework Cocoa -framework OpenGL \
$(LIBSDIR)/macosx/libSDL-1.2.0.dylib
else
# !!! FIXME: frameworks: OpenGL, Carbon, etc...
#CLIENT_LDFLAGS += -L/usr/X11R6/$(LIB) -lX11 -lXext -lXxf86dga -lXxf86vm
endif endif
OPTIMIZE = -O3 -ffast-math -falign-loops=16 OPTIMIZE += -O3 -ffast-math -falign-loops=16
ifeq ($(ARCH),ppc)
BASE_CFLAGS += -faltivec
ifneq ($(VM_PPC),)
HAVE_VM_COMPILED=true
endif
endif
ifeq ($(ARCH),i386)
# !!! FIXME: x86-specific flags here...
endif
ifneq ($(HAVE_VM_COMPILED),true) ifneq ($(HAVE_VM_COMPILED),true)
BASE_CFLAGS += -DNO_VM_COMPILED BASE_CFLAGS += -DNO_VM_COMPILED
@ -315,34 +378,6 @@ ifeq ($(PLATFORM),darwin)
NOTSHLIBCFLAGS=-mdynamic-no-pic NOTSHLIBCFLAGS=-mdynamic-no-pic
#THREAD_LDFLAGS=-lpthread
#LDFLAGS=-ldl -lm
LDFLAGS += -framework Carbon
ifeq ($(USE_SDL),1)
# We copy sdlmain before ranlib'ing it so that subversion doesn't think
# the file has been modified by each build.
LIBSDLMAIN=$(B)/libSDLmain.a
LIBSDLMAINSRC=$(LIBSDIR)/macosx/libSDLmain.a
CLIENT_LDFLAGS=-framework Cocoa -framework OpenGL $(LIBSDIR)/macosx/libSDL-1.2.0.dylib
else
# !!! FIXME: frameworks: OpenGL, Carbon, etc...
#CLIENT_LDFLAGS=-L/usr/X11R6/$(LIB) -lX11 -lXext -lXxf86dga -lXxf86vm
endif
# -framework OpenAL requires 10.4 or later...for builds shipping to the
# public, you'll want to use USE_OPENAL_DLOPEN and ship your own OpenAL
# library (http://openal.org/ or http://icculus.org/al_osx/)
ifeq ($(USE_OPENAL),1)
ifneq ($(USE_OPENAL_DLOPEN),1)
CLIENT_LDFLAGS += -framework OpenAL
endif
endif
ifeq ($(USE_CODEC_VORBIS),1)
CLIENT_LDFLAGS += -lvorbisfile -lvorbis -logg
endif
else # ifeq darwin else # ifeq darwin
@ -1261,6 +1296,12 @@ ifeq ($(ARCH),i386)
$(B)/ded/snapvectora.o \ $(B)/ded/snapvectora.o \
$(B)/ded/matha.o $(B)/ded/matha.o
endif endif
ifeq ($(ARCH),x86)
Q3DOBJ += \
$(B)/ded/ftola.o \
$(B)/ded/snapvectora.o \
$(B)/ded/matha.o
endif
ifeq ($(HAVE_VM_COMPILED),true) ifeq ($(HAVE_VM_COMPILED),true)
ifeq ($(ARCH),i386) ifeq ($(ARCH),i386)

View file

@ -1524,6 +1524,8 @@ static ALCcontext *alContext;
#ifdef _WIN32 #ifdef _WIN32
#define ALDRIVER_DEFAULT "OpenAL32.dll" #define ALDRIVER_DEFAULT "OpenAL32.dll"
#elif defined(MACOS_X)
#define ALDRIVER_DEFAULT "/System/Library/Frameworks/OpenAL.framework/OpenAL"
#else #else
#define ALDRIVER_DEFAULT "libopenal.so.0" #define ALDRIVER_DEFAULT "libopenal.so.0"
#endif #endif

Binary file not shown.

View file

@ -2829,6 +2829,10 @@ static void FS_Startup( const char *gameName ) {
if (fs_basepath->string[0]) { if (fs_basepath->string[0]) {
FS_AddGameDirectory( fs_basepath->string, gameName ); FS_AddGameDirectory( fs_basepath->string, gameName );
} }
#ifdef MACOS_X
// allow .app bundles to be placed along side base dir
FS_AddGameDirectory( ".", gameName );
#endif
// fs_homepath is somewhat particular to *nix systems, only add if relevant // fs_homepath is somewhat particular to *nix systems, only add if relevant
// NOTE: same filtering below for mods and basegame // NOTE: same filtering below for mods and basegame
if (fs_basepath->string[0] && Q_stricmp(fs_homepath->string,fs_basepath->string)) { if (fs_basepath->string[0] && Q_stricmp(fs_homepath->string,fs_basepath->string)) {

View file

@ -67,7 +67,12 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#if USE_SDL_VIDEO
#include "SDL.h"
#include "SDL_loadso.h"
#else
#include <dlfcn.h> #include <dlfcn.h>
#endif
#include "../renderer/tr_local.h" #include "../renderer/tr_local.h"
#include "../client/client.h" #include "../client/client.h"
@ -832,7 +837,7 @@ static void GLW_InitExtensions( void )
if ( strstr( glConfig.extensions_string, "GL_EXT_texture_filter_anisotropic" ) ) if ( strstr( glConfig.extensions_string, "GL_EXT_texture_filter_anisotropic" ) )
{ {
if ( r_ext_texture_filter_anisotropic->integer ) { if ( r_ext_texture_filter_anisotropic->integer ) {
qglGetIntegerv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxAnisotropy ); qglGetIntegerv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, (GLint *)&maxAnisotropy );
if ( maxAnisotropy <= 0 ) { if ( maxAnisotropy <= 0 ) {
ri.Printf( PRINT_ALL, "...GL_EXT_texture_filter_anisotropic not properly supported!\n" ); ri.Printf( PRINT_ALL, "...GL_EXT_texture_filter_anisotropic not properly supported!\n" );
maxAnisotropy = 0; maxAnisotropy = 0;

View file

@ -25,6 +25,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "../qcommon/qcommon.h" #include "../qcommon/qcommon.h"
#include <unistd.h> #include <unistd.h>
#if MAC_OS_X_VERSION_MIN_REQUIRED == 1020
// needed for socket_t on OSX 10.2
#define _BSD_SOCKLEN_T_
#endif
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/time.h> #include <sys/time.h>
#include <netinet/in.h> #include <netinet/in.h>

62
make-macosx-ub.sh Executable file
View file

@ -0,0 +1,62 @@
#!/bin/sh
DESTDIR=build/release-darwin-ub
BASEDIR=baseq3
MPACKDIR=missionpack
BIN_OBJ="
build/release-darwin-ppc/ioquake3.ppc
build/release-darwin-x86/ioquake3.x86
"
BASE_OBJ="
build/release-darwin-ppc/$BASEDIR/cgameppc.dylib
build/release-darwin-x86/$BASEDIR/cgamex86.dylib
build/release-darwin-ppc/$BASEDIR/uippc.dylib
build/release-darwin-x86/$BASEDIR/uix86.dylib
build/release-darwin-ppc/$BASEDIR/qagameppc.dylib
build/release-darwin-x86/$BASEDIR/qagamex86.dylib
"
MPACK_OBJ="
build/release-darwin-ppc/$MPACKDIR/cgameppc.dylib
build/release-darwin-x86/$MPACKDIR/cgamex86.dylib
build/release-darwin-ppc/$MPACKDIR/uippc.dylib
build/release-darwin-x86/$MPACKDIR/uix86.dylib
build/release-darwin-ppc/$MPACKDIR/qagameppc.dylib
build/release-darwin-x86/$MPACKDIR/qagamex86.dylib
"
if [ ! -f Makefile ]; then
echo "This script must be run from the ioquake3 build directory";
fi
if [ ! -d /Developer/SDKs/MacOSX10.2.8.sdk ]; then
echo "
/Developer/SDKs/MacOSX10.2.8.sdk/ is missing.
The installer for this SDK is included with XCode 2.2 or newer"
exit 1;
fi
if [ ! -d /Developer/SDKs/MacOSX10.4u.sdk ]; then
echo "
/Developer/SDKs/MacOSX10.4u.sdk/ is missing.
The installer for this SDK is included with XCode 2.2 or newer"
exit 1;
fi
(BUILD_MACOSX_UB=ppc make && BUILD_MACOSX_UB=x86 make) || exit 1;
if [ ! -d $DESTDIR ]; then
mkdir $DESTDIR || exit 1;
fi
if [ ! -d $DESTDIR/$BASEDIR ]; then
mkdir $DESTDIR/$BASEDIR || exit 1;
fi
if [ ! -d $DESTDIR/$MPACKDIR ]; then
mkdir $DESTDIR/$MPACKDIR || exit 1;
fi
echo "Installing Universal Binaries in $DESTDIR"
lipo -create -o $DESTDIR/ioquake3.ub $BIN_OBJ
cp $BASE_OBJ $DESTDIR/$BASEDIR/
cp $MPACK_OBJ $DESTDIR/$MPACKDIR/
cp code/libs/macosx/*.dylib $DESTDIR/