mirror of https://github.com/OpenTTD/OpenTTD
(svn r158) -Fix: make endianess check 100% accurate (hopefully ;))
parent
85628544ee
commit
0fe07eac63
14
Makefile
14
Makefile
|
@ -171,6 +171,7 @@ endif
|
||||||
|
|
||||||
# Set output executable names
|
# Set output executable names
|
||||||
TTD=openttd$(EXE)
|
TTD=openttd$(EXE)
|
||||||
|
ENDIAN_CHECK=endian_check$(EXE)
|
||||||
STRGEN=strgen/strgen$(EXE)
|
STRGEN=strgen/strgen$(EXE)
|
||||||
OSXAPP="OpenTTD.app"
|
OSXAPP="OpenTTD.app"
|
||||||
|
|
||||||
|
@ -198,7 +199,7 @@ BUILDDATE=`date +%d.%m.%y`
|
||||||
ifeq ($(shell uname -m), x86_64)
|
ifeq ($(shell uname -m), x86_64)
|
||||||
endwarnings:=endwarnings
|
endwarnings:=endwarnings
|
||||||
64_bit_warnings:=64_bit_warnings
|
64_bit_warnings:=64_bit_warnings
|
||||||
BASECFLAGS += -m64 -D_LITTLE_ENDIAN
|
BASECFLAGS += -m64
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -488,8 +489,15 @@ OSX:=OSX
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
all: $(UPDATECONFIG) $(TTD) $(OSX) $(endwarnings)
|
all: endian.h $(UPDATECONFIG) $(TTD) $(OSX) $(endwarnings)
|
||||||
|
|
||||||
|
endian.h: $(ENDIAN_CHECK)
|
||||||
|
# Check if system is LITTLE_ENDIAN or BIG_ENDIAN
|
||||||
|
./$(ENDIAN_CHECK) > $@
|
||||||
|
|
||||||
|
$(ENDIAN_CHECK): endian_check.c
|
||||||
|
$(CC) $(BASECFLAGS) $(CDEFS) endian_check.c -o $@
|
||||||
|
|
||||||
|
|
||||||
$(TTD): table/strings.h $(ttd_OBJS) $(LANGS) $(MAKE_CONFIG)
|
$(TTD): table/strings.h $(ttd_OBJS) $(LANGS) $(MAKE_CONFIG)
|
||||||
$(C_LINK) $@ $(TTDLDFLAGS) $(ttd_OBJS) $(LIBS)
|
$(C_LINK) $@ $(TTDLDFLAGS) $(ttd_OBJS) $(LIBS)
|
||||||
|
@ -546,7 +554,7 @@ FORCE:
|
||||||
# ttd$(EXE) is removed just to make sure people execute the right binary (openttd$(EXE))
|
# ttd$(EXE) is removed just to make sure people execute the right binary (openttd$(EXE))
|
||||||
# remove this for next release!
|
# remove this for next release!
|
||||||
clean:
|
clean:
|
||||||
rm -rf .deps *~ $(TTD) $(STRGEN) core table/strings.h $(LANGS) $(ttd_OBJS) ttd$(EXE)
|
rm -rf .deps *~ $(TTD) $(STRGEN) core table/strings.h $(LANGS) $(ttd_OBJS) endian.h $(ENDIAN_CHECK) ttd$(EXE)
|
||||||
|
|
||||||
mrproper: clean
|
mrproper: clean
|
||||||
rm -rf $(MAKE_CONFIG)
|
rm -rf $(MAKE_CONFIG)
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// This pretty simple file checks if the system is LITTLE_ENDIAN or BIG_ENDIAN
|
||||||
|
// it does that by putting a 1 and a 0 in an array, and read it out as one
|
||||||
|
// number. If it is 1, it is LITTLE_ENDIAN, if it is 256, it is BIG_ENDINA
|
||||||
|
//
|
||||||
|
// After that it outputs the contents of an include files (endian.h)
|
||||||
|
// that says or TTD_LITTLE_ENDIAN, or TTD_BIG_ENDIAN. Makefile takes
|
||||||
|
// care of the real writing to the file.
|
||||||
|
|
||||||
|
int main () {
|
||||||
|
unsigned char EndianTest[2] = { 1, 0 };
|
||||||
|
printf("#ifndef ENDIAN_H\n#define ENDIAN_H\n");
|
||||||
|
if( *(short *) EndianTest == 1 )
|
||||||
|
printf("#define TTD_LITTLE_ENDIAN\n");
|
||||||
|
else
|
||||||
|
printf("#define TTD_BIG_ENDIAN\n");
|
||||||
|
|
||||||
|
printf("#endif\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
25
stdafx.h
25
stdafx.h
|
@ -67,27 +67,12 @@
|
||||||
# define GCC_PACK
|
# define GCC_PACK
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Windows has always LITTLE_ENDIAN
|
||||||
#if defined(WIN32)
|
#if defined(WIN32)
|
||||||
# define TTD_LITTLE_ENDIAN
|
#define TTD_LITTLE_ENDIAN
|
||||||
#endif
|
#else
|
||||||
|
// Else include endian.h, which has the endian-type, autodetected by the Makefile
|
||||||
#if defined(i386)
|
#include "endian.h"
|
||||||
# define TTD_LITTLE_ENDIAN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__MORPHOS__)
|
|
||||||
# define TTD_BIG_ENDIAN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Check endianness
|
|
||||||
#if !defined(TTD_LITTLE_ENDIAN) && !defined(TTD_BIG_ENDIAN)
|
|
||||||
# if defined(_BIG_ENDIAN)
|
|
||||||
# define TTD_BIG_ENDIAN
|
|
||||||
# elif defined(_LITTLE_ENDIAN)
|
|
||||||
# define TTD_LITTLE_ENDIAN
|
|
||||||
# else
|
|
||||||
# error No endianness defined, use either TTD_LITTLE_ENDIAN or TTD_BIG_ENDIAN
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(UNIX)
|
#if defined(UNIX)
|
||||||
|
|
Loading…
Reference in New Issue