Build fix for OSX/PowerPC

git-svn-id: https://svn.eduke32.com/eduke32@1935 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2011-07-20 23:04:20 +00:00
parent a9290a0d29
commit 563d42856e
10 changed files with 86 additions and 39 deletions

View file

@ -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))
ifneq ($(PLATFORM),DARWIN)
LIBS+= -lprofiler
endif
debug+= -pg
endif
OBJ=obj

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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 <endian.h>
# 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

View file

@ -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;

View file

@ -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 <execinfo.h>
#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);

View file

@ -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

View file

@ -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);
}

View file

@ -29,6 +29,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <stdio.h>
#include <errno.h>
#if defined __APPLE__ && defined __BIG_ENDIAN__
// is* hacks for ppc...
# include "compat.h"
#endif
#include "duke3d.h"
#include "cache1d.h"