r830 - in trunk: . code/client code/libs/macosx code/qcommon code/unix

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed Aug 2 00:02:31 EDT 2006


Author: tjw
Date: 2006-08-02 00:01:36 -0400 (Wed, 02 Aug 2006)
New Revision: 830

Added:
   trunk/make-macosx-ub.sh
Modified:
   trunk/Makefile
   trunk/code/client/snd_openal.c
   trunk/code/libs/macosx/libSDL-1.2.0.dylib
   trunk/code/qcommon/files.c
   trunk/code/unix/sdl_glimp.c
   trunk/code/unix/unix_net.c
Log:
bug 2723
* 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 


Modified: trunk/Makefile
===================================================================
--- trunk/Makefile	2006-08-01 17:36:47 UTC (rev 829)
+++ trunk/Makefile	2006-08-02 04:01:36 UTC (rev 830)
@@ -262,45 +262,108 @@
 
 ifeq ($(PLATFORM),darwin)
   CC=gcc
-
-  # !!! FIXME: calling conventions are still broken! See Bugzilla #2519
   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
-  BASE_CFLAGS += -DMACOS_X -fno-common -pipe
+    # OS X 10.2 sdk lacks dlopen() so ded would need libSDL anyway
+    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...
   BASE_CFLAGS += -gfull
 
   ifeq ($(USE_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
     endif
   endif
 
   ifeq ($(USE_CODEC_VORBIS),1)
     BASE_CFLAGS += -DUSE_CODEC_VORBIS=1
+    CLIENT_LDFLAGS += -lvorbisfile -lvorbis -logg
   endif
 
   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 =
+    # 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
 
-  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)
     BASE_CFLAGS += -DNO_VM_COMPILED
   endif
@@ -315,34 +378,6 @@
 
   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
 
 
@@ -1261,6 +1296,12 @@
       $(B)/ded/snapvectora.o \
       $(B)/ded/matha.o
 endif
+ifeq ($(ARCH),x86)
+  Q3DOBJ += \
+      $(B)/ded/ftola.o \
+      $(B)/ded/snapvectora.o \
+      $(B)/ded/matha.o
+endif
 
 ifeq ($(HAVE_VM_COMPILED),true)
   ifeq ($(ARCH),i386)

Modified: trunk/code/client/snd_openal.c
===================================================================
--- trunk/code/client/snd_openal.c	2006-08-01 17:36:47 UTC (rev 829)
+++ trunk/code/client/snd_openal.c	2006-08-02 04:01:36 UTC (rev 830)
@@ -1524,6 +1524,8 @@
 
 #ifdef _WIN32
 #define ALDRIVER_DEFAULT "OpenAL32.dll"
+#elif defined(MACOS_X)
+#define ALDRIVER_DEFAULT "/System/Library/Frameworks/OpenAL.framework/OpenAL"
 #else
 #define ALDRIVER_DEFAULT "libopenal.so.0"
 #endif

Modified: trunk/code/libs/macosx/libSDL-1.2.0.dylib
===================================================================
(Binary files differ)

Modified: trunk/code/qcommon/files.c
===================================================================
--- trunk/code/qcommon/files.c	2006-08-01 17:36:47 UTC (rev 829)
+++ trunk/code/qcommon/files.c	2006-08-02 04:01:36 UTC (rev 830)
@@ -2829,6 +2829,10 @@
 	if (fs_basepath->string[0]) {
 		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
   // NOTE: same filtering below for mods and basegame
 	if (fs_basepath->string[0] && Q_stricmp(fs_homepath->string,fs_basepath->string)) {

Modified: trunk/code/unix/sdl_glimp.c
===================================================================
--- trunk/code/unix/sdl_glimp.c	2006-08-01 17:36:47 UTC (rev 829)
+++ trunk/code/unix/sdl_glimp.c	2006-08-02 04:01:36 UTC (rev 830)
@@ -67,7 +67,12 @@
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
+#if USE_SDL_VIDEO
+#include "SDL.h"
+#include "SDL_loadso.h"
+#else
 #include <dlfcn.h>
+#endif
 
 #include "../renderer/tr_local.h"
 #include "../client/client.h"
@@ -832,7 +837,7 @@
   if ( strstr( glConfig.extensions_string, "GL_EXT_texture_filter_anisotropic" ) )
   {
     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 ) {
         ri.Printf( PRINT_ALL, "...GL_EXT_texture_filter_anisotropic not properly supported!\n" );
         maxAnisotropy = 0;

Modified: trunk/code/unix/unix_net.c
===================================================================
--- trunk/code/unix/unix_net.c	2006-08-01 17:36:47 UTC (rev 829)
+++ trunk/code/unix/unix_net.c	2006-08-02 04:01:36 UTC (rev 830)
@@ -25,6 +25,10 @@
 #include "../qcommon/qcommon.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/time.h>
 #include <netinet/in.h>

Added: trunk/make-macosx-ub.sh
===================================================================
--- trunk/make-macosx-ub.sh	2006-08-01 17:36:47 UTC (rev 829)
+++ trunk/make-macosx-ub.sh	2006-08-02 04:01:36 UTC (rev 830)
@@ -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/
+


Property changes on: trunk/make-macosx-ub.sh
___________________________________________________________________
Name: svn:executable
   + *




More information about the quake3-commits mailing list