Changeset - r157:a0ba33830082
[Not reviewed]
master
0 2 1
truelight - 20 years ago 2004-09-04 14:20:12
truelight@openttd.org
(svn r158) -Fix: make endianess check 100% accurate (hopefully ;))
3 files changed with 38 insertions and 23 deletions:
0 comments (0 inline, 0 general)
Makefile
Show inline comments
 
@@ -171,6 +171,7 @@ endif
 

	
 
# Set output executable names
 
TTD=openttd$(EXE)
 
ENDIAN_CHECK=endian_check$(EXE)
 
STRGEN=strgen/strgen$(EXE)
 
OSXAPP="OpenTTD.app"
 

	
 
@@ -198,7 +199,7 @@ BUILDDATE=`date +%d.%m.%y`
 
ifeq ($(shell uname -m), x86_64)
 
endwarnings:=endwarnings
 
64_bit_warnings:=64_bit_warnings
 
BASECFLAGS += -m64 -D_LITTLE_ENDIAN
 
BASECFLAGS += -m64
 
endif
 

	
 

	
 
@@ -488,8 +489,15 @@ OSX:=OSX
 
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)
 
	$(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))
 
# remove this for next release!
 
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
 
	rm -rf $(MAKE_CONFIG)
endian_check.c
Show inline comments
 
new file 100644
 
#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;
 
}
stdafx.h
Show inline comments
 
@@ -67,27 +67,12 @@
 
# define GCC_PACK
 
#endif
 

	
 
// Windows has always LITTLE_ENDIAN
 
#if defined(WIN32)
 
# define TTD_LITTLE_ENDIAN
 
#endif
 

	
 
#if defined(i386)
 
# 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
 
  #define TTD_LITTLE_ENDIAN
 
#else
 
// Else include endian.h, which has the endian-type, autodetected by the Makefile
 
  #include "endian.h"
 
#endif
 

	
 
#if defined(UNIX)
0 comments (0 inline, 0 general)