/[gxemul]/trunk/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 /trunk/configure

Parent Directory Parent Directory | Revision Log Revision Log


Revision 20 - (show annotations)
Mon Oct 8 16:19:23 2007 UTC (16 years, 6 months ago) by dpavlin
File size: 36216 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.1055 2005/11/25 22:48:36 debug Exp $
20051031	Adding disassembly support for more ARM instructions (clz,
		smul* etc), and adding a hack to support "new tiny" pages
		for StrongARM.
20051101	Minor documentation updates (NetBSD 2.0.2 -> 2.1, and OpenBSD
		3.7 -> 3.8, and lots of testing).
		Changing from 1-sector PIO mode 0 transfers to 128-sector PIO
		mode 3 (in dev_wdc).
		Various minor ARM dyntrans updates (pc-relative loads from
		within the same page as the instruction are now treated as
		constant "mov").
20051102	Re-enabling instruction combinations (they were accidentally
		disabled).
		Dyntrans TLB entries are now overwritten using a round-robin
		scheme instead of randomly. This increases performance.
		Fixing a typo in file.c (thanks to Chuan-Hua Chang for
		noticing it).
		Experimenting with adding ATAPI support to dev_wdc (to make
		emulated *BSD detect cdroms as cdroms, not harddisks).
20051104	Various minor updates.
20051105	Continuing on the ATAPI emulation. Seems to work well enough
		for a NetBSD/cats installation, but not OpenBSD/cats.
		Various other updates.
20051106	Modifying the -Y command line option to allow scaleup with
		certain graphic controllers (only dev_vga so far), not just
		scaledown.
		Some minor dyntrans cleanups.
20051107	Beginning a cleanup up the PCI subsystem (removing the
		read_register hack, etc).
20051108	Continuing the cleanup; splitting up some pci devices into a
		normal autodev device and some separate pci glue code.
20051109	Continuing on the PCI bus stuff; all old pci_*.c have been
		incorporated into normal devices and/or rewritten as glue code
		only, adding a dummy Intel 82371AB PIIX4 for Malta (not really
		tested yet).
		Minor pckbc fix so that Linux doesn't complain.
		Working on the DEC 21143 NIC (ethernet mac rom stuff mostly).
		Various other minor fixes.
20051110	Some more ARM dyntrans fine-tuning (e.g. some instruction
		combinations (cmps followed by conditional branch within the
		same page) and special cases for DPIs with regform when the
		shifter isn't used).
20051111	ARM dyntrans updates: O(n)->O(1) for just-mark-as-non-
		writable in the generic pc_to_pointers function, and some other
		minor hacks.
		Merging Cobalt and evbmips (Malta) ISA interrupt handling,
		and some minor fixes to allow Linux to accept harddisk irqs.
20051112	Minor device updates (pckbc, dec21143, lpt, ...), most
		importantly fixing the ALI M1543/M5229 so that harddisk irqs
		work with Linux/CATS.
20051113	Some more generalizations of the PCI subsystem.
		Finally took the time to add a hack for SCSI CDROM TOCs; this
		enables OpenBSD to use partition 'a' (as needed by the OpenBSD
		installer), and Windows NT's installer to get a bit further.
		Also fixing dev_wdc to allow Linux to detect ATAPI CDROMs.
		Continuing on the DEC 21143.
20051114	Minor ARM dyntrans tweaks; ARM cmps+branch optimization when
		comparing with 0, and generalizing the xchg instr. comb.
		Adding disassembly of ARM mrrc/mcrr and q{,d}{add,sub}.
20051115	Continuing on various PPC things (BATs, other address trans-
		lation things, various loads/stores, BeBox emulation, etc.).
		Beginning to work on PPC interrupt/exception support.
20051116	Factoring out some code which initializes legacy ISA devices
		from those machines that use them (bus_isa).
		Continuing on PPC interrupt/exception support.
20051117	Minor Malta fixes: RTC year offset = 80, disabling a speed hack
		which caused NetBSD to detect a too fast cpu, and adding a new
		hack to make Linux detect a faster cpu.
		Continuing on the Artesyn PM/PPC emulation mode.
		Adding an Algor emulation skeleton (P4032 and P5064);
		implementing some of the basics.
		Continuing on PPC emulation in general; usage of unimplemented
		SPRs is now easier to track, continuing on memory/exception
		related issues, etc.
20051118	More work on PPC emulation (tgpr0..3, exception handling,
		memory stuff, syscalls, etc.).
20051119	Changing the ARM dyntrans code to mostly use cpu->pc, and not
		necessarily use arm reg 15. Seems to work.
		Various PPC updates; continuing on the PReP emulation mode.
20051120	Adding a workaround/hack to dev_mc146818 to allow NetBSD/prep
		to detect the clock.
20051121	More cleanup of the PCI bus (memory and I/O bases, etc).
		Continuing on various PPC things (decrementer and timebase,
		WDCs on obio (on PReP) use irq 13, not 14/15).
20051122	Continuing on the CPC700 controller (interrupts etc) for PMPPC,
		and on PPC stuff in general.
		Finally! After some bug fixes to the virtual to physical addr
		translation, NetBSD/{prep,pmppc} 2.1 reach userland and are
		stable enough to be interacted with.
		More PCI updates; reverse-endian device access for PowerPC etc.
20051123	Generalizing the IEEE floating point subsystem (moving it out
		from src/cpus/cpu_mips_coproc.c into a new src/float_emul.c).
		Input via slave xterms was sometimes not really working; fixing
		this for ns16550, and a warning message is now displayed if
		multiple non-xterm consoles are active.
		Adding some PPC floating point support, etc.
		Various interrupt related updates (dev_wdc, _ns16550, _8259,
		and the isa32 common code in machine.c).
		NetBSD/prep can now be installed! :-) (Well, with some manual
		commands necessary before running sysinst.) Updating the
		documentation and various other things to reflect this.
20051124	Various minor documentation updates.
		Continuing the work on the DEC 21143 NIC.
20051125	LOTS of work on the 21143. Both OpenBSD and NetBSD work fine
		with it now, except that OpenBSD sometimes gives a time-out
		warning.
		Minor documentation updates.

==============  RELEASE 0.3.7  ==============


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.180 2005/11/23 22:03:23 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 # Figure out if this is a stable version (0.x.x).
62 X=`basename \`pwd\`|cut -d \- -f 2-|cut -c1-2`
63 if [ z"$X" = z0. ]; then
64 # Stable:
65 ENABLEARM=YES
66 ENABLEMIPS=YES
67 ENABLEPPC=YES
68 else
69 # Development:
70 ENABLEALPHA=YES
71 ENABLEARM=YES
72 ENABLEAVR=NO
73 ENABLEHPPA=NO
74 ENABLEI960=NO
75 ENABLEIA64=NO
76 ENABLEM68K=NO
77 ENABLEMIPS=YES
78 ENABLENEWMIPS=NO
79 ENABLEPPC=YES
80 ENABLESH=NO
81 ENABLESPARC=NO
82 ENABLEX86=NO
83 fi
84
85 if [ z"$*" != z ]; then
86 # Parse command line options:
87 for a in $*; do
88 if [ z$a = z--disable-x ]; then
89 NOX11=YES
90 else if [ z$a = z--always32 ]; then
91 ALWAYS32=YES
92 else if [ z$a = z--tracenull ]; then
93 TRACENULL=YES
94 else if [ z$a = z--disable-bintrans ]; then
95 NOBINTRANS=YES
96 else if [ z$a = z--enable-bintrans ]; then
97 NOBINTRANS=NO
98 else if [ z$a = z--disable-mips16 ]; then
99 MIPS16=NO
100 else if [ z$a = z--enable-mips16 ]; then
101 MIPS16=YES
102 else if [ z$a = z--enable-all ]; then
103 ENABLEALPHA=YES
104 ENABLEARM=YES
105 ENABLEAVR=YES
106 ENABLEHPPA=YES
107 ENABLEI960=YES
108 ENABLEIA64=YES
109 ENABLEM68K=YES
110 ENABLEMIPS=YES
111 ENABLENEWMIPS=YES
112 ENABLEPPC=YES
113 ENABLESH=YES
114 ENABLESPARC=YES
115 ENABLEX86=YES
116 else if [ z$a = z--disable-alpha ]; then
117 ENABLEALPHA=NO
118 else if [ z$a = z--enable-alpha ]; then
119 ENABLEALPHA=YES
120 else if [ z$a = z--disable-arm ]; then
121 ENABLEARM=NO
122 else if [ z$a = z--enable-arm ]; then
123 ENABLEARM=YES
124 else if [ z$a = z--disable-avr ]; then
125 ENABLEAVR=NO
126 else if [ z$a = z--enable-avr ]; then
127 ENABLEAVR=YES
128 else if [ z$a = z--disable-hppa ]; then
129 ENABLEHPPA=NO
130 else if [ z$a = z--enable-hppa ]; then
131 ENABLEHPPA=YES
132 else if [ z$a = z--disable-i960 ]; then
133 ENABLEI960=NO
134 else if [ z$a = z--enable-i960 ]; then
135 ENABLEI960=YES
136 else if [ z$a = z--disable-ia64 ]; then
137 ENABLEIA64=NO
138 else if [ z$a = z--enable-ia64 ]; then
139 ENABLEIA64=YES
140 else if [ z$a = z--disable-m68k ]; then
141 ENABLEM68K=NO
142 else if [ z$a = z--enable-m68k ]; then
143 ENABLEM86K=YES
144 else if [ z$a = z--disable-mips ]; then
145 ENABLEMIPS=NO
146 else if [ z$a = z--enable-mips ]; then
147 ENABLEMIPS=YES
148 else if [ z$a = z--disable-newmips ]; then
149 ENABLENEWMIPS=NO
150 else if [ z$a = z--enable-newmips ]; then
151 ENABLENEWMIPS=YES
152 else if [ z$a = z--disable-ppc ]; then
153 ENABLEPPC=NO
154 else if [ z$a = z--enable-ppc ]; then
155 ENABLEPPC=YES
156 else if [ z$a = z--disable-sh ]; then
157 ENABLESH=NO
158 else if [ z$a = z--enable-sh ]; then
159 ENABLESH=YES
160 else if [ z$a = z--disable-sparc ]; then
161 ENABLESPARC=NO
162 else if [ z$a = z--enable-sparc ]; then
163 ENABLESPARC=YES
164 else if [ z$a = z--disable-x86 ]; then
165 ENABLEX86=NO
166 else if [ z$a = z--enable-x86 ]; then
167 ENABLEX86=YES
168 else if [ z$a = z--disable-delays ]; then
169 DELAYS=NO
170 else if [ z$a = z--enable-delays ]; then
171 DELAYS=YES
172 else if [ z$a = z--disable-caches ]; then
173 CACHES=NO
174 else if [ z$a = z--enable-caches ]; then
175 CACHES=YES
176 else if [ z$a = z--help ]; then
177 echo "usage: $0 [options]"
178
179 printf "\nGeneral options:\n\n"
180
181 echo " --disable-bintrans configure without the" \
182 "old binary translation subsystem,"
183 echo " even if the host" \
184 "supports it"
185 echo " --disable-x don't include X11 support"
186
187 printf "\nDevelopment (debug) options:\n\n"
188
189 echo " --always32 enable ALWAYS_SIGNEXTEND_32"\
190 "(for hunting down 32-bit bugs)"
191 echo " --tracenull enable" \
192 "TRACE_NULL_CRASHES (for bug hunting)"
193 printf " --enable-caches enable cache emulation"
194 printf " (BUGGY)\n"
195 echo " --enable-delays enable instruction" \
196 "latency/delay emulation"
197
198 printf " --enable-all enable everything\n"
199
200 if [ z$ENABLEALPHA = zYES ]; then
201 printf " --disable-alpha disable "
202 else
203 printf " --enable-alpha enable "
204 fi
205 printf "Alpha CPU emulation\n"
206
207 if [ z$ENABLEARM = zYES ]; then
208 printf " --disable-arm disable "
209 else
210 printf " --enable-arm enable "
211 fi
212 printf "ARM CPU emulation\n"
213
214 if [ z$ENABLEAVR = zYES ]; then
215 printf " --disable-avr disable "
216 else
217 printf " --enable-avr enable "
218 fi
219 printf "Atmel AVR CPU emulation\n"
220
221 if [ z$ENABLEHPPA = zYES ]; then
222 printf " --disable-hppa disable "
223 else
224 printf " --enable-hppa enable "
225 fi
226 printf "HPPA CPU emulation\n"
227
228 if [ z$ENABLEI960 = zYES ]; then
229 printf " --disable-i960 disable "
230 else
231 printf " --enable-i960 enable "
232 fi
233 printf "i960 CPU emulation\n"
234
235 if [ z$ENABLEIA64 = zYES ]; then
236 printf " --disable-ia64 disable "
237 else
238 printf " --enable-ia64 enable "
239 fi
240 printf "IA64 CPU emulation\n"
241
242 if [ z$ENABLEM68K = zYES ]; then
243 printf " --disable-m68k disable "
244 else
245 printf " --enable-m68k enable "
246 fi
247 printf "M68K CPU emulation\n"
248
249 if [ z$ENABLEMIPS = zYES ]; then
250 printf " --disable-mips disable "
251 else
252 printf " --enable-mips enable "
253 fi
254 printf "MIPS CPU emulation\n"
255
256 if [ z$ENABLENEWMIPS = zYES ]; then
257 printf " --disable-newmips disable "
258 else
259 printf " --enable-newmips enable "
260 fi
261 printf "(New, dyntrans) MIPS CPU emulation\n"
262
263 if [ z$ENABLEPPC = zYES ]; then
264 printf " --disable-ppc disable "
265 else
266 printf " --enable-ppc enable "
267 fi
268 printf "POWER/PPC CPU emulation\n"
269
270 if [ z$ENABLESH = zYES ]; then
271 printf " --disable-sh disable "
272 else
273 printf " --enable-sh enable "
274 fi
275 printf "SH CPU emulation\n"
276
277 if [ z$ENABLESPARC = zYES ]; then
278 printf " --disable-sparc disable "
279 else
280 printf " --enable-sparc enable "
281 fi
282 printf "SPARC CPU emulation\n"
283
284 if [ z$ENABLEX86 = zYES ]; then
285 printf " --disable-x86 disable "
286 else
287 printf " --enable-x86 enable "
288 fi
289 printf "x86 CPU emulation\n"
290
291 echo " --enable-mips16 enable MIPS16 support"
292
293 printf "\n(Pretty much all of these options are only"
294 printf " meaningful during the development of\nthe"
295 printf " emulator, and should not be used when "
296 printf "compiling a stable version.)\n"
297 exit
298 else
299 echo "Invalid option: $a"
300 echo "Run $0 --help to get a list of" \
301 "available options."
302 exit
303 fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi
304 fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi; fi
305 fi; fi; fi; fi; fi; fi; fi
306 done
307 fi
308
309
310 ###############################################################################
311 #
312 # Configure options:
313 #
314 # This creates a config.h file, which is then included from include/misc.h.
315 #
316 ###############################################################################
317
318 # Head of config.h:
319 printf "/*
320 * THIS FILE IS AUTOMATICALLY CREATED BY configure!
321 * DON'T EDIT THIS FILE MANUALLY, IT WILL BE OVERWRITTEN.
322 */
323 \n#ifndef CONFIG_H\n#define CONFIG_H\n\n" > config.h
324
325
326 # Figure out if VERSION should be defined.
327 X=`basename \`pwd\`|cut -d \- -f 2-`
328 if [ z"$X" = zgxemul ]; then
329 echo '/* No VERSION defined. */' >> config.h
330 else
331 printf "#define VERSION \"$X\"\n" >> config.h
332 fi
333
334
335 ZZ=`echo compiled on \`uname\`/\`uname -m\`, \`date\``
336 printf "#define COMPILE_DATE \"$ZZ\"\n" >> config.h
337
338
339
340 # Support for various CPU types:
341 if [ z$MIPS16 = zYES ]; then
342 printf 'Enabling MIPS16 support. '
343 printf 'NOTE: MIPS16 support is not really working yet.\n'
344 printf "#define ENABLE_MIPS16\n" >> config.h
345 fi
346 if [ z$ENABLEALPHA = zYES ]; then
347 printf "#define ENABLE_ALPHA\n" >> config.h
348 CPU_ARCHS="$CPU_ARCHS cpu_alpha.o cpu_alpha_palcode.o"
349 CPU_TOOLS="$CPU_TOOLS generate_alpha_misc"
350 fi
351 if [ z$ENABLEARM = zYES ]; then
352 printf "#define ENABLE_ARM\n" >> config.h
353 CPU_ARCHS="$CPU_ARCHS cpu_arm.o cpu_arm_coproc.o memory_arm.o "
354 CPU_ARCHS="$CPU_ARCHS tmp_arm_dpi.o tmp_arm_loadstore.o tmp_arm_r.o"
355 CPU_ARCHS="$CPU_ARCHS tmp_arm_r0.o tmp_arm_r1.o"
356 CPU_ARCHS="$CPU_ARCHS tmp_arm_r2.o tmp_arm_r3.o"
357 CPU_ARCHS="$CPU_ARCHS tmp_arm_r4.o tmp_arm_r5.o"
358 CPU_ARCHS="$CPU_ARCHS tmp_arm_r6.o tmp_arm_r7.o"
359 CPU_ARCHS="$CPU_ARCHS tmp_arm_r8.o tmp_arm_r9.o"
360 CPU_ARCHS="$CPU_ARCHS tmp_arm_ra.o tmp_arm_rb.o"
361 CPU_ARCHS="$CPU_ARCHS tmp_arm_rc.o tmp_arm_rd.o"
362 CPU_ARCHS="$CPU_ARCHS tmp_arm_re.o tmp_arm_rf.o tmp_arm_multi.o"
363 CPU_TOOLS="$CPU_TOOLS generate_arm_dpi generate_arm_r"
364 CPU_TOOLS="$CPU_TOOLS generate_arm_loadstore generate_arm_multi"
365 fi
366 if [ z$ENABLEAVR = zYES ]; then
367 printf "#define ENABLE_AVR\n" >> config.h
368 CPU_ARCHS="$CPU_ARCHS cpu_avr.o"
369 fi
370 if [ z$ENABLEHPPA = zYES ]; then
371 printf "#define ENABLE_HPPA\n" >> config.h
372 CPU_ARCHS="$CPU_ARCHS cpu_hppa.o"
373 fi
374 if [ z$ENABLEI960 = zYES ]; then
375 printf "#define ENABLE_I960\n" >> config.h
376 CPU_ARCHS="$CPU_ARCHS cpu_i960.o"
377 fi
378 if [ z$ENABLEIA64 = zYES ]; then
379 printf "#define ENABLE_IA64\n" >> config.h
380 CPU_ARCHS="$CPU_ARCHS cpu_ia64.o"
381 fi
382 if [ z$ENABLEM68K = zYES ]; then
383 printf "#define ENABLE_M68K\n" >> config.h
384 CPU_ARCHS="$CPU_ARCHS cpu_m68k.o"
385 fi
386 if [ z$ENABLEMIPS = zYES ]; then
387 printf "#define ENABLE_MIPS\n" >> config.h
388 fi
389 if [ z$ENABLENEWMIPS = zYES ]; then
390 printf "#define ENABLE_NEWMIPS\n" >> config.h
391 CPU_ARCHS="$CPU_ARCHS cpu_newmips.o"
392 fi
393 if [ z$ENABLEPPC = zYES ]; then
394 printf "#define ENABLE_PPC\n" >> config.h
395 CPU_ARCHS="$CPU_ARCHS cpu_ppc.o"
396 CPU_TOOLS="$CPU_TOOLS generate_ppc_loadstore"
397 fi
398 if [ z$ENABLESH = zYES ]; then
399 printf "#define ENABLE_SH\n" >> config.h
400 CPU_ARCHS="$CPU_ARCHS cpu_sh.o"
401 fi
402 if [ z$ENABLESPARC = zYES ]; then
403 printf "#define ENABLE_SPARC\n" >> config.h
404 CPU_ARCHS="$CPU_ARCHS cpu_sparc.o"
405 fi
406 if [ z$ENABLEX86 = zYES ]; then
407 printf "#define ENABLE_X86\n" >> config.h
408 CPU_ARCHS="$CPU_ARCHS cpu_x86.o"
409 fi
410
411
412 # Instruction delay/latency emulation:
413 if [ z$DELAYS = zYES ]; then
414 echo 'Enabling Instruction delay/latency emulation.'
415 printf "#define ENABLE_INSTRUCTION_DELAYS\n" >> config.h
416 fi
417
418
419 # Development option: ALWAYS_SIGNEXTEND_32
420 if [ z$ALWAYS32 = zYES ]; then
421 echo 'Enabling ALWAYS_SIGNEXTEND_32. (NOTE:' \
422 'This slows down everything.)'
423 printf "#define ALWAYS_SIGNEXTEND_32\n" >> config.h
424 fi
425
426
427 # Development option: TRACE_NULL_CRASHES
428 if [ z$TRACENULL = zYES ]; then
429 echo 'Enabling TRACE_NULL_CRASHES. (NOTE:' \
430 'This slows down the emulator.)'
431 printf "#define TRACE_NULL_CRASHES\n" >> config.h
432 fi
433
434
435 # Cache emulation:
436 if [ z$CACHES = zYES ]; then
437 echo 'Enabling Cache emulation. (EXPERIMENTAL)'
438 printf "#define ENABLE_CACHE_EMULATION\n" >> config.h
439
440 if [ z$DELAYS != zYES ]; then
441 printf 'WARNING: Cache emulation without instruction '
442 printf 'delay/latency emulation\n'
443 printf ' (--delays) will not produce correct '
444 printf 'cache miss penalties and such.\n'
445 fi
446
447 printf "\nNOTE: Cache emulation enabled, but right now it triggers "
448 printf "weird bugs in the\n emulator. You have been warned.\n\n"
449 fi
450
451
452 ###############################################################################
453 #
454 # Special hacks for some host OSes:
455 #
456 ###############################################################################
457
458 if [ z"`uname|cut -c 1-6`" = zCYGWIN ]; then
459 CYGWIN=YES
460
461 if [ z"$CC" = z ]; then
462 # Assume gcc on Cygwin (Windows) systems.
463 CC=gcc
464 fi
465 fi
466
467 if [ z"`uname`" = zHP-UX ]; then
468 HPUX=YES
469
470 if [ z$CC = z ]; then
471 if [ -f /usr/local/pa64/bin/gcc ]; then
472 CC=/usr/local/pa64/bin/gcc
473 fi
474 fi
475 fi
476
477 if [ z"`uname`" = zOSF1 ]; then
478 OSF1=YES
479 fi
480
481
482 ###############################################################################
483 #
484 # Create the Makefile header:
485 #
486 ###############################################################################
487
488 rm -f _Makefile.header
489
490 printf "#
491 # DO NOT EDIT THIS FILE! It is automagically created by
492 # the configure script, based on Makefile.skel.
493 #\n\n" >> _Makefile.header
494
495
496 echo 'int main(int argc, char *argv[]) { return 0; }' > _testprog.c
497
498
499 # Try to detect which C compiler to use, if CC is not set:
500 printf "checking which C compiler to use... "
501
502 if [ z"$CC" = z ]; then
503 CC=cc
504
505 # Try gcc first:
506 printf "#!/bin/sh\ngcc _testprog.c -o _testprog >" > _test.sh
507 printf " /dev/null 2> /dev/null\n" >> _test.sh
508 chmod 755 _test.sh
509 ./_test.sh > /dev/null 2> /dev/null
510 if [ -x _testprog ]; then
511 CC=gcc
512 fi
513 rm -f _testprog
514
515 # If both gcc and cc exist, then cc might be a vendor specific
516 # compiler which produces faster code than gcc (eg on Solaris):
517 printf "#!/bin/sh\ncc _testprog.c -o _testprog >" > _test.sh
518 printf " /dev/null 2> /dev/null\n" >> _test.sh
519 chmod 755 _test.sh
520 ./_test.sh > /dev/null 2> /dev/null
521 if [ -x _testprog ]; then
522 CC=cc
523 fi
524 rm -f _testprog
525
526 # # Try ccc (FreeBSD/Alpha):
527 # printf "#!/bin/sh\nccc _testprog.c -o _testprog >" > _test.sh
528 # printf " /dev/null 2> /dev/null\n" >> _test.sh
529 # chmod 755 _test.sh
530 # ./_test.sh > /dev/null 2> /dev/null
531 # if [ -x _testprog ]; then
532 # CC="ccc"
533 # fi
534 # rm -f _testprog
535
536 rm -f _test.sh
537 fi
538
539
540 rm -f _testprog
541 printf "$CC $CFLAGS"
542
543
544 CCTYPE="generic"
545
546 if $CC $CFLAGS -V 2> /dev/null | grep ompaq 1> /dev/null 2> /dev/null; then
547 COMPAQCC=YES
548 CCTYPE="Compaq CC"
549 fi
550
551 if $CC $CFLAGS -V 2>&1 | grep Sun 1> /dev/null 2> /dev/null; then
552 SUNCC=YES
553 CCTYPE="Solaris CC"
554 fi
555
556 if $CC $CFLAGS -v 2>&1 | grep gcc 1> /dev/null 2> /dev/null; then
557 GCCCC=YES
558 CCTYPE="GNU CC"
559 fi
560
561 if [ z$CYGWIN = zYES ]; then
562 CCTYPE="$CCTYPE (Cygwin)"
563 fi
564
565 echo " ($CCTYPE)"
566
567
568 if [ z$NOX11 = z ]; then
569 printf "checking for X11 headers and libs\n"
570
571 # Try to compile a small X11 test program:
572 printf "#include <X11/Xlib.h>
573 #include <stdio.h>
574 Display *dis;
575 void f(void) {
576 dis = XOpenDisplay(NULL);
577 }
578 int main(int argc, char *argv[])
579 { return 0; }
580 " > _test_x11.c
581
582 XOK=0
583
584 XINCLUDE=-I/usr/X11R6/include
585 $CC $CFLAGS _test_x11.c -c -o _test_x11.o $XINCLUDE 2> /dev/null
586
587 XLIB="-L/usr/X11R6/lib -lX11"
588 $CC $CFLAGS _test_x11.o -o _test_x11 $XLIB 2> /dev/null
589
590 if [ -x _test_x11 ]; then
591 XOK=1
592 fi
593
594 rm -f _test_x11 _test_x11.o
595
596 if [ z$XOK = z0 ]; then
597 XINCLUDE=""
598 $CC $CFLAGS _test_x11.c -c -o _test_x11.o \
599 $XINCLUDE 2> /dev/null
600
601 # -lsocket for Solaris
602 XLIB="-lX11 -lsocket"
603 $CC $CFLAGS _test_x11.o -o _test_x11 $XLIB 2> /dev/null
604
605 if [ -x _test_x11 ]; then
606 XOK=1
607 fi
608 rm -f _test_x11 _test_x11.o
609 fi
610
611 if [ z`uname` = zNetBSD ]; then
612 echo "Using NetBSD hack for X11 libs..."
613 XLIB="$XLIB -Wl,-rpath,/usr/X11R6/lib"
614 fi
615
616 if [ z`uname` = zOpenBSD ]; then
617 if [ z`uname -m` = zarc ]; then
618 echo "Using old OpenBSD/arc hack for X11 libs..."
619 XLIB="$XLIB -Wl,-rpath,/usr/X11R6/lib"
620 fi
621 fi
622
623 if [ z$XOK = z0 ]; then
624 echo "Failed to compile X11 test program." \
625 "Configuring without X11."
626 else
627 printf "X11 headers: $XINCLUDE\n"
628 printf "X11 libraries: $XLIB\n"
629 echo "XINCLUDE=$XINCLUDE" >> _Makefile.header
630 echo "XLIB=$XLIB" >> _Makefile.header
631 printf "#define WITH_X11\n" >> config.h
632 fi
633
634 rm -f _test_x11.c
635 fi
636
637
638 if [ z$HPUX = zYES ]; then
639 CFLAGS="-D_XOPEN_SOURCE_EXTENDED $CFLAGS"
640 printf "#define HPUX\n" >> config.h
641 fi
642
643
644 if [ z$OSF1 = zYES ]; then
645 CFLAGS="-D_XOPEN_SOURCE=500 -D_OSF_SOURCE -D_POSIX_PII_SOCKET $CFLAGS"
646 fi
647
648
649 # Check for 'alpha' define.
650 printf "checking for 'alpha' define... "
651 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
652 #ifdef alpha
653 printf(\"1\");
654 #undef alpha
655 #ifdef alpha
656 printf(\"2\");
657 #endif
658 #endif
659 printf(\"\\\n\");return 0;}\n" > _testm.c
660 $CC $CFLAGS _testm.c -o _testm 2> /dev/null
661 if [ ! -x _testm ]; then
662 printf "\nWARNING! COULD NOT COMPILE alpha define TEST"
663 printf " PROGRAM AT ALL!\n"
664 else
665 if [ z`./_testm` = z1 ]; then
666 printf "yes, workaround applied\n"
667 echo "#undef alpha" >> config.h
668 else
669 if [ z`./_testm` = z12 ]; then
670 printf "yes, but workaround not possible\n"
671 exit
672 else
673 printf "no\n"
674 fi
675 fi
676 fi
677 rm -f _testm*
678
679
680 # Some OSes on MIPS seems to define 'mips' to 1. (eg OpenBSD/arc)
681 printf "checking for 'mips' define... "
682 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
683 #ifdef mips
684 printf(\"1\");
685 #undef mips
686 #ifdef mips
687 printf(\"2\");
688 #endif
689 #endif
690 printf(\"\\\n\");return 0;}\n" > _testm.c
691 $CC $CFLAGS _testm.c -o _testm 2> /dev/null
692 if [ ! -x _testm ]; then
693 printf "\nWARNING! COULD NOT COMPILE mips define TEST"
694 printf " PROGRAM AT ALL!\n"
695 else
696 if [ z`./_testm` = z1 ]; then
697 printf "yes, workaround applied\n"
698 echo "#undef mips" >> config.h
699 else
700 if [ z`./_testm` = z12 ]; then
701 printf "yes, but workaround not possible\n"
702 exit
703 else
704 printf "no\n"
705 fi
706 fi
707 fi
708 rm -f _testm*
709
710
711 # Similar to the mips define check above, although I don't know if
712 # any OS actually defined ppc like this.
713 printf "checking for 'ppc' define... "
714 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
715 #ifdef ppc
716 printf(\"1\");
717 #undef ppc
718 #ifdef ppc
719 printf(\"2\");
720 #endif
721 #endif
722 printf(\"\\\n\");return 0;}\n" > _testm.c
723 $CC $CFLAGS _testm.c -o _testm 2> /dev/null
724 if [ ! -x _testm ]; then
725 printf "\nWARNING! COULD NOT COMPILE ppc define TEST"
726 printf " PROGRAM AT ALL!\n"
727 else
728 if [ z`./_testm` = z1 ]; then
729 printf "yes, workaround applied\n"
730 echo "#undef ppc" >> config.h
731 else
732 if [ z`./_testm` = z12 ]; then
733 printf "yes, but workaround not possible\n"
734 exit
735 else
736 printf "no\n"
737 fi
738 fi
739 fi
740 rm -f _testm*
741
742
743 # Similar to the mips define check above, although I don't know if
744 # any OS actually defined sparc like this.
745 printf "checking for 'sparc' define... "
746 printf "#include <stdio.h>\nint main(int argc, char *argv[]){
747 #ifdef sparc
748 printf(\"1\");
749 #undef sparc
750 #ifdef sparc
751 printf(\"2\");
752 #endif
753 #endif
754 printf(\"\\\n\");return 0;}\n" > _testm.c
755 $CC $CFLAGS _testm.c -o _testm 2> /dev/null
756 if [ ! -x _testm ]; then
757 printf "\nWARNING! COULD NOT COMPILE sparc define TEST "
758 printf "PROGRAM AT ALL!\n"
759 else
760 if [ z`./_testm` = z1 ]; then
761 printf "yes, workaround applied\n"
762 echo "#undef sparc" >> config.h
763 else
764 if [ z`./_testm` = z12 ]; then
765 printf "yes, but workaround not possible\n"
766 exit
767 else
768 printf "no\n"
769 fi
770 fi
771 fi
772 rm -f _testm*
773
774
775 # CWARNINGS:
776 printf "checking whether -Wall can be used... "
777 $CC $CFLAGS _testprog.c -o _testprog -Wall 2> /dev/null
778 if [ -x _testprog ]; then
779 printf "yes\n"
780 CWARNINGS="-Wall $CWARNINGS"
781
782 # Compaq's compiler always seems to warn about the long long type,
783 # and unusedtop suppresses warnings about include files being
784 # included more than once.
785 if [ z"$COMPAQCC" = zYES ]; then
786 CWARNINGS="$CWARNINGS -msg_disable longlongtype,unusedtop"
787 fi
788 else
789 printf "no\n"
790 fi
791 rm -f _testprog
792
793
794 if [ z"$COMPAQCC" = zYES ]; then
795 # -O4 is possible, but is -O3 better?
796 CFLAGS="-O4 $CFLAGS"
797 else
798 if [ z"`uname`" = zSunOS ]; then
799 # "cc", the system's default compiler:
800 if [ z"$SUNCC" = zYES ]; then
801 CFLAGS="-xO5 -xdepend $CFLAGS"
802 fi
803 printf "#define SOLARIS\n" >> config.h
804 OTHERLIBS="-lsocket $OTHERLIBS"
805 else
806 # gcc or something else:
807 $CC $CFLAGS _testprog.c -o _testprog -O 2> /dev/null
808 if [ -x _testprog ]; then
809 rm -f _testprog
810 $CC $CFLAGS _testprog.c -o _testprog -O2 2> /dev/null
811 if [ -x _testprog ]; then
812 CFLAGS="-O2 $CFLAGS"
813 else
814 CFLAGS="-O $CFLAGS"
815 fi
816 fi
817 fi
818 fi
819 rm -f _testprog
820
821
822 # -fschedule-insns causes bugs on i386 with gcc,
823 # but works OK on my alpha with ccc (compaq's cc).
824 if [ z"$COMPAQCC" = zYES ]; then
825 printf "checking whether -fschedule-insns2 can be used... "
826 $CC $CFLAGS _testprog.c -o _testprog -fschedule-insns2 2> /dev/null
827 if [ -x _testprog ]; then
828 CFLAGS="-fschedule-insns2 $CFLAGS"
829 printf "yes\n"
830 else
831 printf "no\n"
832 fi
833 rm -f _testprog
834
835 printf "checking whether -fschedule-insns can be used... "
836 $CC $CFLAGS _testprog.c -o _testprog -fschedule-insns 2> /dev/null
837 if [ -x _testprog ]; then
838 CFLAGS="-fschedule-insns $CFLAGS"
839 printf "yes\n"
840 else
841 printf "no\n"
842 fi
843 rm -f _testprog
844
845 # # -intrinsics
846 # $CC $CFLAGS _testprog.c -o _testprog -intrinsics 2> /dev/null
847 # if [ -x _testprog ]; then
848 # CFLAGS="-intrinsics $CFLAGS"
849 # fi
850 # rm -f _testprog
851
852 # -fast
853 printf "checking whether -fast can be used... "
854 $CC $CFLAGS _testprog.c -o _testprog -fast 2> /dev/null
855 if [ -x _testprog ]; then
856 CFLAGS="-fast $CFLAGS"
857 printf "yes\n"
858 else
859 printf "no\n"
860 fi
861 rm -f _testprog
862 fi
863
864
865 # -fpeephole
866 printf "checking whether -fpeephole can be used... "
867 $CC $CFLAGS -fpeephole _testprog.c -o _testprog > _testprog.stdout 2>&1
868 cat _testprog.stdout >> _testprog.error
869 if grep peephole _testprog.error > /dev/null 2>&1; then
870 printf "no\n"
871 else
872 if [ -x _testprog ]; then
873 CFLAGS="-fpeephole $CFLAGS"
874 printf "yes\n"
875 else
876 printf "no\n"
877 fi
878 fi
879 rm -f _testprog _testprog.error _testprog.stdout
880
881
882 # -fomit-frame-pointer
883 printf "checking whether -fomit-frame-pointer can be used... "
884 $CC $CFLAGS -fomit-frame-pointer _testprog.c -o \
885 _testprog 1> _testprog.stdout 2>&1
886 cat _testprog.stdout >> _testprog.error
887 if grep frame _testprog.error > /dev/null 2>&1; then
888 printf "no\n"
889 else
890 if [ -x _testprog ]; then
891 CFLAGS="-fomit-frame-pointer $CFLAGS"
892 printf "yes\n"
893 else
894 printf "no\n"
895 fi
896 fi
897 rm -f _testprog _testprog.error _testprog.stdout
898
899
900 # -lrt for nanosleep?
901 printf "checking whether -lrt is required for nanosleep... "
902 printf "#include <time.h>\n#include <stdio.h>
903 int main(int argc, char *argv[]){nanosleep(NULL,NULL);return 0;}\n" > _testns.c
904 $CC $CFLAGS _testns.c -o _testns 2> /dev/null
905 if [ ! -x _testns ]; then
906 $CC $CFLAGS -lrt _testns.c -o _testns 2> /dev/null
907 if [ ! -x _testns ]; then
908 printf "WARNING! COULD NOT COMPILE WITH nanosleep AT ALL!\n"
909 else
910 # -lrt for nanosleep
911 OTHERLIBS="-lrt $OTHERLIBS"
912 printf "yes\n"
913 fi
914 else
915 printf "no\n"
916 fi
917 rm -f _testns.c _testns
918
919
920 # -lresolv for inet_pton?
921 printf "checking whether -lresolv is required for inet_pton... "
922 printf "int inet_pton(void); int main(int argc, " > _testr.c
923 printf "char *argv[]) { return inet_pton(); }\n" >> _testr.c
924 $CC $CFLAGS _testr.c -o _testr 2> /dev/null
925 if [ ! -x _testr ]; then
926 $CC $CFLAGS _testr.c -lresolv -o _testr 2> /dev/null
927 if [ ! -x _testr ]; then
928 $CC $CFLAGS _testr.c -lresolv -lnsl -o _testr 2> /dev/null
929 if [ ! -x _testr ]; then
930 printf "no, using inet_aton\n"
931 else
932 # -lresolv -lnsl for inet_pton
933 OTHERLIBS="-lresolv -lnsl $OTHERLIBS"
934 printf "yes (and -lnsl)\n"
935 printf "#define HAVE_INET_PTON\n" >> config.h
936 fi
937 else
938 # -lresolv for inet_pton
939 OTHERLIBS="-lresolv $OTHERLIBS"
940 printf "yes\n"
941 printf "#define HAVE_INET_PTON\n" >> config.h
942 fi
943 else
944 printf "no\n"
945 printf "#define HAVE_INET_PTON\n" >> config.h
946 fi
947 rm -f _testr.[co] _testr
948
949
950 # -lm?
951 printf "checking for math libs..."
952 printf "#include <math.h>\nint main(int argc, char *argv[]) { " > _testr.c
953 printf "double x = sqrt((double)argc); return (int)x; }\n" >> _testr.c
954 $CC $CFLAGS _testr.c -o _testr 2> /dev/null
955 if [ ! -x _testr ]; then
956 $CC $CFLAGS _testr.c -lm -o _testr 2> /dev/null
957 if [ ! -x _testr ]; then
958 $CC $CFLAGS _testr.c -lm -lcpml -o _testr 2> /dev/null
959 if [ ! -x _testr ]; then
960 printf "\nWARNING! Could not compile math test "
961 printf "at all!\nContinuing anyway.\n\n"
962 else
963 # -lm AND -lcpml
964 OTHERLIBS="-lm -lcpml $OTHERLIBS"
965 printf " -lm -lcpml\n"
966 fi
967 else
968 # Normal -lm
969 OTHERLIBS="-lm $OTHERLIBS"
970 printf " -lm\n"
971 fi
972 else
973 printf " none needed\n"
974 fi
975 rm -f _testr.[co] _testr
976
977
978 # strlcpy missing?
979 printf "checking for strlcpy... "
980 printf "#include <string.h>
981 int main(int argc, char *argv[]) { char *p; char *q; size_t x;
982 x = strlcpy(p, q, 50); return 0;}\n" > _tests.c
983 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
984 if [ ! -x _tests ]; then
985 printf "missing, using mystrlcpy\n"
986 printf "#define strlcpy mystrlcpy\n" >> config.h
987 printf "#define strlcat mystrlcat\n" >> config.h
988 printf "#define USE_STRLCPY_REPLACEMENTS\n" >> config.h
989 else
990 printf "found\n"
991 fi
992 rm -f _tests.[co] _tests
993
994
995 # strtoull missing?
996 printf "checking for strtoull... "
997 printf "#include <stdlib.h>
998 #include <limits.h>
999 #include <stdio.h>
1000 int main(int argc, char *argv[]) {
1001 long long x = strtoull(argv[1], NULL, 0); return 0;}\n" > _tests.c
1002 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
1003 if [ ! -x _tests ]; then
1004 printf "missing, using mystrtoull\n"
1005 printf "#define strtoull mystrtoull\n" >> config.h
1006 else
1007 printf "found\n"
1008 fi
1009 rm -f _tests.[co] _tests
1010
1011
1012 # mkstemp missing?
1013 printf "checking for mkstemp... "
1014 printf "#include <unistd.h>
1015 int main(int argc, char *argv[]) { int x; char *y = \"abc\";
1016 x = mkstemp(y); return 0;}\n" > _tests.c
1017 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
1018 if [ ! -x _tests ]; then
1019 printf "missing, using workaround\n"
1020 printf "#define mkstemp mymkstemp\n" >> config.h
1021 else
1022 printf "found\n"
1023 fi
1024 rm -f _tests.[co] _tests
1025
1026
1027 # fseeko missing?
1028 printf "checking for fseeko... "
1029 printf "#include <stdlib.h>
1030 #include <limits.h>
1031 #include <stdio.h>
1032 #include <sys/types.h>
1033 int main(int argc, char *argv[]) { fseeko(NULL, 0, 0); return 0;}\n" > _tests.c
1034 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
1035 if [ ! -x _tests ]; then
1036 printf "missing\n"
1037 printf "WARNING! fseeko missing from libc. Using a hack, "
1038 printf "which probably doesn't work.\n"
1039 printf "#define HACK_FSEEKO\n" >> config.h
1040 else
1041 printf "found\n"
1042 fi
1043 rm -f _tests.[co] _tests
1044
1045
1046 # socklen_t missing?
1047 # (for example really old OpenBSD/arc 2.3, inside the emulator)
1048 printf "checking for socklen_t... "
1049 printf "#include <stdlib.h>
1050 #include <stdio.h>
1051 #include <sys/types.h>
1052 #include <sys/socket.h>
1053 int main(int argc, char *argv[]) { socklen_t x; return 0;}\n" > _tests.c
1054 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
1055 if [ ! -x _tests ]; then
1056 printf "no, using int\n"
1057 CFLAGS="$CFLAGS -Dsocklen_t=int"
1058 else
1059 printf "socklen_t\n"
1060 fi
1061 rm -f _tests.[co] _tests
1062
1063
1064 # MAP_ANON missing? (On some HP-UX systems? Use MAP_ANONYMOUS instead.)
1065 printf "checking for MAP_ANON... "
1066 rm -f _tests
1067 printf "#include <stdio.h>
1068 #include <sys/types.h>
1069 #include <sys/mman.h>
1070 int main(int argc, char *argv[]) { int x = MAP_ANON; return 0;}\n" > _tests.c
1071 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
1072 if [ ! -x _tests ]; then
1073 printf "#include <stdio.h>
1074 #include <sys/types.h>
1075 #include <sys/mman.h>
1076 int main(int argc, char *argv[])
1077 { int x = MAP_ANONYMOUS; return 0;}\n" > _tests.c
1078 $CC $CFLAGS _tests.c -o _tests 2> /dev/null
1079 if [ ! -x _tests ]; then
1080 printf "no\n\n"
1081 printf "WARNING! Neither MAP_ANON nor MAP_ANONYMOUS work on "
1082 printf "this system.\nPlease try to compile anyway, and report"
1083 printf " to me whether it builds/runs or not.\n\n"
1084 printf "#define MAP_ANON 0\n" >> config.h
1085 printf "#define NO_MAP_ANON\n" >> config.h
1086 else
1087 printf "using MAP_ANONYMOUS\n"
1088 printf "#define MAP_ANON MAP_ANONYMOUS\n" >> config.h
1089 fi
1090 else
1091 printf "yes\n"
1092 fi
1093 rm -f _tests.[co] _tests
1094
1095
1096 # Check for 64-bit off_t:
1097 printf "checking for 64-bit off_t... "
1098 printf "#include <stdio.h>\n#include <inttypes.h>\n#include <sys/types.h>\n
1099 int main(int argc, char *argv[]){printf(\"%%i\\\n\",
1100 (int)sizeof(off_t));return 0;}\n" > _testoff.c
1101 $CC $CFLAGS _testoff.c -o _testoff 2> /dev/null
1102 if [ ! -x _testoff ]; then
1103 printf "\nWARNING! COULD NOT COMPILE off_t TEST PROGRAM AT ALL!\n"
1104 else
1105 if [ z`./_testoff` = z8 ]; then
1106 printf "yes\n"
1107 else
1108 $CC $CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
1109 _testoff.c -o _testoff 2> /dev/null
1110 if [ ! -x _testoff ]; then
1111 printf "\nWARNING! COULD NOT COMPILE off_t TEST "
1112 printf "PROGRAM!\n"
1113 else
1114 if [ z`./_testoff` = z8 ]; then
1115 CFLAGS="-D_FILE_OFFSET_BITS=64 $CFLAGS"
1116 CFLAGS="-D_LARGEFILE_SOURCE $CFLAGS"
1117 printf "using -D_FILE_OFFSET_BITS=64"
1118 printf " -D_LARGEFILE_SOURCE\n"
1119 else
1120 printf "NO\n"
1121 printf "Warning! No 64-bit off_t. Continuing "
1122 printf "anyway.\n"
1123 fi
1124 fi
1125 fi
1126 fi
1127 rm -f _testoff.c _testoff
1128
1129
1130 # Check for u_int8_t etc:
1131 # These are needed because some header files in src/include/ use u_int*
1132 # instead of uint*, and I don't have time to rewrite them all.
1133 printf "checking for u_int8_t... "
1134 printf "#include <stdio.h>\n#include <inttypes.h>\n#include <sys/types.h>\n
1135 int main(int argc, char *argv[]){printf(\"%%i\\\n\",
1136 (int)sizeof(u_int8_t));return 0;}\n" > _testuint.c
1137 $CC $CFLAGS _testuint.c -o _testuint 2> /dev/null
1138 if [ ! -x _testuint ]; then
1139 rm -f _testuint*
1140 printf "#include <stdio.h>\n#include <inttypes.h>
1141 \n#include <sys/types.h>\nint main(int argc, char *argv[])
1142 {printf(\"%%i\\\n\", (int)sizeof(uint8_t));return 0;}\n" > _testuint.c
1143 $CC $CFLAGS _testuint.c -o _testuint 2> /dev/null
1144 if [ ! -x _testuint ]; then
1145 printf "no\n\nERROR: No u_int8_t or uint8_t. Aborting\n"
1146 # TODO: Automagically detect using various combinations
1147 # of char, int, short, long etc.
1148 exit
1149 fi
1150
1151 printf "typedef uint8_t u_int8_t;\n" >> config.h
1152 printf "typedef uint16_t u_int16_t;\n" >> config.h
1153 printf "typedef uint32_t u_int32_t;\n" >> config.h
1154 printf "uint8_t\n"
1155 else
1156 printf "yes\n"
1157 fi
1158 rm -f _testuint.c _testuint
1159
1160 printf "checking for u_int64_t... "
1161 printf "#include <stdio.h>\n#include <inttypes.h>\n#include <sys/types.h>\n
1162 int main(int argc, char *argv[]){printf(\"%%i\\\n\",
1163 (int)sizeof(u_int64_t));return 0;}\n" > _testuint.c
1164 $CC $CFLAGS _testuint.c -o _testuint 2> /dev/null
1165 if [ ! -x _testuint ]; then
1166 rm -f _testuint*
1167 printf "#include <stdio.h>\n#include <inttypes.h>
1168 \n#include <sys/types.h>\nint main(int argc, char *argv[])
1169 {printf(\"%%i\\\n\", (int)sizeof(uint64_t));return 0;}\n" > _testuint.c
1170 $CC $CFLAGS _testuint.c -o _testuint 2> /dev/null
1171 if [ ! -x _testuint ]; then
1172 printf "no\n\nERROR: No u_int64_t or uint64_t. Aborting\n"
1173 # TODO: Automagically detect using various combinations
1174 # of char, int, short, long etc.
1175 exit
1176 fi
1177
1178 printf "typedef uint64_t u_int64_t;\n" >> config.h
1179 printf "uint64_t\n"
1180 else
1181 printf "yes\n"
1182 fi
1183 rm -f _testuint.c _testuint
1184
1185
1186 ###############################################################################
1187 #
1188 # Dynamic binary translation (BINTRANS):
1189 #
1190 ###############################################################################
1191
1192 printf "checking for bintrans backend... "
1193
1194 BINTRANS=NO
1195
1196 if [ z$ENABLEMIPS = zNO ]; then
1197 printf "NO!\nTEMPORARY HACK/PROBLEM: Disabling bintrans for now,\n"
1198 printf "until things have stabilized.\n"
1199 NOBINTRANS=YES
1200 fi
1201
1202 if [ z$NOBINTRANS = zYES ]; then
1203 printf "disabled\n"
1204 else
1205 # Alpha:
1206 if [ z"`uname -m`" = zalpha ]; then
1207 printf "#define ALPHA\n" >> config.h
1208 printf "#define BINTRANS\n" >> config.h
1209 printf "Alpha\n"
1210 BINTRANS=YES
1211 fi
1212
1213 # x86: (all machines ending in "86" are treated as i386)
1214 if [ z"`uname -m|rev|cut -c1-2`" = z68 ]; then
1215 printf "#define I386\n" >> config.h
1216 printf "#define BINTRANS\n" >> config.h
1217 printf "i386\n"
1218 BINTRANS=YES
1219 fi
1220
1221 # MIPS not yet
1222 # # MIPS:
1223 # if [ z"`uname -m`" = zmips ]; then
1224 # printf "#define MIPS\n" >> config.h
1225 # printf "#define BINTRANS\n" >> config.h
1226 # printf "MIPS\n"
1227 # BINTRANS=YES
1228 # fi
1229
1230 # # UltraSPARC:
1231 # if [ z"`uname -m`" = zsun4u ]; then
1232 # printf "#define SPARCV9\n" >> config.h
1233 # printf "#define BINTRANS\n" >> config.h
1234 # printf "SPARC V9\n"
1235 # BINTRANS=YES
1236 # else
1237 # if [ z"`uname -m`" = zsparc64 ]; then
1238 # printf "#define SPARCV9\n" >> config.h
1239 # printf "#define BINTRANS\n" >> config.h
1240 # printf "SPARC V9\n"
1241 # BINTRANS=YES
1242 # fi
1243 # fi
1244
1245 if [ z$BINTRANS = zNO ]; then
1246 printf "not supported yet on this arch\n"
1247 fi
1248 fi
1249
1250
1251 ###############################################################################
1252
1253 # Host byte order?
1254 printf "checking host endianness... "
1255 rm -f _test_end*
1256 printf '#include <stdio.h>
1257 int main(int argc, char *argv[])
1258 { int x = 1; void *xp = (void *)&x; char *p = (char *)xp;
1259 if (*p) printf("little\\\n"); else printf("big\\\n"); }
1260 ' > _test_end.c
1261 $CC $CFLAGS _test_end.c -o _test_end 2> /dev/null
1262 X=`./_test_end`
1263 echo $X
1264 if [ z$X = zlittle ]; then
1265 printf "#define HOST_LITTLE_ENDIAN\n" >> config.h
1266 else
1267 if [ z$X = zbig ]; then
1268 printf "#define HOST_BIG_ENDIAN\n" >> config.h
1269 else
1270 echo "Error! Could not determine host's endianness."
1271 exit
1272 fi
1273 fi
1274 rm -f _test_end*
1275
1276 ###############################################################################
1277
1278 # Prefetch support?
1279 printf "checking for asm prefetch support... "
1280 if [ z"`uname -m`" = zalpha ]; then
1281 rm -f _alpha_asm_test.c _alpha_asm_test
1282 printf 'int main(int argc, char *argv[])
1283 { int x; int *y = &x; asm ("ldl $31,0(%%0)" : : "g" (y));
1284 return 0; }\n' > _alpha_asm_test.c
1285 $CC $CFLAGS -O2 _alpha_asm_test.c -o _alpha_asm_test \
1286 > /dev/null 2> /dev/null
1287 if [ -x _alpha_asm_test ]; then
1288 # printf "#define HAVE_PREFETCH\n" >> config.h
1289 printf "#define PREFETCH(x) asm(\"ldl" >> config.h
1290 printf " \$31,0(%%0)\" : : \"g\" (x))\n" >> config.h
1291 echo "yes"
1292 PREFSUP=YES
1293 fi
1294 rm -f _alpha_asm_test.c _alpha_asm_test
1295 fi
1296 if [ z$PREFSUP = z ]; then
1297 printf "#define PREFETCH(x) { }\n" >> config.h
1298 echo "no"
1299 fi
1300
1301
1302 ###############################################################################
1303
1304 INCLUDE=-Iinclude/
1305 DINCLUDE=-I../include/
1306
1307 rm -f _testprog.c
1308
1309 echo C compiler flags: $CFLAGS $CWARNINGS
1310 echo Linker flags: $OTHERLIBS
1311 echo "CWARNINGS=$CWARNINGS" >> _Makefile.header
1312 echo "COPTIM=$CFLAGS" >> _Makefile.header
1313 echo "INCLUDE=$INCLUDE" >> _Makefile.header
1314 echo "DINCLUDE=$DINCLUDE" >> _Makefile.header
1315 echo "CC=$CC" >> _Makefile.header
1316 echo "OTHERLIBS=$OTHERLIBS" >> _Makefile.header
1317 echo "CPU_ARCHS=$CPU_ARCHS" >> _Makefile.header
1318 echo "CPU_TOOLS=$CPU_TOOLS" >> _Makefile.header
1319 echo "" >> _Makefile.header
1320
1321
1322 # Create the Makefiles:
1323 D=". src src/include src/cpus src/devices src/devices/fonts src/promemul"
1324 for a in $D; do
1325 echo "creating $a/Makefile"
1326 touch $a/Makefile
1327 cat _Makefile.header > $a/Makefile
1328 cat $a/Makefile.skel >> $a/Makefile
1329 done
1330
1331 # Tail of config.h:
1332 printf "\n#endif /* CONFIG_H */\n" >> config.h
1333
1334 # Remove temporary Makefile header:
1335 rm -f _Makefile.header
1336
1337 echo Configured. You may now run make to build gxemul.

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26