diff --git a/polymer/eduke32/Makefile b/polymer/eduke32/Makefile index 098d04ffb..989e2d10d 100644 --- a/polymer/eduke32/Makefile +++ b/polymer/eduke32/Makefile @@ -34,8 +34,7 @@ else endif OURCFLAGS=$(BASECFLAGS) \ - -I$(INC) -I$(EINC) -I$(SRC)/jmact -I$(JAUDIOLIBDIR)/include -I$(ENETDIR)/include \ - $(ARCH) + -I$(INC) -I$(EINC) -I$(SRC)/jmact -I$(JAUDIOLIBDIR)/include -I$(ENETDIR)/include OURCXXFLAGS=$(BASECXXFLAGS) NASMFLAGS=$(BASEASFLAGS) @@ -62,7 +61,9 @@ else LIBS+= -pthread endif ifneq (0,$(PROFILER)) - LIBS+= -lprofiler + ifneq ($(PLATFORM),DARWIN) + LIBS+= -lprofiler + endif debug+= -pg endif OBJ=obj diff --git a/polymer/eduke32/Makefile.common b/polymer/eduke32/Makefile.common index 3e871ae21..8297953cc 100644 --- a/polymer/eduke32/Makefile.common +++ b/polymer/eduke32/Makefile.common @@ -93,6 +93,7 @@ else debug+= -fmudflapth endif ifneq (0,$(PROFILER)) + # might need to be disabled for Darwin: LIBS+= -lprofiler debug+= -pg endif @@ -109,7 +110,7 @@ W_NO_UNUSED_RESULT := $(findstring -Wno-unused-result,$(W_NO_UNUSED_RESULT)) BASECFLAGS=$(debug) -W -Wall -Wimplicit -Werror-implicit-function-declaration \ -funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS -D_FORTIFY_SOURCE=2 \ - $(F_JUMP_TABLES) $(W_NO_UNUSED_RESULT) \ + $(F_JUMP_TABLES) $(W_NO_UNUSED_RESULT) $(ARCH) \ -Wextra -Wstrict-overflow=1 #-Wwrite-strings -Waddress -Wlogical-op ifneq (0,$(USE_LIBPNG)) BASECFLAGS+= -DUSE_LIBPNG diff --git a/polymer/eduke32/build/Makefile b/polymer/eduke32/build/Makefile index 6878097d2..dcda5c0b3 100644 --- a/polymer/eduke32/build/Makefile +++ b/polymer/eduke32/build/Makefile @@ -108,8 +108,10 @@ ifeq ($(PLATFORM),LINUX) ASFLAGS+= -f elf endif ifeq ($(PLATFORM),DARWIN) - ENGINEOBJS += $(OBJ)/StartupWinController.editor.$o \ - $(OBJ)//osxbits.$o + ifneq ($(findstring ppc,$(ARCH)),ppc) + ENGINEOBJS += $(OBJ)/StartupWinController.editor.$o + endif + ENGINEOBJS += $(OBJ)/osxbits.$o ASFLAGS += -DUNDERSCORES -f macho OURCFLAGS += -DUNDERSCORES -fno-pic TARGETOPTS += -DNOASM diff --git a/polymer/eduke32/build/Makefile.shared b/polymer/eduke32/build/Makefile.shared index 8a997b8cf..79cce7c73 100644 --- a/polymer/eduke32/build/Makefile.shared +++ b/polymer/eduke32/build/Makefile.shared @@ -101,6 +101,9 @@ ifeq ($(PLATFORM),DARWIN) BUILDCFLAGS += $(F_NO_STACK_PROTECTOR) -arch i386 else # ASM won't work on PowerPC or x86_64 + ifeq ($(findstring ppc,$(ARCH)),ppc) + BUILDCFLAGS += $(F_NO_STACK_PROTECTOR) + endif override NOASM = 1 endif endif diff --git a/polymer/eduke32/build/include/compat.h b/polymer/eduke32/build/include/compat.h index 434677550..2bc7c0a72 100644 --- a/polymer/eduke32/build/include/compat.h +++ b/polymer/eduke32/build/include/compat.h @@ -120,6 +120,9 @@ static inline float nearbyintf(float x) # define NULL ((void *)0) #endif +// redefined for apple/ppc, which chokes on stderr when linking... +#define ERRprintf(fmt, ...) fprintf(stderr, fmt, ## __VA_ARGS__) + #if defined(__linux) # include # if __BYTE_ORDER == __LITTLE_ENDIAN @@ -145,12 +148,18 @@ static inline float nearbyintf(float x) # define B_SWAP16(x) __bswap16(x) #elif defined(__APPLE__) -#if defined __i386__ && defined __GNUC__ -// PK 20110617: is*() crashes for me in x86 code compiled from 64-bit. +#if !defined __x86_64__ && defined __GNUC__ +// PK 20110617: is*() crashes for me in x86 code compiled from 64-bit, and gives link errors on ppc // This hack patches all occurences. # define isdigit(ch) ({ int32_t c__dontuse_=ch; c__dontuse_>='0' && c__dontuse_<='9'; }) # define isalpha(ch) ({ int32_t c__dontuse2_=ch; (c__dontuse2_>='A' && c__dontuse2_<='Z') || (c__dontuse2_>='a' && c__dontuse2_<='z'); }) # define isalnum(ch2) ({ int32_t c2__dontuse_=ch2; isalpha(c2__dontuse_) || isdigit(c2__dontuse_); }) +# if defined __BIG_ENDIAN__ +# define isspace(ch) ({ int32_t c__dontuse_=ch; (c__dontuse_==' ' || c__dontuse_=='\t' || c__dontuse_=='\n' || c__dontuse_=='\v' || c__dontuse_=='\f' || c__dontuse_=='\r'); }) +# define isprint(ch) ({ int32_t c__dontuse_=ch; (c__dontuse_>=0x20 && c__dontuse_<0x7f); }) +# undef ERRprintf +# define ERRprintf(fmt, ...) printf(fmt, ## __VA_ARGS__) +# endif # endif # if defined(__LITTLE_ENDIAN__) # define B_LITTLE_ENDIAN 1 diff --git a/polymer/eduke32/build/src/engine.c b/polymer/eduke32/build/src/engine.c index 4ffb18f96..14f7bf6b7 100644 --- a/polymer/eduke32/build/src/engine.c +++ b/polymer/eduke32/build/src/engine.c @@ -7459,7 +7459,7 @@ static void sighandler(int32_t sig, const siginfo_t *info, void *ctx) default: s = "?! (unknown)"; break; } - fprintf(stderr, "Caught SIGFPE at address %p, code %s. Aborting.\n", info->si_addr, s); + ERRprintf("Caught SIGFPE at address %p, code %s. Aborting.\n", info->si_addr, s); break; default: break; diff --git a/polymer/eduke32/build/src/sdlayer.c b/polymer/eduke32/build/src/sdlayer.c index 2fa16092b..2dda88887 100644 --- a/polymer/eduke32/build/src/sdlayer.c +++ b/polymer/eduke32/build/src/sdlayer.c @@ -29,7 +29,9 @@ # include "osxbits.h" #elif defined HAVE_GTK2 # include "gtkbits.h" -#else +#endif + +#if (!defined __APPLE__ && !defined HAVE_GTK2) || (defined __APPLE__ && defined __BIG_ENDIAN__) int32_t startwin_open(void) { return 0; } int32_t startwin_close(void) { return 0; } int32_t startwin_puts(const char *s) { s=s; return 0; } @@ -185,6 +187,7 @@ int32_t main(int32_t argc, char *argv[]) _buildargc = argc; _buildargv = (const char **)argv; +#if !(defined __APPLE__ && defined __BIG_ENDIAN__) // pipe standard outputs to files if ((argp = Bgetenv("BUILD_LOGSTDOUT")) != NULL) if (!Bstrcasecmp(argp, "TRUE")) @@ -201,6 +204,7 @@ int32_t main(int32_t argc, char *argv[]) *stderr = *fp; } } +#endif #ifdef USE_OPENGL if ((argp = Bgetenv("BUILD_NOFOG")) != NULL) @@ -231,7 +235,7 @@ void setvsync(int32_t sync) static void attach_debugger_here(void) {} /* XXX: libexecinfo could be used on systems without gnu libc. */ -#if defined __GNUC__ && !defined __OpenBSD__ +#if defined __GNUC__ && !defined __OpenBSD__ && !(defined __APPLE__ && defined __BIG_ENDIAN__) # define PRINTSTACKONSEGV 1 # include #endif @@ -426,7 +430,7 @@ void initprintf(const char *f, ...) // void debugprintf(const char *f, ...) { -#ifdef DEBUGGINGAIDS +#if defined DEBUGGINGAIDS && !(defined __APPLE__ && defined __BIG_ENDIAN__) va_list va; va_start(va,f); diff --git a/polymer/eduke32/osxbuild.sh b/polymer/eduke32/osxbuild.sh index b322a6d94..569eb0c12 100755 --- a/polymer/eduke32/osxbuild.sh +++ b/polymer/eduke32/osxbuild.sh @@ -1,6 +1,6 @@ #!/bin/sh -# build debug/release x86/x64 versions of mapster32 and eduke32 on OSX +# build debug/release x86/x64/ppc versions of mapster32 and eduke32 on OSX if [ `uname -s` != Darwin ]; then echo This script is for OSX only. @@ -19,15 +19,15 @@ if [ $1 ]; then fi if [ $onlyzip -eq 0 ]; then - make veryclean - WITHOUT_GTK=1 RELEASE=0 BUILD32_ON_64=0 make -j 3 - if [ $? ]; then - echo 64-bit debug build succeeded. - cp mapster32 mapster32.debug.x64 - cp eduke32 eduke32.debug.x64 - else - echo 64-bit debug build failed. - fi + # make veryclean + # WITHOUT_GTK=1 RELEASE=0 BUILD32_ON_64=0 make -j 3 + # if [ $? ]; then + # echo 64-bit debug build succeeded. + # cp mapster32 mapster32.debug.x64 + # cp eduke32 eduke32.debug.x64 + # else + # echo 64-bit debug build failed. + # fi make veryclean WITHOUT_GTK=1 RELEASE=1 BUILD32_ON_64=0 make -j 3 @@ -39,15 +39,15 @@ if [ $onlyzip -eq 0 ]; then echo 64-bit release build failed. fi - make veryclean - WITHOUT_GTK=1 RELEASE=0 BUILD32_ON_64=1 make -j 3 - if [ $? ]; then - echo 32-bit debug build succeeded. - cp mapster32 mapster32.debug.x86 - cp eduke32 eduke32.debug.x86 - else - echo 32-bit debug build failed. - fi + # make veryclean + # WITHOUT_GTK=1 RELEASE=0 BUILD32_ON_64=1 make -j 3 + # if [ $? ]; then + # echo 32-bit debug build succeeded. + # cp mapster32 mapster32.debug.x86 + # cp eduke32 eduke32.debug.x86 + # else + # echo 32-bit debug build failed. + # fi make veryclean WITHOUT_GTK=1 RELEASE=1 BUILD32_ON_64=1 make -j 3 @@ -58,18 +58,40 @@ if [ $onlyzip -eq 0 ]; then else echo 32-bit release build failed. fi + + # make veryclean + # ARCH='-arch ppc' WITHOUT_GTK=1 RELEASE=0 BUILD32_ON_64=0 make -j 3 + # if [ $? ]; then + # echo PowerPC debug build succeeded. + # cp mapster32 mapster32.debug.ppc + # cp eduke32 eduke32.debug.ppc + # else + # echo PowerPC debug build failed. + # fi + + make veryclean + ARCH='-arch ppc' WITHOUT_GTK=1 RELEASE=1 BUILD32_ON_64=0 make -j 3 + if [ $? ]; then + echo PowerPC release build succeeded. + cp mapster32 mapster32.ppc + cp eduke32 eduke32.ppc + else + echo PowerPC release build failed. + fi fi # Almost done... -if [ -f mapster32.debug.x64 ] && [ -f mapster32.x64 ] && [ -f eduke32.debug.x86 ] && [ -f eduke32.x86 ]; then +if [ -f mapster32.x64 ] && [ -f eduke32.x86 ] && [ -f eduke32.ppc ]; then echo Creating fat binaries. - lipo -create mapster32.x64 mapster32.x86 -output mapster32 - lipo -create mapster32.debug.x64 mapster32.debug.x86 -output mapster32.debug - lipo -create eduke32.x64 eduke32.x86 -output eduke32 - lipo -create eduke32.debug.x64 eduke32.debug.x86 -output eduke32.debug + lipo -create mapster32.x64 mapster32.x86 mapster32.ppc -output mapster32 +# lipo -create mapster32.debug.x64 mapster32.debug.x86 -output mapster32.debug + lipo -create eduke32.x64 eduke32.x86 eduke32.ppc -output eduke32 +# lipo -create eduke32.debug.x64 eduke32.debug.x86 -output eduke32.debug rev=`svn info | grep Revision | awk '{ print $2 }'` arfilename="eduke32-osx-$rev.zip" echo "This archive was produced from revision $rev by the osxbuild.sh script." > README.OSX + echo "EDuke32 home: http://www.eduke32.com" >> README.OSX + echo "OSX build discussion on Duke4.net: http://forums.duke4.net/topic/4242-building-eduke-on-mac-os-x/" >> README.OSX rm -f "$arfilename" zip "$arfilename" mapster32 eduke32 README.OSX fi diff --git a/polymer/eduke32/source/game.c b/polymer/eduke32/source/game.c index e8246de27..7a09b7f8c 100644 --- a/polymer/eduke32/source/game.c +++ b/polymer/eduke32/source/game.c @@ -9304,7 +9304,7 @@ static void G_Startup(void) wm_msgbox("Build Engine Initialization Error", "There was a problem initializing the Build engine: %s", engineerrstr); G_Cleanup(); - fprintf(stderr, "G_Startup: There was a problem initializing the Build engine: %s\n", engineerrstr); + ERRprintf("G_Startup: There was a problem initializing the Build engine: %s\n", engineerrstr); exit(6); } @@ -9764,7 +9764,7 @@ int32_t app_main(int32_t argc,const char **argv) { wm_msgbox("Build Engine Initialization Error", "There was a problem initializing the Build engine: %s", engineerrstr); - fprintf(stderr, "app_main: There was a problem initializing the Build engine: %s\n", engineerrstr); + ERRprintf("app_main: There was a problem initializing the Build engine: %s\n", engineerrstr); exit(2); } @@ -10125,7 +10125,7 @@ CLEAN_DIRECTORY: { if (CONTROL_Startup(1, &GetTime, TICRATE)) { - fprintf(stderr, "There was an error initializing the CONTROL system.\n"); + ERRprintf("There was an error initializing the CONTROL system.\n"); uninitengine(); exit(5); } diff --git a/polymer/eduke32/source/sdlmusic.c b/polymer/eduke32/source/sdlmusic.c index aa3e44b5d..3d8f4c556 100644 --- a/polymer/eduke32/source/sdlmusic.c +++ b/polymer/eduke32/source/sdlmusic.c @@ -29,6 +29,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include +#if defined __APPLE__ && defined __BIG_ENDIAN__ +// is* hacks for ppc... +# include "compat.h" +#endif + #include "duke3d.h" #include "cache1d.h"