/[gxemul]/upstream/0.3.4/configure
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /upstream/0.3.4/configure

Parent Directory Parent Directory | Revision Log Revision Log


Revision 11 - (show annotations)
Mon Oct 8 16:18:31 2007 UTC (16 years, 6 months ago) by dpavlin
File size: 32623 byte(s)
0.3.4
1 #!/bin/sh
2 ###############################################################################
3 #
4 # Copyright (C) 2003-2005 Anders Gavare. All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are met:
8 #
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
14 # 3. The name of the author may not be used to endorse or promote products
15 # derived from this software without specific prior written permission.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 # SUCH DAMAGE.
28 #
29 #
30 # $Id: configure,v 1.140 2005/06/27 17:31:50 debug Exp $
31 #
32 # This is a minimal configure script, hardcoded for GXemul. This script
33 # figures out which compiler flags will work, and creates Makefiles in
34 # sub-directories. A config.h file is also created.
35 #
36 #
37 # ---> FOR NORMAL USE, JUST RUN ./configure WITHOUT OPTIONS!
38 #
39 #
40 # To compile the emulator with profiling (during development), use
41 # CFLAGS="-pg", run the emulator, and then run 'gprof gxemul' and study
42 # the results.
43 #
44 #
45 # The main things that are detected by this script:
46 #
47 # o) special hacks for some OSes
48 # o) which compiler to use (overridden by setting CC)
49 # o) which compiler flags to use (overridden by setting CFLAGS)
50 # o) X11 flags and libraries (TODO: should be possible to override)
51 # o) binary translation (on supported platforms)
52 # o) prefetch capability (TODO: this is assumed on Alpha, but not all
53 # Alphas have it...)
54 #
55 # TODO:
56 # o) do not enable prefetch on Alpha ev4 or ev5, only on pca56 and newer
57 # o) X11 libs and includes via command line options?
58 #
59 ###############################################################################
60
61 ENABLEARM=YES
62 ENABLEMIPS=YES
63 ENABLEPPC=YES
64 ENABLEURISC=YES
65 ENABLEX86=NO
66 STABLE=NO
67
68 if [ z"$*" != z ]; then
69 # Parse command line options:
70 for a in $*; do
71 if [ z$a = z--disable-x ]; then
72 NOX11=YES
73 else if [ z$a = z--always32 ]; then
74 ALWAYS32=YES
75 else if [ z$a = z--tracenull ]; then
76 TRACENULL=YES
77 else if [ z$a = z--disable-bintrans ]; then
78 NOBINTRANS=YES
79 else if [ z$a = z--enable-bintrans ]; then
80 NOBINTRANS=NO
81 else if [ z$a = z--disable-mips16 ]; then
82 MIPS16=NO
83 else if [ z$a = z--enable-mips16 ]; then
84 MIPS16=YES
85 else if [ z$a = z--disable-arm ]; then
86 ENABLEARM=NO
87 else if [ z$a = z--enable-arm ]; then
88 ENABLEARM=YES
89 else if [ z$a = z--disable-mips ]; then
90 ENABLEMIPS=NO
91 else if [ z$a = z--enable-mips ]; then
92 ENABLEMIPS=YES
93 else if [ z$a = z--disable-ppc ]; then
94 ENABLEPPC=NO
95 else if [ z$a = z--enable-ppc ]; then
96 ENABLEPPC=YES
97 else if [ z$a = z--disable-urisc ]; then
98 ENABLEURISC=NO
99 else if [ z$a = z--enable-urisc ]; then
100 ENABLEURISC=YES
101 else if [ z$a = z--disable-x86 ]; then
102 ENABLEX86=NO
103 else if [ z$a = z--enable-x86 ]; then
104 ENABLEX86=YES
105 else if [ z$a = z--disable-delays ]; then
106 DELAYS=NO
107 else if [ z$a = z--enable-delays ]; then
108 DELAYS=YES
109 else if [ z$a = z--disable-caches ]; then
110 CACHES=NO
111 else if [ z$a = z--enable-caches ]; then
112 CACHES=YES
113 else if [ z$a = z--help ]; then
114 echo "usage: $0 [options]"
115 printf "\nDevelopment (debug) options:\n"
116 echo " --always32 enable" \
117 "ALWAYS_SIGNEXTEND_32 (for hunting down"
118 echo " 32/64-bit bugs)"
119 echo " --tracenull enable" \
120 "TRACE_NULL_CRASHES (for bug hunting)"
121 printf "\nGeneral options:\n"
122 echo " --disable-bintrans configure without" \
123 "bintrans, even if the host supports it"
124 printf " --enable-caches enable cache emulation"
125 printf " (BUGGY)\n"
126 echo " --enable-delays enable instruction" \
127 "latency/delay emulation"
128 echo " --disable-x don't include X11 support"
129 printf "\nCPU selection options:\n"
130 echo " --disable-arm disable ARM CPU emulation"
131 echo " --disable-mips disable MIPS CPU emulation"
132 echo " --disable-ppc disable PPC CPU emulation"
133 echo " --disable-urisc disable URISC CPU emulation"
134 if [ z$STABLE = zNO ]; then
135 printf " --enable-x86 "
136 printf "enable x86 CPU emulation"
137 printf " (NOT YET)\n"
138 fi
139 printf "\nMIPS-specific options:\n"
140 printf " --enable-mips16 enable MIPS16 instruction"
141 printf " support (NOT YET)\n\n"
142 exit
143 else
144 echo "Invalid option: $a"
145 echo "Run $0 --help to get a list of" \
146 "available options."
147 exit
148 fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi
149 fi; fi; fi; fi; fi; fi; fi
150 done
151 fi
152
153
154 ###############################################################################
155 #
156 # Configure options:
157 #
158 # This creates a config.h file, which is then included from include/misc.h.
159 #
160 ###############################################################################
161
162 # Head of config.h:
163 printf "/*
164 * THIS FILE IS AUTOMATICALLY CREATED BY configure!
165 * DON'T EDIT THIS FILE MANUALLY, IT WILL BE OVERWRITTEN.
166 */
167 \n#ifndef CONFIG_H\n#define CONFIG_H\n\n" > config.h
168
169
170 # Figure out if VERSION should be defined.
171 X=`basename \`pwd\`|cut -d \- -f 2-`
172 if [ z"$X" = zgxemul ]; then
173 echo '/* No VERSION defined. */' >> config.h
174 else
175 printf "#define VERSION \"$X\"\n" >> config.h
176 fi
177
178
179 ZZ=`echo compiled on \`uname\`/\`uname -m\`, \`date\``
180 printf "#define COMPILE_DATE \"$ZZ\"\n" >> config.h
181
182
183
184 # Support for various CPU types:
185 if [ z$MIPS16 = zYES ]; then
186 printf 'Enabling MIPS16 support. '
187 printf 'NOTE: MIPS16 support is not really working yet.\n'
188 printf "#define ENABLE_MIPS16\n" >> config.h
189 fi
190 if [ z$ENABLEARM = zYES ]; then
191 printf "#define ENABLE_ARM\n" >> config.h
192 fi
193 if [ z$ENABLEMIPS = zYES ]; then
194 printf "#define ENABLE_MIPS\n" >> config.h
195 fi
196 if [ z$ENABLEPPC = zYES ]; then
197 printf "#define ENABLE_PPC\n" >> config.h
198 fi
199 if [ z$ENABLEURISC = zYES ]; then
200 printf "#define ENABLE_URISC\n" >> config.h
201 fi
202 if [ z$ENABLEX86 = zYES ]; then
203 printf "#define ENABLE_X86\n" >> config.h
204 if [ z$STABLE = zNO ]; then
205 printf "\nWARNING: X86 emulation enabled, but it isn't really"
206 printf " working yet.\n\n"
207 else
208 printf "Not in the stable release.\n"
209 exit
210 fi
211 fi
212
213
214 # Instruction delay/latency emulation:
215 if [ z$DELAYS = zYES ]; then
216 echo 'Enabling Instruction delay/latency emulation.'
217 printf "#define ENABLE_INSTRUCTION_DELAYS\n" >> config.h
218 fi
219
220
221 # Development option: ALWAYS_SIGNEXTEND_32
222 if [ z$ALWAYS32 = zYES ]; then
223 echo 'Enabling ALWAYS_SIGNEXTEND_32. (NOTE:' \
224 'This slows down everything.)'
225 printf "#define ALWAYS_SIGNEXTEND_32\n" >> config.h
226 fi
227
228
229 # Development option: TRACE_NULL_CRASHES
230 if [ z$TRACENULL = zYES ]; then
231 echo 'Enabling TRACE_NULL_CRASHES. (NOTE:' \
232 'This slows down the emulator.)'
233 printf "#define TRACE_NULL_CRASHES\n" >> config.h
234 fi
235
236
237 # Cache emulation:
238 if [ z$CACHES = zYES ]; then
239 echo 'Enabling Cache emulation. (EXPERIMENTAL)'
240 printf "#define ENABLE_CACHE_EMULATION\n" >> config.h
241
242 if [ z$DELAYS != zYES ]; then
243 printf 'WARNING: Cache emulation without instruction '
244 printf 'delay/latency emulation\n'
245 printf ' (--delays) will not produce correct '
246 printf 'cache miss penalties and such.\n'
247 fi
248
249 printf "\nNOTE: Cache emulation enabled, but right now it triggers "
250 printf "weird bugs in the\n emulator. You have been warned.\n\n"
251 fi
252
253
254 ###############################################################################
255 #
256 # Special hacks for some host OSes:
257 #
258 ###############################################################################
259
260 if [ z"`uname|cut -c 1-6`" = zCYGWIN ]; then
261 CYGWIN=YES
262
263 if [ z"$CC" = z ]; then
264 # Assume gcc on Cygwin (Windows) systems.
265 CC=gcc
266 fi
267 fi
268
269 if [ z"`uname`" = zHP-UX ]; then
270 HPUX=YES
271
272 if [ z$CC = z ]; then
273 if [ -f /usr/local/pa64/bin/gcc ]; then
274 CC=/usr/local/pa64/bin/gcc
275 fi
276 fi
277 fi
278
279 if [ z"`uname`" = zOSF1 ]; then
280 OSF1=YES
281 fi
282
283
284 ###############################################################################
285 #
286 # Create the Makefile header:
287 #
288 ###############################################################################
289
290 rm -f _Makefile.header
291
292 printf "#
293 # DO NOT EDIT THIS FILE! It is automagically created by
294 # the configure script, based on Makefile.skel.
295 #\n\n" >> _Makefile.header
296
297
298 echo 'int main(int argc, char *argv[]) { return 0; }' > _testprog.c
299
300
301 # Try to detect which C compiler to use, if CC is not set:
302 printf "checking which C compiler to use... "
303
304 if [ z"$CC" = z ]; then
305 CC=cc
306
307 # Try gcc first:
308 printf "#!/bin/sh\ngcc _testprog.c -o _testprog >" > _test.sh
309 printf " /dev/null 2> /dev/null\n" >> _test.sh
310 chmod 755 _test.sh
311 ./_test.sh > /dev/null 2> /dev/null
312 if [ -x _testprog ]; then
313 CC=gcc
314 fi
315 rm -f _testprog
316
317 # If both gcc and cc exist, then cc might be a vendor specific
318 # compiler which produces faster code than gcc (eg on Solaris):
319 printf "#!/bin/sh\ncc _testprog.c -o _testprog >" > _test.sh
320 printf " /dev/null 2> /dev/null\n" >> _test.sh
321 chmod 755 _test.sh
322 ./_test.sh > /dev/null 2> /dev/null
323 if [ -x _testprog ]; then
324 CC=cc
325 fi
326 rm -f _testprog
327
328 # Try ccc (FreeBSD/Alpha):
329 printf "#!/bin/sh\nccc _testprog.c -o _testprog >" > _test.sh
330 printf " /dev/null 2> /dev/null\n" >> _test.sh
331 chmod 755 _test.sh
332 ./_test.sh > /dev/null 2> /dev/null
333 if [ -x _testprog ]; then
334 CC="ccc"
335 fi
336 rm -f _testprog
337
338 rm -f _test.sh
339 fi
340
341
342 rm -f _testprog
343 printf "$CC $CFLAGS"
344
345
346 CCTYPE="generic"
347
348 if $CC $CFLAGS -V 2> /dev/null | grep ompaq 1> /dev/null 2> /dev/null; then
349 COMPAQCC=YES
350 CCTYPE="Compaq CC"
351 fi
352
353 if $CC $CFLAGS -V 2>&1 | grep Sun 1> /dev/null 2> /dev/null; then
354 SUNCC=YES
355 CCTYPE="Solaris CC"
356 fi
357
358 if $CC $CFLAGS -v 2>&1 | grep gcc 1> /dev/null 2> /dev/null; then
359 GCCCC=YES
360 CCTYPE="GNU CC"
361 fi
362
363 if [ z$CYGWIN = zYES ]; then
364 CCTYPE="$CCTYPE (Cygwin)"
365 fi
366
367 echo " ($CCTYPE)"
368
369
370 if [ z$NOX11 = z ]; then
371 printf "checking for X11 headers and libs\n"
372
373 # Try to compile a small X11 test program:
374 printf "#include <X11/Xlib.h>
375 #include <stdio.h>
376 Display *dis;
377 void f(void) {
378 dis = XOpenDisplay(NULL);
379 }
380 int main(int argc, char *argv[])
381 { return 0; }
382 " > _test_x11.c
383
384 XOK=0
385
386 XINCLUDE=-I/usr/X11R6/include
387 $CC $CFLAGS _test_x11.c -c -o _test_x11.o $XINCLUDE 2> /dev/null
388
389 XLIB="-L/usr/X11R6/lib -lX11"
390 $CC $CFLAGS _test_x11.o -o _test_x11 $XLIB 2> /dev/null
391
392 if [ -x _test_x11 ]; then
393 XOK=1
394 fi
395
396 rm -f _test_x11 _test_x11.o
397
398 if [ z$XOK = z0 ]; then
399 XINCLUDE=""
400 $CC $CFLAGS _test_x11.c -c -o _test_x11.o \
401 $XINCLUDE 2> /dev/null
402
403 # -lsocket for Solaris
404 XLIB="-lX11 -lsocket"
405 $CC $CFLAGS _test_x11.o -o _test_x11 $XLIB 2> /dev/null
406
407 if [ -x _test_x11 ]; then
408 XOK=1
409 fi
410 rm -f _test_x11 _test_x11.o
411 fi
412
413 if [ z`uname` = zNetBSD ]; then
414 echo "Using NetBSD hack for X11 libs..."
415 XLIB="$XLIB -Wl,-rpath,/usr/X11R6/lib"
416 fi
417
418 if [ z`uname` = zOpenBSD ]; then
419 if [ z`uname -m` = zarc ]; then
420 echo "Using old OpenBSD/arc hack for X11 libs..."
421 XLIB="$XLIB -Wl,-rpath,/usr/X11R6/lib"
422 fi
423 fi
424
425 if [ z$XOK = z0 ]; then
426 echo "Failed to compile X11 test program." \
427 "Configuring without X11."
428 else
429 printf "X11 headers: $XINCLUDE\n"
430 printf "X11 libraries: $XLIB\n"
431 echo "XINCLUDE=$XINCLUDE" >> _Makefile.header
432 echo "XLIB=$XLIB" >> _Makefile.header
433 printf "#define WITH_X11\n" >> config.h
434 fi
435
436 rm -f _test_x11.c
437 fi
438
439
440 if [ z$HPUX = zYES ]; then
441 CFLAGS="-D_XOPEN_SOURCE_EXTENDED $CFLAGS"
442 printf "#define HPUX\n" >> config.h
443 fi
444
445
446 if [ z$OSF1 = zYES ]; then
447 CFLAGS="-D_XOPEN_SOURCE=500 -D_OSF_SOURCE -D_POSIX_PII_SOCKET $CFLAGS"
448 fi
449
450
451 # Check for weird 'alpha' define.
452 printf "checking for weird 'alpha' define... "
453 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
454 #ifdef alpha
455 printf(\"1\");
456 #undef alpha
457 #ifdef alpha
458 printf(\"2\");
459 #endif
460 #endif
461 printf(\"\\\n\");return 0;}\n" > _testm.c
462 $CC $CFLAGS _testm.c -o _testm 2> /dev/null
463 if [ ! -x _testm ]; then
464 printf "\nWARNING! COULD NOT COMPILE alpha define TEST"
465 printf " PROGRAM AT ALL!\n"
466 else
467 if [ z`./_testm` = z1 ]; then
468 printf "yes, workaround applied\n"
469 echo "#undef alpha" >> config.h
470 else
471 if [ z`./_testm` = z12 ]; then
472 printf "yes, but workaround not possible\n"
473 exit
474 else
475 printf "no\n"
476 fi
477 fi
478 fi
479 rm -f _testm*
480
481
482 # Check for weird 'hppa' define.
483 printf "checking for weird 'hppa' define... "
484 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
485 #ifdef hppa
486 printf(\"1\");
487 #undef hppa
488 #ifdef hppa
489 printf(\"2\");
490 #endif
491 #endif
492 printf(\"\\\n\");return 0;}\n" > _testm.c
493 $CC $CFLAGS _testm.c -o _testm 2> /dev/null
494 if [ ! -x _testm ]; then
495 printf "\nWARNING! COULD NOT COMPILE hppa define TEST"
496 printf " PROGRAM AT ALL!\n"
497 else
498 if [ z`./_testm` = z1 ]; then
499 printf "yes, workaround applied\n"
500 echo "#undef hppa" >> config.h
501 else
502 if [ z`./_testm` = z12 ]; then
503 printf "yes, but workaround not possible\n"
504 exit
505 else
506 printf "no\n"
507 fi
508 fi
509 fi
510 rm -f _testm*
511
512
513 # Some OSes on MIPS seems to define 'mips' to 1. (eg OpenBSD/arc)
514 printf "checking for weird 'mips' define... "
515 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
516 #ifdef mips
517 printf(\"1\");
518 #undef mips
519 #ifdef mips
520 printf(\"2\");
521 #endif
522 #endif
523 printf(\"\\\n\");return 0;}\n" > _testm.c
524 $CC $CFLAGS _testm.c -o _testm 2> /dev/null
525 if [ ! -x _testm ]; then
526 printf "\nWARNING! COULD NOT COMPILE mips define TEST"
527 printf " PROGRAM AT ALL!\n"
528 else
529 if [ z`./_testm` = z1 ]; then
530 printf "yes, workaround applied\n"
531 echo "#undef mips" >> config.h
532 else
533 if [ z`./_testm` = z12 ]; then
534 printf "yes, but workaround not possible\n"
535 exit
536 else
537 printf "no\n"
538 fi
539 fi
540 fi
541 rm -f _testm*
542
543
544 # Similar to the mips define check above, although I don't know if
545 # any OS actually defined ppc like this.
546 printf "checking for weird 'ppc' define... "
547 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
548 #ifdef ppc
549 printf(\"1\");
550 #undef ppc
551 #ifdef ppc
552 printf(\"2\");
553 #endif
554 #endif
555 printf(\"\\\n\");return 0;}\n" > _testm.c
556 $CC $CFLAGS _testm.c -o _testm 2> /dev/null
557 if [ ! -x _testm ]; then
558 printf "\nWARNING! COULD NOT COMPILE ppc define TEST"
559 printf " PROGRAM AT ALL!\n"
560 else
561 if [ z`./_testm` = z1 ]; then
562 printf "yes, workaround applied\n"
563 echo "#undef ppc" >> config.h
564 else
565 if [ z`./_testm` = z12 ]; then
566 printf "yes, but workaround not possible\n"
567 exit
568 else
569 printf "no\n"
570 fi
571 fi
572 fi
573 rm -f _testm*
574
575
576 # Similar to the mips define check above, although I don't know if
577 # any OS actually defined sparc like this.
578 printf "checking for weird 'sparc' define... "
579 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
580 #ifdef sparc
581 printf(\"1\");
582 #undef sparc
583 #ifdef sparc
584 printf(\"2\");
585 #endif
586 #endif
587 printf(\"\\\n\");return 0;}\n" > _testm.c
588 $CC $CFLAGS _testm.c -o _testm 2> /dev/null
589 if [ ! -x _testm ]; then
590 printf "\nWARNING! COULD NOT COMPILE sparc define TEST "
591 printf "PROGRAM AT ALL!\n"
592 else
593 if [ z`./_testm` = z1 ]; then
594 printf "yes, workaround applied\n"
595 echo "#undef sparc" >> config.h
596 else
597 if [ z`./_testm` = z12 ]; then
598 printf "yes, but workaround not possible\n"
599 exit
600 else
601 printf "no\n"
602 fi
603 fi
604 fi
605 rm -f _testm*
606
607
608 # CWARNINGS:
609 printf "checking whether -Wall can be used... "
610 $CC $CFLAGS _testprog.c -o _testprog -Wall 2> /dev/null
611 if [ -x _testprog ]; then
612 printf "yes\n"
613 CWARNINGS="-Wall $CWARNINGS"
614
615 # Compaq's compiler always seems to warn about the long long type,
616 # and unusedtop suppresses warnings about include files being
617 # included more than once.
618 if [ z"$COMPAQCC" = zYES ]; then
619 CWARNINGS="$CWARNINGS -msg_disable longlongtype,unusedtop"
620 fi
621 else
622 printf "no\n"
623 fi
624 rm -f _testprog
625
626
627 if [ z"$COMPAQCC" = zYES ]; then
628 # -O4 is possible, but is -O3 better?
629 CFLAGS="-O4 $CFLAGS"
630 else
631 if [ z"`uname`" = zSunOS ]; then
632 # "cc", the system's default compiler:
633 if [ z"$SUNCC" = zYES ]; then
634 CFLAGS="-xO5 -xdepend $CFLAGS"
635 fi
636 printf "#define SOLARIS\n" >> config.h
637 OTHERLIBS="-lsocket $OTHERLIBS"
638 else
639 # gcc or something else:
640 $CC $CFLAGS _testprog.c -o _testprog -O 2> /dev/null
641 if [ -x _testprog ]; then
642 rm -f _testprog
643 $CC $CFLAGS _testprog.c -o _testprog -O2 2> /dev/null
644 if [ -x _testprog ]; then
645 CFLAGS="-O2 $CFLAGS"
646 else
647 CFLAGS="-O $CFLAGS"
648 fi
649 fi
650 fi
651 fi
652 rm -f _testprog
653
654
655 # -fschedule-insns causes bugs on i386 with gcc,
656 # but works OK on my alpha with ccc (compaq's cc).
657 if [ z"$COMPAQCC" = zYES ]; then
658 printf "checking whether -fschedule-insns2 can be used... "
659 $CC $CFLAGS _testprog.c -o _testprog -fschedule-insns2 2> /dev/null
660 if [ -x _testprog ]; then
661 CFLAGS="-fschedule-insns2 $CFLAGS"
662 printf "yes\n"
663 else
664 printf "no\n"
665 fi
666 rm -f _testprog
667
668 printf "checking whether -fschedule-insns can be used... "
669 $CC $CFLAGS _testprog.c -o _testprog -fschedule-insns 2> /dev/null
670 if [ -x _testprog ]; then
671 CFLAGS="-fschedule-insns $CFLAGS"
672 printf "yes\n"
673 else
674 printf "no\n"
675 fi
676 rm -f _testprog
677
678 # # -intrinsics
679 # $CC $CFLAGS _testprog.c -o _testprog -intrinsics 2> /dev/null
680 # if [ -x _testprog ]; then
681 # CFLAGS="-intrinsics $CFLAGS"
682 # fi
683 # rm -f _testprog
684
685 # -fast
686 printf "checking whether -fast can be used... "
687 $CC $CFLAGS _testprog.c -o _testprog -fast 2> /dev/null
688 if [ -x _testprog ]; then
689 CFLAGS="-fast $CFLAGS"
690 printf "yes\n"
691 else
692 printf "no\n"
693 fi
694 rm -f _testprog
695 fi
696
697
698 # -fpeephole
699 printf "checking whether -fpeephole can be used... "
700 $CC $CFLAGS -fpeephole _testprog.c -o _testprog > _testprog.stdout 2>&1
701 cat _testprog.stdout >> _testprog.error
702 if grep peephole _testprog.error > /dev/null 2>&1; then
703 printf "no\n"
704 else
705 if [ -x _testprog ]; then
706 CFLAGS="-fpeephole $CFLAGS"
707 printf "yes\n"
708 else
709 printf "no\n"
710 fi
711 fi
712 rm -f _testprog _testprog.error _testprog.stdout
713
714
715 # -fomit-frame-pointer
716 printf "checking whether -fomit-frame-pointer can be used... "
717 $CC $CFLAGS -fomit-frame-pointer _testprog.c -o \
718 _testprog 1> _testprog.stdout 2>&1
719 cat _testprog.stdout >> _testprog.error
720 if grep frame _testprog.error > /dev/null 2>&1; then
721 printf "no\n"
722 else
723 if [ -x _testprog ]; then
724 CFLAGS="-fomit-frame-pointer $CFLAGS"
725 printf "yes\n"
726 else
727 printf "no\n"
728 fi
729 fi
730 rm -f _testprog _testprog.error _testprog.stdout
731
732
733 # -lrt for nanosleep?
734 printf "checking whether -lrt is required for nanosleep... "
735 printf "#include <time.h>\n#include <stdio.h>
736 int main(int argc, char *argv[]){nanosleep(NULL,NULL);return 0;}\n" > _testns.c
737 $CC $CFLAGS _testns.c -o _testns 2> /dev/null
738 if [ ! -x _testns ]; then
739 $CC $CFLAGS -lrt _testns.c -o _testns 2> /dev/null
740 if [ ! -x _testns ]; then
741 printf "WARNING! COULD NOT COMPILE WITH nanosleep AT ALL!\n"
742 else
743 # -lrt for nanosleep
744 OTHERLIBS="-lrt $OTHERLIBS"
745 printf "yes\n"
746 fi
747 else
748 printf "no\n"
749 fi
750 rm -f _testns.c _testns
751
752
753 # -lresolv for inet_pton?
754 printf "checking whether -lresolv is required for inet_pton... "
755 printf "int inet_pton(void); int main(int argc, " > _testr.c
756 printf "char *argv[]) { return inet_pton(); }\n" >> _testr.c
757 $CC $CFLAGS _testr.c -o _testr 2> /dev/null
758 if [ ! -x _testr ]; then
759 $CC $CFLAGS _testr.c -lresolv -o _testr 2> /dev/null
760 if [ ! -x _testr ]; then
761 $CC $CFLAGS _testr.c -lresolv -lnsl -o _testr 2> /dev/null
762 if [ ! -x _testr ]; then
763 printf "no, using inet_aton\n"
764 else
765 # -lresolv -lnsl for inet_pton
766 OTHERLIBS="-lresolv -lnsl $OTHERLIBS"
767 printf "yes (and -lnsl)\n"
768 printf "#define HAVE_INET_PTON\n" >> config.h
769 fi
770 else
771 # -lresolv for inet_pton
772 OTHERLIBS="-lresolv $OTHERLIBS"
773 printf "yes\n"
774 printf "#define HAVE_INET_PTON\n" >> config.h
775 fi
776 else
777 printf "no\n"
778 printf "#define HAVE_INET_PTON\n" >> config.h
779 fi
780 rm -f _testr.[co] _testr
781
782
783 # -lm?
784 printf "checking for math libs..."
785 printf "#include <math.h>\nint main(int argc, char *argv[]) { " > _testr.c
786 printf "double x = sqrt((double)argc); return (int)x; }\n" >> _testr.c
787 $CC $CFLAGS _testr.c -o _testr 2> /dev/null
788 if [ ! -x _testr ]; then
789 $CC $CFLAGS _testr.c -lm -o _testr 2> /dev/null
790 if [ ! -x _testr ]; then
791 $CC $CFLAGS _testr.c -lm -lcpml -o _testr 2> /dev/null
792 if [ ! -x _testr ]; then
793 printf "\nWARNING! Could not compile math test "
794 printf "at all!\nContinuing anyway.\n\n"
795 else
796 # -lm AND -lcpml
797 OTHERLIBS="-lm -lcpml $OTHERLIBS"
798 printf " -lm -lcpml\n"
799 fi
800 else
801 # Normal -lm
802 OTHERLIBS="-lm $OTHERLIBS"
803 printf " -lm\n"
804 fi
805 else
806 printf " none needed\n"
807 fi
808 rm -f _testr.[co] _testr
809
810
811 # strlcpy missing?
812 printf "checking for strlcpy... "
813 printf "#include <string.h>
814 int main(int argc, char *argv[]) { char *p; char *q; size_t x;
815 x = strlcpy(p, q, 50); return 0;}\n" > _tests.c
816 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
817 if [ ! -x _tests ]; then
818 printf "missing, using mystrlcpy\n"
819 printf "#define strlcpy mystrlcpy\n" >> config.h
820 printf "#define strlcat mystrlcat\n" >> config.h
821 printf "#define USE_STRLCPY_REPLACEMENTS\n" >> config.h
822 else
823 printf "found\n"
824 fi
825 rm -f _tests.[co] _tests
826
827
828 # strtoull missing?
829 printf "checking for strtoull... "
830 printf "#include <stdlib.h>
831 #include <limits.h>
832 #include <stdio.h>
833 int main(int argc, char *argv[]) {
834 long long x = strtoull(argv[1], NULL, 0); return 0;}\n" > _tests.c
835 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
836 if [ ! -x _tests ]; then
837 printf "missing, using mystrtoull\n"
838 printf "#define strtoull mystrtoull\n" >> config.h
839 else
840 printf "found\n"
841 fi
842 rm -f _tests.[co] _tests
843
844
845 # mkstemp missing?
846 printf "checking for mkstemp... "
847 printf "#include <unistd.h>
848 int main(int argc, char *argv[]) { int x; char *y = \"abc\";
849 x = mkstemp(y); return 0;}\n" > _tests.c
850 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
851 if [ ! -x _tests ]; then
852 printf "missing, using workaround\n"
853 printf "#define mkstemp mymkstemp\n" >> config.h
854 else
855 printf "found\n"
856 fi
857 rm -f _tests.[co] _tests
858
859
860 # fseeko missing?
861 printf "checking for fseeko... "
862 printf "#include <stdlib.h>
863 #include <limits.h>
864 #include <stdio.h>
865 #include <sys/types.h>
866 int main(int argc, char *argv[]) { fseeko(NULL, 0, 0); return 0;}\n" > _tests.c
867 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
868 if [ ! -x _tests ]; then
869 printf "missing\n"
870 printf "WARNING! fseeko missing from libc. Using a hack, "
871 printf "which probably doesn't work.\n"
872 printf "#define HACK_FSEEKO\n" >> config.h
873 else
874 printf "found\n"
875 fi
876 rm -f _tests.[co] _tests
877
878
879 # socklen_t missing?
880 # (for example really old OpenBSD/arc 2.3, inside the emulator)
881 printf "checking for socklen_t... "
882 printf "#include <stdlib.h>
883 #include <stdio.h>
884 #include <sys/types.h>
885 #include <sys/socket.h>
886 int main(int argc, char *argv[]) { socklen_t x; return 0;}\n" > _tests.c
887 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
888 if [ ! -x _tests ]; then
889 printf "no, using int\n"
890 CFLAGS="$CFLAGS -Dsocklen_t=int"
891 else
892 printf "socklen_t\n"
893 fi
894 rm -f _tests.[co] _tests
895
896
897 # MAP_ANON missing? (On some HP-UX systems? Use MAP_ANONYMOUS instead.)
898 printf "checking for MAP_ANON... "
899 rm -f _tests
900 printf "#include <stdio.h>
901 #include <sys/types.h>
902 #include <sys/mman.h>
903 int main(int argc, char *argv[]) { int x = MAP_ANON; return 0;}\n" > _tests.c
904 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
905 if [ ! -x _tests ]; then
906 printf "#include <stdio.h>
907 #include <sys/types.h>
908 #include <sys/mman.h>
909 int main(int argc, char *argv[])
910 { int x = MAP_ANONYMOUS; return 0;}\n" > _tests.c
911 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
912 if [ ! -x _tests ]; then
913 printf "no\n\n"
914 printf "WARNING! Neither MAP_ANON nor MAP_ANONYMOUS work on "
915 printf "this system.\nPlease try to compile anyway, and report"
916 printf " to me whether it builds/runs or not.\n\n"
917 printf "#define MAP_ANON 0\n" >> config.h
918 printf "#define NO_MAP_ANON\n" >> config.h
919 else
920 printf "using MAP_ANONYMOUS\n"
921 printf "#define MAP_ANON MAP_ANONYMOUS\n" >> config.h
922 fi
923 else
924 printf "yes\n"
925 fi
926 rm -f _tests.[co] _tests
927
928
929 # Check for 64-bit off_t:
930 printf "checking for 64-bit off_t... "
931 printf "#include <stdio.h>\n#include <inttypes.h>\n#include <sys/types.h>\n
932 int main(int argc, char *argv[]){printf(\"%%i\\\n\",
933 (int)sizeof(off_t));return 0;}\n" > _testoff.c
934 $CC $CFLAGS _testoff.c -o _testoff 2> /dev/null
935 if [ ! -x _testoff ]; then
936 printf "\nWARNING! COULD NOT COMPILE off_t TEST PROGRAM AT ALL!\n"
937 else
938 if [ z`./_testoff` = z8 ]; then
939 printf "yes\n"
940 else
941 $CC $CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
942 _testoff.c -o _testoff 2> /dev/null
943 if [ ! -x _testoff ]; then
944 printf "\nWARNING! COULD NOT COMPILE off_t TEST "
945 printf "PROGRAM!\n"
946 else
947 if [ z`./_testoff` = z8 ]; then
948 CFLAGS="-D_FILE_OFFSET_BITS=64 $CFLAGS"
949 CFLAGS="-D_LARGEFILE_SOURCE $CFLAGS"
950 printf "using -D_FILE_OFFSET_BITS=64"
951 printf " -D_LARGEFILE_SOURCE\n"
952 else
953 printf "NO\n"
954 printf "Warning! No 64-bit off_t. Continuing "
955 printf "anyway.\n"
956 fi
957 fi
958 fi
959 fi
960 rm -f _testoff.c _testoff
961
962
963 # Check for u_int8_t etc:
964 printf "checking for u_int8_t... "
965 printf "#include <stdio.h>\n#include <inttypes.h>\n#include <sys/types.h>\n
966 int main(int argc, char *argv[]){printf(\"%%i\\\n\",
967 (int)sizeof(u_int8_t));return 0;}\n" > _testuint.c
968 $CC $CFLAGS _testuint.c -o _testuint 2> /dev/null
969 if [ ! -x _testuint ]; then
970 rm -f _testuint*
971 printf "#include <stdio.h>\n#include <inttypes.h>
972 \n#include <sys/types.h>\nint main(int argc, char *argv[])
973 {printf(\"%%i\\\n\", (int)sizeof(uint8_t));return 0;}\n" > _testuint.c
974 $CC $CFLAGS _testuint.c -o _testuint 2> /dev/null
975 if [ ! -x _testuint ]; then
976 printf "no\n\nERROR: No u_int8_t or uint8_t. Aborting\n"
977 # TODO: Automagically detect using various combinations
978 # of char, int, short, long etc.
979 exit
980 fi
981
982 printf "typedef uint8_t u_int8_t;\n" >> config.h
983 printf "typedef uint16_t u_int16_t;\n" >> config.h
984 printf "typedef uint32_t u_int32_t;\n" >> config.h
985 printf "typedef uint64_t u_int64_t;\n" >> config.h
986 printf "uint8_t\n"
987 else
988 printf "yes\n"
989 fi
990 rm -f _testuint.c _testuint
991
992
993 ###############################################################################
994 #
995 # Dynamic binary translation (BINTRANS):
996 #
997 ###############################################################################
998
999 printf "checking for bintrans backend... "
1000
1001 BINTRANS=NO
1002
1003 if [ z$ENABLEMIPS = zNO ]; then
1004 printf "NO!\nTEMPORARY HACK/PROBLEM: Disabling bintrans for now,\n"
1005 printf "until things have stabilized.\n"
1006 NOBINTRANS=YES
1007 fi
1008
1009 if [ z$NOBINTRANS = zYES ]; then
1010 printf "disabled\n"
1011 else
1012 # Alpha:
1013 if [ z"`uname -m`" = zalpha ]; then
1014 printf "#define ALPHA\n" >> config.h
1015 printf "#define BINTRANS\n" >> config.h
1016 printf "Alpha\n"
1017 BINTRANS=YES
1018 fi
1019
1020 # x86: (all machines ending in "86" are treated as i386)
1021 if [ z"`uname -m|rev|cut -c1-2`" = z68 ]; then
1022 printf "#define I386\n" >> config.h
1023 printf "#define BINTRANS\n" >> config.h
1024 printf "i386\n"
1025 BINTRANS=YES
1026 fi
1027
1028 # MIPS not yet
1029 # # MIPS:
1030 # if [ z"`uname -m`" = zmips ]; then
1031 # printf "#define MIPS\n" >> config.h
1032 # printf "#define BINTRANS\n" >> config.h
1033 # printf "MIPS\n"
1034 # BINTRANS=YES
1035 # fi
1036
1037 # # UltraSPARC:
1038 # if [ z"`uname -m`" = zsun4u ]; then
1039 # printf "#define SPARCV9\n" >> config.h
1040 # printf "#define BINTRANS\n" >> config.h
1041 # printf "SPARC V9\n"
1042 # BINTRANS=YES
1043 # else
1044 # if [ z"`uname -m`" = zsparc64 ]; then
1045 # printf "#define SPARCV9\n" >> config.h
1046 # printf "#define BINTRANS\n" >> config.h
1047 # printf "SPARC V9\n"
1048 # BINTRANS=YES
1049 # fi
1050 # fi
1051
1052 if [ z$BINTRANS = zNO ]; then
1053 printf "not supported yet on this arch\n"
1054 fi
1055 fi
1056
1057
1058 ###############################################################################
1059
1060 # Prefetch support?
1061 printf "checking for asm prefetch support... "
1062 if [ z"`uname -m`" = zalpha ]; then
1063 rm -f _alpha_asm_test.c _alpha_asm_test
1064 printf 'int main(int argc, char *argv[])
1065 { int x; int *y = &x; asm ("ldl $31,0(%%0)" : : "g" (y));
1066 return 0; }\n' > _alpha_asm_test.c
1067 $CC $CFLAGS -O2 _alpha_asm_test.c -o _alpha_asm_test \
1068 > /dev/null 2> /dev/null
1069 if [ -x _alpha_asm_test ]; then
1070 # printf "#define HAVE_PREFETCH\n" >> config.h
1071 printf "#define PREFETCH(x) asm(\"ldl" >> config.h
1072 printf " \$31,0(%%0)\" : : \"g\" (x))\n" >> config.h
1073 echo "yes"
1074 PREFSUP=YES
1075 fi
1076 rm -f _alpha_asm_test.c _alpha_asm_test
1077 fi
1078 if [ z$PREFSUP = z ]; then
1079 printf "#define PREFETCH(x) { }\n" >> config.h
1080 echo "no"
1081 fi
1082
1083
1084 ###############################################################################
1085
1086 INCLUDE=-Iinclude/
1087 DINCLUDE=-I../include/
1088
1089 echo C compiler flags: $CFLAGS $CWARNINGS
1090 echo Linker flags: $OTHERLIBS
1091 echo "CWARNINGS=$CWARNINGS" >> _Makefile.header
1092 echo "COPTIM=$CFLAGS" >> _Makefile.header
1093 echo "INCLUDE=$INCLUDE" >> _Makefile.header
1094 echo "DINCLUDE=$DINCLUDE" >> _Makefile.header
1095 echo "CC=$CC" >> _Makefile.header
1096 echo "OTHERLIBS=$OTHERLIBS" >> _Makefile.header
1097 echo "" >> _Makefile.header
1098
1099
1100 printf "Regression test setup: (not really needed to build gxemul)\n"
1101
1102
1103 # 64-bit MIPS cross-compiler:
1104
1105 MIPS=''
1106 if [ z$ENABLEMIPS = zYES ]; then
1107 printf "Checking for a GNU cross-compiler for 64-bit MIPS... "
1108 echo 'int f(int x) { return x; }' > _testprog.c
1109
1110 for MIPS_TRY in mips64-unknown-elf mips64-elf mips-unknown-elf64; do
1111 printf '#!/bin/sh\n'$MIPS_TRY'-gcc _testprog.c -c\n' > _test.sh
1112 chmod 755 _test.sh
1113 rm -f _testprog.o
1114 ./_test.sh > /dev/null 2> /dev/null
1115 if [ -f _testprog.o ]; then
1116 MIPS=$MIPS_TRY
1117 break
1118 fi
1119 rm -f _testprog.o
1120 done
1121
1122 if [ z$MIPS = z ]; then
1123 echo "none"
1124 else
1125 echo $MIPS"-gcc"
1126 fi
1127 fi
1128 rm -f _testprog* _test.sh
1129
1130 echo "MIPS_CC="$MIPS"-gcc -g -O2 -fno-builtin -fschedule-insns" \
1131 "-mips64 -mabi=64" >> _Makefile.header
1132 echo "MIPS_AS="$MIPS"-as -mabi=64 -mips64" >> _Makefile.header
1133 echo "MIPS_LD="$MIPS"-ld -Ttext 0xa800000000030000 -e main" \
1134 "--oformat=elf64-bigmips" >> _Makefile.header
1135 echo "" >> _Makefile.header
1136
1137
1138 ## PPC64 cross-assembler:
1139 #
1140 #PPC=''
1141 #if [ z$ENABLEPPC = zYES ]; then
1142 # printf "Checking for a GNU cross-assembler for 64-bit PPC... "
1143 # echo 'nop' > _testprog.s
1144 #
1145 # for a in ppc64 powerpc64; do
1146 # for b in unknown; do
1147 # for c in elf elf64 linux linux64 aix aix5; do
1148 # PPC_TRY=$a-$b-$c
1149 # printf '#!/bin/sh\n'$PPC_TRY'-as _testprog.s' > _test.sh
1150 # printf ' -o _testprog.o\n' >> _test.sh
1151 # chmod 755 _test.sh
1152 # rm -f _testprog.o
1153 # ./_test.sh > /dev/null 2> /dev/null
1154 # if [ -f _testprog.o ]; then
1155 # PPC=$PPC_TRY
1156 # break
1157 # fi
1158 # rm -f _testprog.o
1159 # done
1160 # done
1161 # done
1162 #
1163 # if [ z$PPC = z ]; then
1164 # echo "none"
1165 # else
1166 # echo $PPC"-as"
1167 # fi
1168 #fi
1169 #rm -f _testprog* _test.sh
1170 #
1171 ##echo "PPC_CC="$PPC"-gcc -g -O2 -fno-builtin" >> _Makefile.header
1172 #echo "PPC_AS="$PPC"-as" >> _Makefile.header
1173 #echo "PPC_LD="$PPC"-ld -e main" >> _Makefile.header
1174 #echo "" >> _Makefile.header
1175
1176
1177 ## SPARC64 cross-compiler:
1178 #
1179 #SPARC=''
1180 #if [ z$ENABLESPARC = zYES ]; then
1181 # printf "Checking for a GNU cross-compiler for 64-bit SPARC... "
1182 # echo 'int f(int x) { return x; }' > _testprog.c
1183 #
1184 # for a in sparc64; do
1185 # for b in unknown; do
1186 # for c in elf elf64; do
1187 # SPARC_TRY=$a-$b-$c
1188 # printf '#!/bin/sh\n'$SPARC_TRY'-gcc _testprog.c -c' > _test.sh
1189 # printf ' -o _testprog.o\n' >> _test.sh
1190 # chmod 755 _test.sh
1191 # rm -f _testprog.o
1192 # ./_test.sh > /dev/null 2> /dev/null
1193 # if [ -f _testprog.o ]; then
1194 # SPARC=$SPARC_TRY
1195 # break
1196 # fi
1197 # rm -f _testprog.o
1198 # done
1199 # done
1200 # done
1201 #
1202 # if [ z$SPARC = z ]; then
1203 # echo "none"
1204 # else
1205 # echo $SPARC"-gcc"
1206 # fi
1207 #fi
1208 #rm -f _testprog* _test.sh
1209 #
1210 #echo "SPARC_CC="$SPARC"-gcc -g -O2 -fno-builtin" >> _Makefile.header
1211 #echo "SPARC_AS="$SPARC"-as" >> _Makefile.header
1212 #echo "SPARC_LD="$SPARC"-ld -e main" >> _Makefile.header
1213 #echo "" >> _Makefile.header
1214
1215
1216 # Create the Makefiles:
1217
1218 for a in . src src/devices src/devices/fonts tests; do
1219 echo "creating $a/Makefile"
1220 touch $a/Makefile
1221 cat _Makefile.header > $a/Makefile
1222 cat $a/Makefile.skel >> $a/Makefile
1223 done
1224
1225 # Tail of config.h:
1226 printf "\n#endif /* CONFIG_H */\n" >> config.h
1227
1228 # Remove temporary Makefile header:
1229 rm -f _Makefile.header
1230
1231 echo Configured. You may now run make to build gxemul.

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26