Ticket #8734: scummvm-cross-compile.patch

File scummvm-cross-compile.patch, 8.5 KB (added by SF/vapier, 17 years ago)

scummvm-cross-compile.patch

  • configure

    old new  
    240240#
    241241find_type_with_size ()
    242242{
     243for datatype in int short char long unknown; do
    243244cat <<EOF >tmp_find_type_with_size.cpp
    244 #include <stdio.h>
    245 int main(int argc, char **argv)
    246 {
    247         int size = argv[1][0] - '0';
    248         if (size == sizeof(int))
    249                 printf("int\n");
    250         else if (size == sizeof(short))
    251                 printf("short\n");
    252         else if (size == sizeof(char))
    253                 printf("char\n");
    254         else if (size == sizeof(long))
    255                 printf("long\n");
    256         else {
    257                 printf("unknown\n");
    258                 return 1;
    259         }
    260 
     245typedef $datatype ac__type_sizeof_;
     246int main() {
     247        static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) == $1)];
     248        test_array [0] = 0;
    261249        return 0;
    262250}
    263251EOF
    264 if eval "$CXX $CXXFLAGS -o tmp_find_type_with_size$EXEEXT tmp_find_type_with_size.cpp"; then
    265         datatype=`./tmp_find_type_with_size $1`
     252if ! $CXX $CXXFLAGS -o tmp_find_type_with_size$EXEEXT tmp_find_type_with_size.cpp 2>/dev/null; then
    266253        if test "$datatype" = "unknown"; then
    267254                echo "couldn't find data type with $1 bytes"
    268255                exit 1
    269256        fi
     257        continue
     258else
     259        break
    270260fi
     261done
    271262rm -f tmp_find_type_with_size$EXEEXT tmp_find_type_with_size.cpp
    272263echo $datatype
    273264}
     
    577568        _host_cpu=i586
    578569        ;;
    579570*)
    580         guessed_host=`$_srcdir/config.guess`
     571        if test -z "$_host"; then
     572                guessed_host=`$_srcdir/config.guess`
     573        else
     574                guessed_host=`$_srcdir/config.sub $_host`
     575        fi
    581576        _host_cpu=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
    582577        _host_os=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
    583578        _host_vendor=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
     
    619614#
    620615echo_n "Looking for C++ compiler... "
    621616if test -n "$_host"; then
    622         compilers="$CXX $_host_cpu-$_host_os-g++ $_host_cpu-$_host_os-c++"
     617        compilers="$CXX $_host_cpu-$_host_os-g++ $_host_cpu-$_host_os-c++ $_host-g++ $_host-c++"
    623618else
    624619        compilers="$CXX g++ c++"
    625620fi
     
    737732add_to_config_mk_if_no $_build_hq_scalers   'DISABLE_HQ_SCALERS = 1'
    738733add_to_config_mk_if_no $_build_scalers      'DISABLE_SCALERS = 1'
    739734
     735#
     736# Check for endianness
     737#
     738echo_n "Checking endianness... "
     739cat <<EOF >tmp_endianness_check.cpp
     740short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
     741short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
     742void _ascii() { char* s = (char*) ascii_mm; s = (char*) ascii_ii; }
     743short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
     744short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
     745void _ebcdic() { char* s = (char*) ebcdic_mm; s = (char*) ebcdic_ii; }
     746int main() { _ascii (); _ebcdic (); return 0; }
     747EOF
     748$CXX $CXXFLAGS -c -o tmp_endianness_check.o tmp_endianness_check.cpp
     749if grep BIGenDianSyS tmp_endianness_check.o >/dev/null; then
     750        _endian=big
     751else
     752        _endian=little
     753fi
     754echo $_endian;
     755rm -f tmp_endianness_check.o tmp_endianness_check.cpp
     756
     757#
     758# Determine data type sizes
     759# TODO: proper error checking
     760# TODO: Actually, we should check individually for both signed & unsigned
     761# data types - there are systems on which the size of an unsigned int
     762# differs from that of a signed int!
     763# However, so far we haven't encountered one of those, so we can live with
     764# the limited check for now.
     765#
     766echo_n "Type with 1 byte... "
     767type_1_byte=`find_type_with_size 1`
     768echo "$type_1_byte"
     769       
     770echo_n "Type with 2 bytes... "
     771type_2_byte=`find_type_with_size 2`
     772echo "$type_2_byte"
     773       
     774echo_n "Type with 4 bytes... "
     775type_4_byte=`find_type_with_size 4`
     776echo "$type_4_byte"
     777       
     778#
     779# Check whether we can use x86 asm routines
     780#
     781echo_n "Running on x86... "
     782case $_host_cpu in
     783        i386|i486|i586|i686)
     784                _have_x86=yes
     785                ;;
     786        *)
     787                _have_x86=no
     788                ;;
     789esac
     790echo "$_have_x86"
     791
     792#
     793# Determine build settings
     794#
     795# TODO - also add an command line option to override this?!?
     796echo_n "Checking hosttype... "
     797echo $_host_os
     798case $_host_os in
     799        linux* | uclinux* | openbsd* | freebsd* | netbsd* | bsd* | sunos* | hpux* | beos*)
     800                DEFINES="$DEFINES -DUNIX"
     801                ;;
     802        solaris*)
     803                DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
     804                ;;
     805        irix*)
     806                DEFINES="$DEFINES -DUNIX -DIRIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
     807                LIBS="$LIBS -lmd "
     808                _ranlib=:
     809                ;;
     810        darwin*)
     811                DEFINES="$DEFINES -DUNIX -DMACOSX"
     812                LIBS="$LIBS -framework QuickTime -framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI"
     813                ;;
     814        mingw*)
     815                DEFINES="$DEFINES -DWIN32"
     816                LIBS="$LIBS -lmingw32 -lwinmm"
     817                OBJS="$OBJS scummvmico.o"
     818                ;;
     819        cygwin*)
     820                DEFINES="$DEFINES -mno-cygwin -DWIN32"
     821                LIBS="$LIBS -mno-cygwin -lmingw32 -lwinmm"
     822                OBJS="$OBJS scummvmico.o"
     823                ;;
     824        os2-emx*)
     825                DEFINES="$DEFINES -DUNIX"
     826                ;;
     827        mint*)
     828                DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
     829                ;;
     830        # given this is a shell script assume some type of unix
     831        *)
     832                echo "WARNING: could not establish system type, assuming unix like"
     833                DEFINES="$DEFINES -DUNIX"
     834                ;;
     835esac
     836
    740837if test -n "$_host"; then
    741838        # Cross-compiling mode - add your target here if needed
    742839        case "$_host" in
     
    762859                        add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1'
    763860                        add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1'
    764861                        ;;
     862                bfin*)
     863                        _need_memalign=yes
     864                        ;;
    765865                gp2x)
    766866                        echo "Cross-compiling to $_host, forcing endianness, alignment and type sizes"
    767867                        DEFINES="$DEFINES -DUNIX -DGP2X -DUSE_ARM_SOUND_ASM -DUSE_ARM_SMUSH_ASM"
     
    813913                        OBJS="$OBJS scummvmico.o"
    814914                ;;
    815915                *)
    816                         echo "Cross-compiling to unknown target $_host, please add your target to configure."
    817                         exit 1
     916                        echo "Continuing with auto-detected values ... if you have problems, please add your target to configure."
    818917                        ;;
    819918        esac
    820919       
    821920else
    822921        #
    823         # Determine build settings
    824         #
    825         # TODO - also add an command line option to override this?!?
    826         echo_n "Checking hosttype... "
    827         echo $_host_os
    828         case $_host_os in
    829                 linux* | openbsd* | freebsd* | netbsd* | bsd* | sunos* | hpux* | beos*)
    830                         DEFINES="$DEFINES -DUNIX"
    831                         ;;
    832                 solaris*)
    833                         DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
    834                         ;;
    835                 irix*)
    836                         DEFINES="$DEFINES -DUNIX -DIRIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
    837                         LIBS="$LIBS -lmd "
    838                         _ranlib=:
    839                         ;;
    840                 darwin*)
    841                         DEFINES="$DEFINES -DUNIX -DMACOSX"
    842                         LIBS="$LIBS -framework QuickTime -framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI"
    843                         ;;
    844                 mingw*)
    845                         DEFINES="$DEFINES -DWIN32"
    846                         LIBS="$LIBS -lmingw32 -lwinmm"
    847                         OBJS="$OBJS scummvmico.o"
    848                         ;;
    849                 cygwin*)
    850                         DEFINES="$DEFINES -mno-cygwin -DWIN32"
    851                         LIBS="$LIBS -mno-cygwin -lmingw32 -lwinmm"
    852                         OBJS="$OBJS scummvmico.o"
    853                         ;;
    854                 os2-emx*)
    855                         DEFINES="$DEFINES -DUNIX"
    856                         ;;
    857                 mint*)
    858                         DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
    859                         ;;
    860                 # given this is a shell script assume some type of unix
    861                 *)
    862                         echo "WARNING: could not establish system type, assuming unix like"
    863                         DEFINES="$DEFINES -DUNIX"
    864                         ;;
    865         esac
    866 
    867         #
    868         # Check for endianness
    869         #
    870         echo_n "Checking endianness... "
    871         cat <<EOF >tmp_endianness_check.cpp
    872 #include <stdio.h>
    873 #include <stdlib.h>
    874 int main(int argc, char **argv)
    875 {
    876         unsigned int data = 0x01234567;
    877         char *ptr = (char *)&data;
    878         if (ptr[0] == 0x01 && ptr[1] == 0x23 && ptr[2] == 0x45 && ptr[3] == 0x67)
    879                 printf("big\n");
    880         else if (ptr[3] == 0x01 && ptr[2] == 0x23 && ptr[1] == 0x45 && ptr[0] == 0x67)
    881                 printf("little\n");
    882         else
    883                 printf("unknown\n");
    884         return 0;
    885 }
    886 EOF
    887         $CXX $CXXFLAGS -o tmp_endianness_check$EXEEXT tmp_endianness_check.cpp
    888         _endian=`./tmp_endianness_check`
    889         echo $_endian;
    890         rm -f tmp_endianness_check$EXEEXT tmp_endianness_check.cpp
    891 
    892         #
    893         # Check whether we can use x86 asm routines
    894         #
    895         echo_n "Running on x86... "
    896         case $_host_cpu in
    897                 i386|i486|i586|i686)
    898                         _have_x86=yes
    899                         ;;
    900                 *)
    901                         _have_x86=no
    902                         ;;
    903         esac
    904         echo "$_have_x86"
    905 
    906         #
    907922        # Check whether memory alignment is required
    908923        #
    909924        echo_n "Alignment required... "
     
    949964                        ;;
    950965        esac
    951966        echo "$_need_memalign"
    952 
    953         #
    954         # Determine data type sizes
    955         # TODO: proper error checking
    956         # TODO: Actually, we should check individually for both signed & unsigned
    957         # data types - there are systems on which the size of an unsigned int
    958         # differs from that of a signed int!
    959         # However, so far we haven't encountered one of those, so we can live with
    960         # the limited check for now.
    961         #
    962         echo_n "Type with 1 byte... "
    963         type_1_byte=`find_type_with_size 1`
    964         echo "$type_1_byte"
    965        
    966         echo_n "Type with 2 bytes... "
    967         type_2_byte=`find_type_with_size 2`
    968         echo "$type_2_byte"
    969        
    970         echo_n "Type with 4 bytes... "
    971         type_4_byte=`find_type_with_size 4`
    972         echo "$type_4_byte"
    973        
    974967fi
    975968
    976969#