]> git.wh0rd.org - patches.git/blob - scummvm-cross-compile.patch
scummvm random work
[patches.git] / scummvm-cross-compile.patch
1 --- vanilla-20071026/configure 2007-10-26 01:46:59.000000000 -0400
2 +++ scummvm-20071026/configure 2007-10-27 02:08:06.000000000 -0400
3 @@ -240,34 +240,25 @@
4 #
5 find_type_with_size ()
6 {
7 +for datatype in int short char long unknown; do
8 cat <<EOF >tmp_find_type_with_size.cpp
9 -#include <stdio.h>
10 -int main(int argc, char **argv)
11 -{
12 - int size = argv[1][0] - '0';
13 - if (size == sizeof(int))
14 - printf("int\n");
15 - else if (size == sizeof(short))
16 - printf("short\n");
17 - else if (size == sizeof(char))
18 - printf("char\n");
19 - else if (size == sizeof(long))
20 - printf("long\n");
21 - else {
22 - printf("unknown\n");
23 - return 1;
24 - }
25 -
26 +typedef $datatype ac__type_sizeof_;
27 +int main() {
28 + static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) == $1)];
29 + test_array [0] = 0;
30 return 0;
31 }
32 EOF
33 -if eval "$CXX $CXXFLAGS -o tmp_find_type_with_size$EXEEXT tmp_find_type_with_size.cpp"; then
34 - datatype=`./tmp_find_type_with_size $1`
35 +if ! $CXX $CXXFLAGS -o tmp_find_type_with_size$EXEEXT tmp_find_type_with_size.cpp 2>/dev/null; then
36 if test "$datatype" = "unknown"; then
37 echo "couldn't find data type with $1 bytes"
38 exit 1
39 fi
40 + continue
41 +else
42 + break
43 fi
44 +done
45 rm -f tmp_find_type_with_size$EXEEXT tmp_find_type_with_size.cpp
46 echo $datatype
47 }
48 @@ -577,10 +568,14 @@
49 _host_cpu=i586
50 ;;
51 *)
52 - guessed_host=`$_srcdir/config.guess`
53 - _host_cpu=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
54 - _host_os=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
55 - _host_vendor=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
56 + if test -z "$_host"; then
57 + _host=`$_srcdir/config.guess`
58 + else
59 + _host=`$_srcdir/config.sub $_host`
60 + fi
61 + _host_cpu=`echo $_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
62 + _host_os=`echo $_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
63 + _host_vendor=`echo $_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
64 ;;
65 esac
66
67 @@ -619,7 +614,7 @@
68 #
69 echo_n "Looking for C++ compiler... "
70 if test -n "$_host"; then
71 - compilers="$CXX $_host_cpu-$_host_os-g++ $_host_cpu-$_host_os-c++"
72 + compilers="$CXX $_host_cpu-$_host_os-g++ $_host_cpu-$_host_os-c++ $_host-g++ $_host-c++"
73 else
74 compilers="$CXX g++ c++"
75 fi
76 @@ -737,6 +732,108 @@
77 add_to_config_mk_if_no $_build_hq_scalers 'DISABLE_HQ_SCALERS = 1'
78 add_to_config_mk_if_no $_build_scalers 'DISABLE_SCALERS = 1'
79
80 +#
81 +# Check for endianness
82 +#
83 +echo_n "Checking endianness... "
84 +cat <<EOF >tmp_endianness_check.cpp
85 +short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
86 +short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
87 +void _ascii() { char* s = (char*) ascii_mm; s = (char*) ascii_ii; }
88 +short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
89 +short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
90 +void _ebcdic() { char* s = (char*) ebcdic_mm; s = (char*) ebcdic_ii; }
91 +int main() { _ascii (); _ebcdic (); return 0; }
92 +EOF
93 +$CXX $CXXFLAGS -c -o tmp_endianness_check.o tmp_endianness_check.cpp
94 +if grep BIGenDianSyS tmp_endianness_check.o >/dev/null; then
95 + _endian=big
96 +else
97 + _endian=little
98 +fi
99 +echo $_endian;
100 +rm -f tmp_endianness_check.o tmp_endianness_check.cpp
101 +
102 +#
103 +# Determine data type sizes
104 +# TODO: proper error checking
105 +# TODO: Actually, we should check individually for both signed & unsigned
106 +# data types - there are systems on which the size of an unsigned int
107 +# differs from that of a signed int!
108 +# However, so far we haven't encountered one of those, so we can live with
109 +# the limited check for now.
110 +#
111 +echo_n "Type with 1 byte... "
112 +type_1_byte=`find_type_with_size 1`
113 +echo "$type_1_byte"
114 +
115 +echo_n "Type with 2 bytes... "
116 +type_2_byte=`find_type_with_size 2`
117 +echo "$type_2_byte"
118 +
119 +echo_n "Type with 4 bytes... "
120 +type_4_byte=`find_type_with_size 4`
121 +echo "$type_4_byte"
122 +
123 +#
124 +# Check whether we can use x86 asm routines
125 +#
126 +echo_n "Running on x86... "
127 +case $_host_cpu in
128 + i386|i486|i586|i686)
129 + _have_x86=yes
130 + ;;
131 + *)
132 + _have_x86=no
133 + ;;
134 +esac
135 +echo "$_have_x86"
136 +
137 +#
138 +# Determine build settings
139 +#
140 +# TODO - also add an command line option to override this?!?
141 +echo_n "Checking hosttype... "
142 +echo $_host_os
143 +case $_host_os in
144 + linux* | uclinux* | openbsd* | freebsd* | netbsd* | bsd* | sunos* | hpux* | beos*)
145 + DEFINES="$DEFINES -DUNIX"
146 + ;;
147 + solaris*)
148 + DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
149 + ;;
150 + irix*)
151 + DEFINES="$DEFINES -DUNIX -DIRIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
152 + LIBS="$LIBS -lmd "
153 + _ranlib=:
154 + ;;
155 + darwin*)
156 + DEFINES="$DEFINES -DUNIX -DMACOSX"
157 + LIBS="$LIBS -framework QuickTime -framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI"
158 + ;;
159 + mingw*)
160 + DEFINES="$DEFINES -DWIN32"
161 + LIBS="$LIBS -lmingw32 -lwinmm"
162 + OBJS="$OBJS scummvmico.o"
163 + ;;
164 + cygwin*)
165 + DEFINES="$DEFINES -mno-cygwin -DWIN32"
166 + LIBS="$LIBS -mno-cygwin -lmingw32 -lwinmm"
167 + OBJS="$OBJS scummvmico.o"
168 + ;;
169 + os2-emx*)
170 + DEFINES="$DEFINES -DUNIX"
171 + ;;
172 + mint*)
173 + DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
174 + ;;
175 + # given this is a shell script assume some type of unix
176 + *)
177 + echo "WARNING: could not establish system type, assuming unix like"
178 + DEFINES="$DEFINES -DUNIX"
179 + ;;
180 +esac
181 +
182 if test -n "$_host"; then
183 # Cross-compiling mode - add your target here if needed
184 case "$_host" in
185 @@ -762,6 +859,9 @@
186 add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1'
187 add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1'
188 ;;
189 + bfin*)
190 + _need_memalign=yes
191 + ;;
192 gp2x)
193 echo "Cross-compiling to $_host, forcing endianness, alignment and type sizes"
194 DEFINES="$DEFINES -DUNIX -DGP2X -DUSE_ARM_SOUND_ASM -DUSE_ARM_SMUSH_ASM"
195 @@ -813,97 +913,12 @@
196 OBJS="$OBJS scummvmico.o"
197 ;;
198 *)
199 - echo "Cross-compiling to unknown target $_host, please add your target to configure."
200 - exit 1
201 + echo "Continuing with auto-detected values ... if you have problems, please add your target to configure."
202 ;;
203 esac
204
205 else
206 #
207 - # Determine build settings
208 - #
209 - # TODO - also add an command line option to override this?!?
210 - echo_n "Checking hosttype... "
211 - echo $_host_os
212 - case $_host_os in
213 - linux* | openbsd* | freebsd* | netbsd* | bsd* | sunos* | hpux* | beos*)
214 - DEFINES="$DEFINES -DUNIX"
215 - ;;
216 - solaris*)
217 - DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
218 - ;;
219 - irix*)
220 - DEFINES="$DEFINES -DUNIX -DIRIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
221 - LIBS="$LIBS -lmd "
222 - _ranlib=:
223 - ;;
224 - darwin*)
225 - DEFINES="$DEFINES -DUNIX -DMACOSX"
226 - LIBS="$LIBS -framework QuickTime -framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI"
227 - ;;
228 - mingw*)
229 - DEFINES="$DEFINES -DWIN32"
230 - LIBS="$LIBS -lmingw32 -lwinmm"
231 - OBJS="$OBJS scummvmico.o"
232 - ;;
233 - cygwin*)
234 - DEFINES="$DEFINES -mno-cygwin -DWIN32"
235 - LIBS="$LIBS -mno-cygwin -lmingw32 -lwinmm"
236 - OBJS="$OBJS scummvmico.o"
237 - ;;
238 - os2-emx*)
239 - DEFINES="$DEFINES -DUNIX"
240 - ;;
241 - mint*)
242 - DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE"
243 - ;;
244 - # given this is a shell script assume some type of unix
245 - *)
246 - echo "WARNING: could not establish system type, assuming unix like"
247 - DEFINES="$DEFINES -DUNIX"
248 - ;;
249 - esac
250 -
251 - #
252 - # Check for endianness
253 - #
254 - echo_n "Checking endianness... "
255 - cat <<EOF >tmp_endianness_check.cpp
256 -#include <stdio.h>
257 -#include <stdlib.h>
258 -int main(int argc, char **argv)
259 -{
260 - unsigned int data = 0x01234567;
261 - char *ptr = (char *)&data;
262 - if (ptr[0] == 0x01 && ptr[1] == 0x23 && ptr[2] == 0x45 && ptr[3] == 0x67)
263 - printf("big\n");
264 - else if (ptr[3] == 0x01 && ptr[2] == 0x23 && ptr[1] == 0x45 && ptr[0] == 0x67)
265 - printf("little\n");
266 - else
267 - printf("unknown\n");
268 - return 0;
269 -}
270 -EOF
271 - $CXX $CXXFLAGS -o tmp_endianness_check$EXEEXT tmp_endianness_check.cpp
272 - _endian=`./tmp_endianness_check`
273 - echo $_endian;
274 - rm -f tmp_endianness_check$EXEEXT tmp_endianness_check.cpp
275 -
276 - #
277 - # Check whether we can use x86 asm routines
278 - #
279 - echo_n "Running on x86... "
280 - case $_host_cpu in
281 - i386|i486|i586|i686)
282 - _have_x86=yes
283 - ;;
284 - *)
285 - _have_x86=no
286 - ;;
287 - esac
288 - echo "$_have_x86"
289 -
290 - #
291 # Check whether memory alignment is required
292 #
293 echo_n "Alignment required... "
294 @@ -949,28 +964,6 @@
295 ;;
296 esac
297 echo "$_need_memalign"
298 -
299 - #
300 - # Determine data type sizes
301 - # TODO: proper error checking
302 - # TODO: Actually, we should check individually for both signed & unsigned
303 - # data types - there are systems on which the size of an unsigned int
304 - # differs from that of a signed int!
305 - # However, so far we haven't encountered one of those, so we can live with
306 - # the limited check for now.
307 - #
308 - echo_n "Type with 1 byte... "
309 - type_1_byte=`find_type_with_size 1`
310 - echo "$type_1_byte"
311 -
312 - echo_n "Type with 2 bytes... "
313 - type_2_byte=`find_type_with_size 2`
314 - echo "$type_2_byte"
315 -
316 - echo_n "Type with 4 bytes... "
317 - type_4_byte=`find_type_with_size 4`
318 - echo "$type_4_byte"
319 -
320 fi
321
322 #