summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbjarni <bjarni@openttd.org>2005-12-06 14:35:10 +0000
committerbjarni <bjarni@openttd.org>2005-12-06 14:35:10 +0000
commit20e20000f2701ca920216145bbe03dfad4f8f764 (patch)
tree07212c84917cdef0f7275bdc8a5dd27c3218e76f
parent2390595d3bf0a36d326f7e00c01985c216e513eb (diff)
downloadopenttd-20e20000f2701ca920216145bbe03dfad4f8f764.tar.xz
(svn r3264) -Codechange: [OSX] OSX targets will now always use the preprocessor to determine endianess
this means that ENDIAN_FORCE is obsolite since it's always overwritten with PREPROCESSOR Since the preprocessor should never be able to pick wrong, it's easier this way specially when compiling universal binaries as they got both endianess
-rw-r--r--Makefile8
-rw-r--r--endian_check.c31
2 files changed, 24 insertions, 15 deletions
diff --git a/Makefile b/Makefile
index 57b7ea827..075768d3f 100644
--- a/Makefile
+++ b/Makefile
@@ -108,7 +108,10 @@
#
# BUILD_UNIVERSAL_BINARY: builds a universal binary for OSX. Make sure you got both PPC and x86 libs
#
-# ENDIAN_FORCE: forces the endian-check to give a certain result. Can be either BE or LE.
+# ENDIAN_FORCE: forces the endian-check to give a certain result. Can be BE, LE or PREPROCESSOR.
+# PREPROCESSOR is always used on all OSX targets and will make the preprocessor pick the right endian.
+# this means that you don't have to think about endianess when compiling for OSX.
+# Very useful for universal binaries and crosscompilers. Not sure if it works on non OSX targets
# WINDRES: the location of your windres
# CC_HOST: the gcc of your localhost if you are making a target that produces incompatible executables
# CFLAGS_HOST: cflags used for CC_HOST. Make it something if you are getting errors when you try to compi
@@ -519,6 +522,9 @@ endif
# OSX specific setup
ifdef OSX
+ # set the endian flag for OSX, that can't fail
+ ENDIAN_FORCE:=PREPROCESSOR
+
# ensure that changing libpathnames will not overwrite anything in the binary
LDFLAGS += -headerpad_max_install_names
diff --git a/endian_check.c b/endian_check.c
index d838e14f3..a302ea40b 100644
--- a/endian_check.c
+++ b/endian_check.c
@@ -12,12 +12,14 @@
int main (int argc, char *argv[]) {
unsigned char EndianTest[2] = { 1, 0 };
- int force_BE = 0, force_LE = 0;
+ int force_BE = 0, force_LE = 0, force_PREPROCESSOR = 0;
if (argc > 1 && strcmp(argv[1], "BE") == 0)
force_BE = 1;
if (argc > 1 && strcmp(argv[1], "LE") == 0)
force_LE = 1;
+ if (argc > 1 && strcmp(argv[1], "PREPROCESSOR") == 0)
+ force_PREPROCESSOR = 1;
printf("#ifndef ENDIAN_H\n#define ENDIAN_H\n");
@@ -27,20 +29,21 @@ int main (int argc, char *argv[]) {
if (force_BE == 1) {
printf("#define TTD_BIG_ENDIAN\n");
} else {
-#ifdef __APPLE__
- // adding support for universal binaries on OSX
- // Universal binaries supports both PPC and x86
- printf("#ifdef __BIG_ENDIAN__\n");
- printf("#define TTD_BIG_ENDIAN\n");
- printf("#else\n");
- printf("#define TTD_LITTLE_ENDIAN\n");
- printf("#endif\n");
-#else
- if ( *(short *) EndianTest == 1 )
- printf("#define TTD_LITTLE_ENDIAN\n");
- else
+ if (force_PREPROCESSOR == 1) {
+ // adding support for universal binaries on OSX
+ // Universal binaries supports both PPC and x86
+ // If a compiler for OSX gets this setting, it will always pick the correct endian and no test is needed
+ printf("#ifdef __BIG_ENDIAN__\n");
printf("#define TTD_BIG_ENDIAN\n");
-#endif
+ printf("#else\n");
+ printf("#define TTD_LITTLE_ENDIAN\n");
+ printf("#endif\n");
+ } else {
+ if ( *(short *) EndianTest == 1 )
+ printf("#define TTD_LITTLE_ENDIAN\n");
+ else
+ printf("#define TTD_BIG_ENDIAN\n");
+ }
}
}
printf("#endif\n");