ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/MacOSX/configure.in
Revision: 1.18
Committed: 2005-12-29T00:32:43Z (18 years, 8 months ago) by nigel
Branch: MAIN
CVS Tags: nigel-build-17
Changes since 1.17: +11 -3 lines
Log Message:
A few more updates from latest Unix configure.ac

File Contents

# Content
1 dnl Mac OS X configuration driver
2 dnl $Id: configure.in,v 1.17 2005/09/19 07:45:07 nigel Exp $
3 dnl Process this file with autoconf to produce a configure script.
4 dnl Based on Unix/configure.in
5 dnl Written in 1999 by Christian Bauer et al.
6 dnl Occasionally re-synchronised (merged?) with latest version
7 dnl Written in 2002 by Christian Bauer et al.
8
9 dnl autoconf on 10.1 doesn't understand these
10 dnl AC_INIT([Basilisk II], 1.0, [Christian.Bauer@uni-mainz.de], BasiliskII)
11 dnl AC_CONFIG_SRCDIR(main_macosx.mm)
12 AC_INIT(main_macosx.mm)
13 AC_PREREQ(2.12)
14 AC_CONFIG_HEADER(config.h)
15
16 dnl Aliases for PACKAGE and VERSION macros.
17 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE_NAME", [Define this program name.])
18 AC_DEFINE_UNQUOTED(VERSION, "$PACKAGE_VERSION", [Define this program version.])
19
20 dnl Some systems do not put corefiles in the currect directory, avoid saving
21 dnl cores for the configure tests since some are intended to dump core.
22 ulimit -c 0
23
24 dnl Video options.
25 AC_ARG_ENABLE(multiwin,
26 [ --enable-multiwin allow multiple emulator windows [default=no]], [ENABLE_MULTIPLE=$enableval], [ENABLE_MULTIPLE=no])
27
28 dnl JIT compiler options.
29 AC_ARG_ENABLE(jit-compiler, [ --enable-jit-compiler enable JIT compiler [default=no]], [WANT_JIT=$enableval], [WANT_JIT=no])
30 AC_ARG_ENABLE(jit-debug, [ --enable-jit-debug activate native code disassemblers [default=no]], [WANT_JIT_DEBUG=$enableval], [WANT_JIT_DEBUG=no])
31
32 dnl FPU emulation core.
33 AC_ARG_ENABLE(fpe,
34 [ --enable-fpe=FPE specify which fpu emulator to use [default=auto]],
35 [ case "$enableval" in
36 dnl default is always ieee, if architecture has this fp format
37 auto) FPE_CORE_TEST_ORDER="ieee uae";;
38 ieee) FPE_CORE_TEST_ORDER="ieee";;
39 uae) FPE_CORE_TEST_ORDER="uae";;
40 x86) FPE_CORE_TEST_ORDER="x86";;
41 *) AC_MSG_ERROR([--enable-fpe takes only one of the following values: auto, x86, ieee, uae]);;
42 esac
43 ],
44 [ FPE_CORE_TEST_ORDER="ieee uae"
45 ])
46
47 dnl Addressing modes.
48 AC_ARG_ENABLE(addressing,
49 [ --enable-addressing=AM specify the addressing mode to use [default=fastest]],
50 [ case "$enableval" in
51 real) ADDRESSING_TEST_ORDER="real";;
52 direct) ADDRESSING_TEST_ORDER="direct";;
53 banks) ADDRESSING_TEST_ORDER="banks";;
54 fastest)ADDRESSING_TEST_ORDER="direct banks";;
55 *) AC_MSG_ERROR([--enable-addressing takes only one of the following values: fastest, real, direct, banks]);;
56 esac
57 ],
58 [ ADDRESSING_TEST_ORDER="direct banks"
59 ])
60
61 dnl External packages.
62 AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes])
63
64 dnl Canonical system information.
65 AC_CANONICAL_HOST
66 AC_CANONICAL_TARGET
67
68 dnl Target OS type (target is host if not cross-compiling).
69 case "$target_os" in
70 linux*) OS_TYPE=linux;;
71 netbsd*) OS_TYPE=netbsd;;
72 freebsd*) OS_TYPE=freebsd;;
73 solaris*) OS_TYPE=solaris;;
74 darwin*) OS_TYPE=darwin;;
75 *) OS_TYPE=`echo $target_os | sed -e 's/-/_/g' | sed -e 's/\./_/g'`;;
76 esac
77 DEFINES="$DEFINES -DOS_$OS_TYPE"
78
79 dnl Target CPU type.
80 HAVE_I386=no
81 HAVE_M68K=no
82 HAVE_SPARC=no
83 HAVE_POWERPC=no
84 HAVE_X86_64=no
85 case "$target_cpu" in
86 i386* | i486* | i586* | i686* | i786* ) HAVE_I386=yes;;
87 m68k* ) HAVE_M68K=yes;;
88 sparc* ) HAVE_SPARC=yes;;
89 powerpc* ) HAVE_POWERPC=yes;;
90 x86_64* ) HAVE_X86_64=yes;;
91 esac
92
93 dnl Checks for programs.
94 AC_PROG_CC
95 AC_PROG_CC_C_O
96 AC_PROG_CPP
97 AC_PROG_CXX
98 AC_PROG_MAKE_SET
99 AC_PROG_INSTALL
100 AC_PROG_EGREP
101
102 dnl We use mon if possible.
103 MONSRCS=
104 if [[ "x$WANT_MON" = "xyes" ]]; then
105 AC_MSG_CHECKING(for mon)
106 mon_srcdir=../../../mon/src
107 if grep mon_init $mon_srcdir/mon.h >/dev/null 2>/dev/null; then
108 AC_MSG_RESULT(yes)
109 AC_DEFINE(ENABLE_MON, 1, [Define if using "mon".])
110 MONSRCS="$mon_srcdir/mon.cpp $mon_srcdir/mon_6502.cpp $mon_srcdir/mon_z80.cpp $mon_srcdir/mon_cmd.cpp $mon_srcdir/mon_disass.cpp $mon_srcdir/mon_ppc.cpp $mon_srcdir/mon_lowmem.cpp $mon_srcdir/disass/floatformat.c $mon_srcdir/disass/i386-dis.c $mon_srcdir/disass/m68k-dis.c $mon_srcdir/disass/m68k-opc.c"
111 CXXFLAGS="$CXXFLAGS -I$mon_srcdir -I$mon_srcdir/disass"
112 AC_CHECK_LIB(ncurses, tgetent, ,
113 AC_CHECK_LIB(termcap, tgetent, ,
114 AC_CHECK_LIB(termlib, tgetent, ,
115 AC_CHECK_LIB(terminfo, tgetent, ,
116 AC_CHECK_LIB(Hcurses, tgetent, ,
117 AC_CHECK_LIB(curses, tgetent))))))
118 AC_CHECK_LIB(readline, readline)
119 else
120 AC_MSG_RESULT(no)
121 AC_MSG_WARN([Could not find mon, ignoring --with-mon.])
122 WANT_MON=no
123 fi
124 fi
125
126 dnl We want pthreads. Try libpthread first, then libc_r (FreeBSD), then PTL.
127 HAVE_PTHREADS=yes
128 AC_CHECK_LIB(pthread, pthread_create, , [
129 AC_CHECK_LIB(c_r, pthread_create, , [
130 AC_CHECK_LIB(PTL, pthread_create, , [
131 HAVE_PTHREADS=no
132 ])
133 ])
134 ])
135 dnl OS X does have pthreads, but not in any of the above locations:
136 HAVE_PTHREADS=yes
137 if [[ "x$HAVE_PTHREADS" = "xyes" ]]; then
138 AC_DEFINE(HAVE_PTHREADS, 1, [Define if pthreads are available.])
139 fi
140 AC_CHECK_FUNCS(pthread_cond_init)
141 AC_CHECK_FUNCS(pthread_cancel pthread_testcancel)
142 AC_CHECK_FUNCS(pthread_mutexattr_setprotocol)
143 AC_CHECK_FUNCS(pthread_mutexattr_settype)
144 AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
145
146 dnl If POSIX.4 semaphores are not available, we emulate them with pthread mutexes.
147 SEMSRC=
148 AC_CHECK_FUNCS(sem_init, , [
149 if test "x$HAVE_PTHREADS" = "xyes"; then
150 SEMSRC=posix_sem.cpp
151 fi
152 ])
153
154 dnl We want to enable multiple window support if possible
155 if [[ "x$WANT_MWIN" = "xyes" ]]; then
156 WANT_MWIN=yes
157 DEFINES="$DEFINES -DENABLE_MULTIPLE"
158 fi
159
160 dnl We use 64-bit file size support if possible.
161 AC_SYS_LARGEFILE
162
163 dnl Checks for header files.
164 AC_HEADER_STDC
165 AC_CHECK_HEADERS(stdlib.h stdint.h)
166 AC_CHECK_HEADERS(unistd.h fcntl.h sys/types.h sys/time.h sys/mman.h mach/mach.h)
167 AC_CHECK_HEADERS(readline.h history.h readline/readline.h readline/history.h)
168 AC_CHECK_HEADERS(sys/socket.h sys/ioctl.h sys/filio.h sys/bitypes.h sys/wait.h)
169 AC_CHECK_HEADERS(sys/poll.h sys/select.h)
170 AC_CHECK_HEADERS(arpa/inet.h)
171 AC_CHECK_HEADERS(linux/if.h linux/if_tun.h net/if.h net/if_tun.h, [], [], [
172 #ifdef HAVE_SYS_TYPES_H
173 #include <sys/types.h>
174 #endif
175 #ifdef HAVE_SYS_SOCKET_H
176 #include <sys/socket.h>
177 #endif
178 ])
179 AC_CHECK_HEADERS(AvailabilityMacros.h)
180 AC_CHECK_HEADERS(IOKit/storage/IOBlockStorageDevice.h)
181
182 dnl Checks for typedefs, structures, and compiler characteristics.
183 AC_C_BIGENDIAN
184 AC_C_CONST
185 AC_C_INLINE
186 AC_CHECK_SIZEOF(short, 2)
187 AC_CHECK_SIZEOF(int, 4)
188 AC_CHECK_SIZEOF(long, 4)
189 AC_CHECK_SIZEOF(long long, 8)
190 AC_CHECK_SIZEOF(float, 4)
191 AC_CHECK_SIZEOF(double, 8)
192 AC_CHECK_SIZEOF(long double, 12)
193 AC_CHECK_SIZEOF(void *, 4)
194 AC_TYPE_OFF_T
195 dnl These two symbols are not defined in 10.1's autoconf:
196 dnl AC_CHECK_TYPE(loff_t, off_t)
197 dnl AC_CHECK_TYPE(caddr_t, [char *])
198 dnl We define loff_t as a typedef of off_t in sysdeps.h if we don't have LOFF_T
199 dnl OS X does have caddr_t, but the above check doesn't work, so we have to do:
200 AC_DEFINE(HAVE_CADDR_T, 1, [The type "caddr_t" does exist on MacOS X.])
201 AC_TYPE_SIZE_T
202 AC_TYPE_SIGNAL
203 AC_HEADER_TIME
204 AC_STRUCT_TM
205
206 dnl Check whether sys/socket.h defines type socklen_t.
207 dnl (extracted from ac-archive/Miscellaneous)
208 AC_CACHE_CHECK([for socklen_t],
209 ac_cv_type_socklen_t, [
210 AC_TRY_COMPILE([
211 #include <sys/types.h>
212 #include <sys/socket.h>
213 ], [socklen_t len = 42; return 0;],
214 ac_cv_type_socklen_t=yes, ac_cv_type_socklen_t=no,
215 dnl When cross-compiling, do not assume anything.
216 ac_cv_type_socklen_t="guessing no"
217 )
218 ])
219 if [[ "x$ac_cv_type_socklen_t" != "xyes" ]]; then
220 AC_DEFINE(socklen_t, int, [Define to 'int' if <sys/types.h> doesn't define.])
221 fi
222
223 dnl Checks for library functions.
224 AC_CHECK_FUNCS(strdup strerror cfmakeraw)
225 AC_CHECK_FUNCS(clock_gettime timer_create)
226 AC_CHECK_FUNCS(sigaction signal)
227 AC_CHECK_FUNCS(mmap mprotect munmap)
228 AC_CHECK_FUNCS(vm_allocate vm_deallocate vm_protect)
229 AC_CHECK_FUNCS(poll inet_aton)
230
231 dnl Darwin seems to define mach_task_self() instead of task_self().
232 AC_CHECK_FUNCS(mach_task_self task_self)
233
234 dnl Check for headers and functions related to pty support (sshpty.c)
235 dnl From openssh-3.2.2p1 configure.ac
236
237 AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h)
238 AC_CHECK_FUNCS(_getpty vhangup strlcpy)
239 if test -z "$no_dev_ptmx" ; then
240 if test "x$disable_ptmx_check" != "xyes" ; then
241 AC_CHECK_FILE([/dev/ptmx],
242 [
243 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1, [Define if you have /dev/ptmx.])
244 have_dev_ptmx=1
245 ]
246 )
247 fi
248 fi
249 AC_CHECK_FILE([/dev/ptc],
250 [
251 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1, [Define if you have /dev/ptc.])
252 have_dev_ptc=1
253 ]
254 )
255
256 dnl (end of code from openssh-3.2.2p1 configure.ac)
257
258
259 dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES)
260 AC_DEFUN([AC_CHECK_FRAMEWORK], [
261 AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl
262 AC_CACHE_CHECK([whether compiler supports framework $1],
263 ac_Framework, [
264 saved_LIBS="$LIBS"
265 LIBS="$LIBS -framework $1"
266 AC_TRY_LINK(
267 [$2], [int main(void) { return 0; }],
268 [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"]
269 )
270 ])
271 AS_IF([test AS_VAR_GET(ac_Framework) = yes],
272 [AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])]
273 )
274 AS_VAR_POPDEF([ac_Framework])dnl
275 ])
276
277 dnl Check for some MacOS X frameworks
278 AC_CHECK_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>])
279 AC_CHECK_FRAMEWORK(IOKit, [#include <IOKit/IOKitLib.h>])
280 AC_CHECK_FRAMEWORK(CoreFoundation, [#include <CoreFoundation/CoreFoundation.h>])
281
282 dnl Select system-dependant source files.
283 ETHERSRC=ether_unix.cpp
284 DEFINES="$DEFINES -DBSD_COMP"
285 CXXFLAGS="$CXXFLAGS -fpermissive"
286 dnl Check for the CAM library
287 AC_CHECK_LIB(cam, cam_open_btl, HAVE_LIBCAM=yes, HAVE_LIBCAM=no)
288 if [[ "x$HAVE_LIBCAM" = "xno" ]]; then
289 AC_MSG_WARN([Cannot find libcam for SCSI management, disabling SCSI support.])
290 else
291 dnl Check for the sys kernel includes
292 AC_CHECK_HEADER(camlib.h)
293 if [[ "x$ac_cv_header_camlib_h" = "xno" ]]; then
294 dnl In this case I should fix this thing including a "patch"
295 dnl to access directly to the functions in the kernel :) --Orlando
296 AC_MSG_WARN([Cannot find includes for CAM library, disabling SCSI support.])
297 else
298 SCSISRC=FreeBSD/scsi_freebsd.cpp
299 LIBS="$LIBS -lcam"
300 DEFINES="$DEFINES -DCAM"
301 fi
302 fi
303
304 dnl Is the slirp library supported?
305 if [[ "x$ETHERSRC" = "xether_unix.cpp" ]]; then
306 AC_DEFINE(HAVE_SLIRP, 1, [Define if slirp library is supported])
307 SLIRP_SRCS="\
308 ../slirp/bootp.c ../slirp/ip_output.c ../slirp/tcp_input.c \
309 ../slirp/cksum.c ../slirp/mbuf.c ../slirp/tcp_output.c \
310 ../slirp/debug.c ../slirp/misc.c ../slirp/tcp_subr.c \
311 ../slirp/if.c ../slirp/sbuf.c ../slirp/tcp_timer.c \
312 ../slirp/ip_icmp.c ../slirp/slirp.c ../slirp/tftp.c \
313 ../slirp/ip_input.c ../slirp/socket.c ../slirp/udp.c"
314 fi
315 AC_SUBST(SLIRP_SRCS)
316
317 dnl Use 68k CPU natively?
318 WANT_NATIVE_M68K=no
319
320
321 dnl Define a macro that translates a yesno-variable into a C macro definition
322 dnl to be put into the config.h file
323 dnl $1 -- the macro to define
324 dnl $2 -- the value to translate
325 dnl $3 -- template name
326 AC_DEFUN([AC_TRANSLATE_DEFINE], [
327 if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
328 AC_DEFINE($1, 1, $3)
329 fi
330 ])
331
332 dnl Check that the host supports TUN/TAP devices
333 AC_CACHE_CHECK([whether TUN/TAP is supported],
334 ac_cv_tun_tap_support, [
335 AC_TRY_COMPILE([
336 #if defined(HAVE_LINUX_IF_H) && defined(HAVE_LINUX_IF_TUN_H)
337 #include <linux/if.h>
338 #include <linux/if_tun.h>
339 #endif
340 #if defined(HAVE_NET_IF_H) && defined(HAVE_NET_IF_TUN_H)
341 #include <net/if.h>
342 #include <net/if_tun.h>
343 #endif
344 ], [
345 struct ifreq ifr;
346 memset(&ifr, 0, sizeof(ifr));
347 ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
348 ],
349 ac_cv_tun_tap_support=yes, ac_cv_tun_tap_support=no
350 )
351 ])
352 AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support",
353 [Define if your system supports TUN/TAP devices.])
354
355 dnl Various checks if the system supports vm_allocate() and the like functions.
356 have_mach_vm=no
357 if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \
358 "x$ac_cv_func_vm_protect" = "xyes" ]]; then
359 have_mach_vm=yes
360 fi
361 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
362 [Define if your system has a working vm_allocate()-based memory allocator.])
363
364 dnl Check that vm_allocate(), vm_protect() work
365 if [[ "x$have_mach_vm" = "xyes" ]]; then
366
367 AC_CACHE_CHECK([whether vm_protect works],
368 ac_cv_vm_protect_works, [
369 AC_LANG_SAVE
370 AC_LANG_CPLUSPLUS
371 ac_cv_vm_protect_works=yes
372 dnl First the tests that should segfault
373 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
374 AC_TRY_RUN([
375 #define CONFIGURE_TEST_VM_MAP
376 #define TEST_VM_PROT_$test_def
377 #include "../Unix/vm_alloc.cpp"
378 ], ac_cv_vm_protect_works=no, rm -f core,
379 dnl When cross-compiling, do not assume anything
380 ac_cv_vm_protect_works="guessing no"
381 )
382 done
383 AC_TRY_RUN([
384 #define CONFIGURE_TEST_VM_MAP
385 #define TEST_VM_PROT_RDWR_WRITE
386 #include "../Unix/vm_alloc.cpp"
387 ], , ac_cv_vm_protect_works=no,
388 dnl When cross-compiling, do not assume anything
389 ac_cv_vm_protect_works="guessing no"
390 )
391 AC_LANG_RESTORE
392 ]
393 )
394
395 dnl Remove support for vm_allocate() if vm_protect() does not work
396 if [[ "x$have_mach_vm" = "xyes" ]]; then
397 case $ac_cv_vm_protect_works in
398 *yes) have_mach_vm=yes;;
399 *no) have_mach_vm=no;;
400 esac
401 fi
402 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
403 [Define if your system has a working vm_allocate()-based memory allocator.])
404
405 fi dnl HAVE_MACH_VM
406
407 dnl Various checks if the system supports mmap() and the like functions.
408 dnl ... and Mach memory allocators are not supported
409 have_mmap_vm=no
410 if [[ "x$ac_cv_func_mmap" = "xyes" -a "x$ac_cv_func_munmap" = "xyes" -a \
411 "x$ac_cv_func_mprotect" = "xyes" ]]; then
412 if [[ "x$have_mach_vm" = "xno" ]]; then
413 have_mmap_vm=yes
414 fi
415 fi
416 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
417 [Define if your system has a working mmap()-based memory allocator.])
418
419 dnl Check that mmap() and associated functions work.
420 if [[ "x$have_mmap_vm" = "xyes" ]]; then
421
422 dnl Check if we have a working anonymous mmap()
423 AC_CACHE_CHECK([whether mmap supports MAP_ANON],
424 ac_cv_mmap_anon, [
425 AC_LANG_SAVE
426 AC_LANG_CPLUSPLUS
427 AC_TRY_RUN([
428 #define HAVE_MMAP_ANON
429 #define CONFIGURE_TEST_VM_MAP
430 #define TEST_VM_MMAP_ANON
431 #include "../Unix/vm_alloc.cpp"
432 ], ac_cv_mmap_anon=yes, ac_cv_mmap_anon=no,
433 dnl When cross-compiling, do not assume anything.
434 ac_cv_mmap_anon="guessing no"
435 )
436 AC_LANG_RESTORE
437 ]
438 )
439 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANON, "$ac_cv_mmap_anon",
440 [Define if <sys/mman.h> defines MAP_ANON and mmap()'ing with MAP_ANON works.])
441
442 AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
443 ac_cv_mmap_anonymous, [
444 AC_LANG_SAVE
445 AC_LANG_CPLUSPLUS
446 AC_TRY_RUN([
447 #define HAVE_MMAP_ANONYMOUS
448 #define CONFIGURE_TEST_VM_MAP
449 #define TEST_VM_MMAP_ANON
450 #include "../Unix/vm_alloc.cpp"
451 ], ac_cv_mmap_anonymous=yes, ac_cv_mmap_anonymous=no,
452 dnl When cross-compiling, do not assume anything.
453 ac_cv_mmap_anonymous="guessing no"
454 )
455 AC_LANG_RESTORE
456 ]
457 )
458 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANONYMOUS, "$ac_cv_mmap_anonymous",
459 [Define if <sys/mman.h> defines MAP_ANONYMOUS and mmap()'ing with MAP_ANONYMOUS works.])
460
461 AC_CACHE_CHECK([whether mprotect works],
462 ac_cv_mprotect_works, [
463 AC_LANG_SAVE
464 AC_LANG_CPLUSPLUS
465 ac_cv_mprotect_works=yes
466 dnl First the tests that should segfault
467 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
468 AC_TRY_RUN([
469 #define CONFIGURE_TEST_VM_MAP
470 #define TEST_VM_PROT_$test_def
471 #include "../Unix/vm_alloc.cpp"
472 ], ac_cv_mprotect_works=no, rm -f core,
473 dnl When cross-compiling, do not assume anything
474 ac_cv_mprotect_works="guessing no"
475 )
476 done
477 AC_TRY_RUN([
478 #define CONFIGURE_TEST_VM_MAP
479 #define TEST_VM_PROT_RDWR_WRITE
480 #include "../Unix/vm_alloc.cpp"
481 ], , ac_cv_mprotect_works=no,
482 dnl When cross-compiling, do not assume anything
483 ac_cv_mprotect_works="guessing no"
484 )
485 AC_LANG_RESTORE
486 ]
487 )
488
489 dnl Remove support for mmap() if mprotect() does not work
490 if [[ "x$have_mmap_vm" = "xyes" ]]; then
491 case $ac_cv_mprotect_works in
492 *yes) have_mmap_vm=yes;;
493 *no) have_mmap_vm=no;;
494 esac
495 fi
496 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
497 [Define if your system has a working mmap()-based memory allocator.])
498
499 fi dnl HAVE_MMAP_VM
500
501 dnl Check if we can modify the __PAGEZERO segment for use as Low Memory
502 AC_CACHE_CHECK([whether __PAGEZERO can be Low Memory area 0x0000-0x2000],
503 ac_cv_pagezero_hack, [
504 ac_cv_pagezero_hack=no
505 if AC_TRY_COMMAND([Darwin/testlmem.sh 0x2000]); then
506 ac_cv_pagezero_hack=yes
507 dnl might as well skip the test for mmap-able low memory
508 ac_cv_can_map_lm=no
509 fi
510 ])
511 AC_TRANSLATE_DEFINE(PAGEZERO_HACK, "$ac_cv_pagezero_hack",
512 [Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this system.])
513
514 dnl Check if we can mmap 0x2000 bytes from 0x0000
515 AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x2000],
516 ac_cv_can_map_lm, [
517 AC_LANG_SAVE
518 AC_LANG_CPLUSPLUS
519 AC_TRY_RUN([
520 #include "../Unix/vm_alloc.cpp"
521 int main(void) { /* returns 0 if we could map the lowmem globals */
522 volatile char * lm = 0;
523 if (vm_init() < 0) exit(1);
524 if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
525 lm[0] = 'z';
526 if (vm_release((char *)lm, 0x2000) < 0) exit(1);
527 vm_exit(); exit(0);
528 }
529 ], ac_cv_can_map_lm=yes, ac_cv_can_map_lm=no,
530 dnl When cross-compiling, do not assume anything.
531 ac_cv_can_map_lm="guessing no"
532 )
533 AC_LANG_RESTORE
534 ]
535 )
536
537 dnl Check if we have POSIX shared memory support
538 AC_CACHE_CHECK([whether POSIX shared memory is working],
539 ac_cv_have_posix_shm, [
540 AC_LANG_SAVE
541 AC_LANG_CPLUSPLUS
542 AC_TRY_RUN([
543 #define HAVE_POSIX_SHM
544 #include "vm_alloc.cpp"
545 int main(void) { /* returns 0 if we have working POSIX shm */
546 if (vm_init() < 0) exit(2);
547 char *m1 = (char *)vm_acquire(32768, VM_MAP_DEFAULT | VM_MAP_33BIT);
548 if (m1 == VM_MAP_FAILED) exit(3);
549 vm_exit(); exit(0);
550 }
551 ], ac_cv_have_posix_shm=yes, ac_cv_have_posix_shm=no,
552 dnl When cross-compiling, do not assume anything.
553 ac_cv_have_posix_shm="guessing no"
554 )
555 AC_LANG_RESTORE
556 ]
557 )
558 AC_TRANSLATE_DEFINE(HAVE_POSIX_SHM, "$ac_cv_have_posix_shm",
559 [Define if your system supports POSIX shared memory.])
560
561 dnl Check if we have working 33-bit memory addressing
562 AC_CACHE_CHECK([whether 33-bit memory addressing is working],
563 ac_cv_have_33bit_addressing, [
564 AC_LANG_SAVE
565 AC_LANG_CPLUSPLUS
566 AC_TRY_RUN([
567 #define USE_33BIT_ADDRESSING 1
568 #include "vm_alloc.cpp"
569 int main(void) { /* returns 0 if we have working 33-bit addressing */
570 if (sizeof(void *) < 8) exit(1);
571 if (vm_init() < 0) exit(2);
572 char *m1 = (char *)vm_acquire(32768, VM_MAP_DEFAULT | VM_MAP_33BIT);
573 if (m1 == VM_MAP_FAILED) exit(3);
574 char *m2 = m1 + (1L << 32);
575 m1[0] = 0x12; if (m2[0] != 0x12) exit(4);
576 m2[0] = 0x34; if (m1[0] != 0x34) exit(5);
577 vm_exit(); exit(0);
578 }
579 ], ac_cv_have_33bit_addressing=yes, ac_cv_have_33bit_addressing=no,
580 dnl When cross-compiling, do not assume anything.
581 ac_cv_have_33bit_addressing="guessing no"
582 )
583 AC_LANG_RESTORE
584 ]
585 )
586
587 dnl Check signal handlers need to be reinstalled
588 AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
589 ac_cv_signal_need_reinstall, [
590 AC_LANG_SAVE
591 AC_LANG_CPLUSPLUS
592 AC_TRY_RUN([
593 #include <stdlib.h>
594 #ifdef HAVE_UNISTD_H
595 #include <unistd.h>
596 #endif
597 #include <signal.h>
598 static int handled_signal = 0;
599 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
600 int main(void) { /* returns 0 if signals need not to be reinstalled */
601 signal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
602 exit(handled_signal == 2);
603 }
604 ], ac_cv_signal_need_reinstall=yes, ac_cv_signal_need_reinstall=no,
605 dnl When cross-compiling, do not assume anything.
606 ac_cv_signal_need_reinstall="guessing yes"
607 )
608 AC_LANG_RESTORE
609 ]
610 )
611 AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
612 [Define if your system requires signals to be reinstalled.])
613
614 dnl Check if sigaction handlers need to be reinstalled
615 AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
616 ac_cv_sigaction_need_reinstall, [
617 AC_LANG_SAVE
618 AC_LANG_CPLUSPLUS
619 AC_TRY_RUN([
620 #include <stdlib.h>
621 #ifdef HAVE_UNISTD_H
622 #include <unistd.h>
623 #endif
624 #include <signal.h>
625 static int handled_signal = 0;
626 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
627 typedef RETSIGTYPE (*signal_handler)(int);
628 static signal_handler mysignal(int sig, signal_handler handler) {
629 struct sigaction old_sa;
630 struct sigaction new_sa;
631 new_sa.sa_handler = handler;
632 return ((sigaction(sig,&new_sa,&old_sa) < 0) ? SIG_IGN : old_sa.sa_handler);
633 }
634 int main(void) { /* returns 0 if signals need not to be reinstalled */
635 mysignal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
636 exit(handled_signal == 2);
637 }
638 ], ac_cv_sigaction_need_reinstall=yes, ac_cv_sigaction_need_reinstall=no,
639 dnl When cross-compiling, do not assume anything.
640 ac_cv_sigaction_need_reinstall="guessing yes"
641 )
642 AC_LANG_RESTORE
643 ]
644 )
645 AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
646 [Define if your system requires sigactions to be reinstalled.])
647
648 dnl Check if Mach exceptions supported.
649 AC_CACHE_CHECK([whether your system supports Mach exceptions],
650 ac_cv_have_mach_exceptions, [
651 AC_LANG_SAVE
652 AC_LANG_CPLUSPLUS
653 AC_TRY_RUN([
654 #define HAVE_MACH_EXCEPTIONS 1
655 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
656 #include "../Unix/vm_alloc.cpp"
657 #include "../Unix/sigsegv.cpp"
658 ], [
659 sigsegv_recovery=mach
660 ac_cv_have_mach_exceptions=yes
661 ],
662 ac_cv_have_mach_exceptions=no,
663 dnl When cross-compiling, do not assume anything.
664 ac_cv_have_mach_exceptions=no
665 )
666 AC_LANG_RESTORE
667 ]
668 )
669 AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions",
670 [Define if your system supports Mach exceptions.])
671
672 dnl Otherwise, check if extended signals are supported.
673 if [[ -z "$sigsegv_recovery" ]]; then
674 AC_CACHE_CHECK([whether your system supports extended signal handlers],
675 ac_cv_have_extended_signals, [
676 AC_LANG_SAVE
677 AC_LANG_CPLUSPLUS
678 AC_TRY_RUN([
679 #define HAVE_SIGINFO_T 1
680 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
681 #include "../Unix/vm_alloc.cpp"
682 #include "../Unix/sigsegv.cpp"
683 ], [
684 sigsegv_recovery=siginfo
685 ac_cv_have_extended_signals=yes
686 ],
687 ac_cv_have_extended_signals=no,
688 dnl When cross-compiling, do not assume anything.
689 ac_cv_have_extended_signals=no
690 )
691 AC_LANG_RESTORE
692 ]
693 )
694 AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals",
695 [Define if your system support extended signals.])
696 fi
697
698 dnl Otherwise, check for subterfuges.
699 if [[ -z "$sigsegv_recovery" ]]; then
700 AC_CACHE_CHECK([whether we then have a subterfuge for your system],
701 ac_cv_have_sigcontext_hack, [
702 AC_LANG_SAVE
703 AC_LANG_CPLUSPLUS
704 AC_TRY_RUN([
705 #define HAVE_SIGCONTEXT_SUBTERFUGE 1
706 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
707 #include "../Unix/vm_alloc.cpp"
708 #include "../Unix/sigsegv.cpp"
709 ], [
710 sigsegv_recovery=sigcontext
711 ac_cv_have_sigcontext_hack=yes
712 ],
713 ac_cv_have_sigcontext_hack=no,
714 dnl When cross-compiling, do not assume anything.
715 ac_cv_have_sigcontext_hack=no
716 )
717 AC_LANG_RESTORE
718 ])
719 AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack",
720 [Define if we know a hack to replace siginfo_t->si_addr member.])
721 fi
722
723 dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
724 AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
725 ac_cv_have_skip_instruction, [
726 AC_LANG_SAVE
727 AC_LANG_CPLUSPLUS
728 AC_TRY_RUN([
729 #define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
730 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
731 #include "../Unix/vm_alloc.cpp"
732 #include "../Unix/sigsegv.cpp"
733 ], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
734 dnl When cross-compiling, do not assume anything.
735 ac_cv_have_skip_instruction=no
736 )
737 AC_LANG_RESTORE
738 ]
739 )
740 AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
741 [Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
742
743 dnl Can we do Video on SEGV Signals ?
744 CAN_VOSF=no
745 if [[ -n "$sigsegv_recovery" ]]; then
746 CAN_VOSF=yes
747 fi
748
749 dnl A dummy program that returns always true
750 AC_PATH_PROG([BLESS], "true")
751
752 dnl Determine the addressing mode to use
753 if [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then
754 ADDRESSING_MODE="real"
755 else
756 ADDRESSING_MODE=""
757 AC_MSG_CHECKING([for the addressing mode to use])
758 for am in $ADDRESSING_TEST_ORDER; do
759 case $am in
760 real)
761 dnl Requires ability to mmap() Low Memory globals
762 if [[ "x$ac_cv_can_map_lm$ac_cv_pagezero_hack" = "xnono" ]]; then
763 continue
764 fi
765 dnl Requires VOSF screen updates
766 if [[ "x$CAN_VOSF" = "xno" ]]; then
767 continue
768 fi
769 dnl Real addressing will probably work.
770 ADDRESSING_MODE="real"
771 WANT_VOSF=yes dnl we can use VOSF and we need it actually
772 DEFINES="$DEFINES -DREAL_ADDRESSING"
773 AC_DEFINE(REAL_ADDRESSING, 1, [Emulated memory is memory mapped to actual address.])
774 if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then
775 BLESS=Darwin/lowmem
776 LDFLAGS="$LDFLAGS -pagezero_size 0x2000"
777 fi
778 break
779 ;;
780 direct)
781 dnl Requires VOSF screen updates
782 if [[ "x$CAN_VOSF" = "xyes" ]]; then
783 ADDRESSING_MODE="direct"
784 WANT_VOSF=yes dnl we can use VOSF and we need it actually
785 DEFINES="$DEFINES -DDIRECT_ADDRESSING"
786 AC_DEFINE(DIRECT_ADDRESSING, 1, [Emulated memory is an offset from actual address.])
787 break
788 fi
789 ;;
790 banks)
791 dnl Default addressing mode
792 ADDRESSING_MODE="memory banks"
793 break
794 ;;
795 *)
796 AC_MSG_ERROR([Internal configure.in script error for $am addressing mode])
797 esac
798 done
799 AC_MSG_RESULT($ADDRESSING_MODE)
800 if [[ "x$ADDRESSING_MODE" = "x" ]]; then
801 AC_MSG_WARN([Sorry, no suitable addressing mode in $ADDRESSING_TEST_ORDER])
802 ADDRESSING_MODE="memory banks"
803 fi
804 fi
805
806 dnl Banked Memory Addressing mode is not supported by the JIT compiler
807 if [[ "x$WANT_JIT" = "xyes" -a "x$ADDRESSING_MODE" = "xmemory banks" ]]; then
808 AC_MSG_ERROR([Sorry, the JIT Compiler requires Direct Addressing, at least])
809 fi
810
811 dnl Enable VOSF screen updates with this feature is requested and feasible
812 if [[ "x$WANT_VOSF" = "xyes" -a "x$CAN_VOSF" = "xyes" ]]; then
813 AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
814 else
815 WANT_VOSF=no
816 fi
817
818 dnl Check for GAS.
819 HAVE_GAS=no
820 AC_MSG_CHECKING(for GAS .p2align feature)
821 cat >conftest.S << EOF
822 .text
823 .p2align 5
824 EOF
825 if $CC conftest.S -c -o conftest.o >/dev/null 2>&1 ; then HAVE_GAS=yes; fi
826 AC_MSG_RESULT($HAVE_GAS)
827
828 dnl Check for GCC 2.7 or higher.
829 HAVE_GCC27=no
830 AC_MSG_CHECKING(for GCC 2.7 or higher)
831 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5)
832 # error gcc < 2.7
833 #endif
834 ]])],
835 [AC_MSG_RESULT(yes); HAVE_GCC27=yes],
836 [AC_MSG_RESULT(no)])
837
838 dnl Check for GCC 3.0 or higher.
839 HAVE_GCC30=no
840 AC_MSG_CHECKING(for GCC 3.0 or higher)
841 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ >= 3)
842 # error gcc < 3
843 #endif
844 ]])],
845 [AC_MSG_RESULT(yes); HAVE_GCC30=yes],
846 [AC_MSG_RESULT(no)])
847
848 dnl Check for ICC.
849 AC_MSG_CHECKING(for ICC)
850 HAVE_ICC=no
851 if $CXX -V -v 2>&1 | grep -q "Intel(R) C++ Compiler"; then
852 HAVE_ICC=yes
853 fi
854 AC_MSG_RESULT($HAVE_ICC)
855
856 dnl Set "-fomit-frame-pointer" on i386 GCC 2.7 or higher.
857 dnl Also set "-fno-exceptions" for C++ because exception handling requires
858 dnl the frame pointer.
859 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
860 CFLAGS="$CFLAGS -fomit-frame-pointer"
861 CXXFLAGS="$CXXFLAGS -fomit-frame-pointer -fno-exceptions"
862 fi
863
864 dnl (gb) Do not merge constants since it breaks fpu/fpu_x86.cpp.
865 dnl As of 2001/08/02, this affects the following compilers:
866 dnl Official: probably gcc-3.1 (mainline CVS)
867 dnl Mandrake: gcc-2.96 >= 0.59mdk, gcc-3.0.1 >= 0.1mdk
868 dnl Red Hat : gcc-2.96 >= 89, gcc-3.0 >= 1
869 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
870 SAVED_CXXFLAGS="$CXXFLAGS"
871 CXXFLAGS="$CXXFLAGS -fno-merge-constants"
872 AC_CACHE_CHECK([whether GCC supports constants merging], ac_cv_gcc_constants_merging, [
873 AC_LANG_SAVE
874 AC_LANG_CPLUSPLUS
875 AC_TRY_COMPILE([],[],[ac_cv_gcc_constants_merging=yes],[ac_cv_gcc_constants_merging=no])
876 AC_LANG_RESTORE
877 ])
878 if [[ "x$ac_cv_gcc_constants_merging" != "xyes" ]]; then
879 CXXFLAGS="$SAVED_CXXFLAGS"
880 fi
881 fi
882
883 dnl Store motion was introduced in 3.3-hammer branch and any gcc >= 3.4
884 dnl However, there are some corner cases exposed on x86-64
885 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
886 SAVED_CXXFLAGS="$CXXFLAGS"
887 CXXFLAGS="$CXXFLAGS -fno-gcse-sm"
888 AC_CACHE_CHECK([whether GCC supports store motion], ac_cv_gcc_store_motion, [
889 AC_LANG_SAVE
890 AC_LANG_CPLUSPLUS
891 AC_TRY_COMPILE([],[],[ac_cv_gcc_store_motion=yes],[ac_cv_gcc_store_motion=no])
892 AC_LANG_RESTORE
893 ])
894 if [[ "x$ac_cv_gcc_store_motion" != "xyes" ]]; then
895 CXXFLAGS="$SAVED_CXXFLAGS"
896 fi
897 fi
898
899 dnl Add -fno-strict-aliasing for slirp sources
900 if [[ "x$HAVE_GCC30" = "xyes" ]]; then
901 SAVED_CFLAGS="$CFLAGS"
902 CFLAGS="$CFLAGS -fno-strict-aliasing"
903 AC_CACHE_CHECK([whether the compiler supports -fno-strict-aliasing],
904 ac_cv_gcc_no_strict_aliasing, [
905 AC_TRY_COMPILE([],[],
906 [ac_cv_gcc_no_strict_aliasing=yes; AC_SUBST(SLIRP_CFLAGS, "-fno-strict-aliasing")],
907 [ac_cv_gcc_no_strict_aliasing=no])
908 ])
909 CFLAGS="$SAVED_CFLAGS"
910 fi
911
912 dnl Add -mdynamic-no-pic for MacOS X (XXX icc10 will support MacOS X)
913 if [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
914 SAVED_CFLAGS="$CFLAGS"
915 CFLAGS="$CFLAGS -mdynamic-no-pic"
916 AC_CACHE_CHECK([whether the compiler supports -mdynamic-no-pic],
917 ac_cv_gcc_mdynamic_no_pic, [
918 AC_TRY_COMPILE([],[],[ac_cv_gcc_mdynamic_no_pic=yes],[ac_cv_gcc_mdynamic_no_pic=no])
919 ])
920 if [[ "x$ac_cv_gcc_mdynamic_no_pic" = "xyes" ]]; then
921 CXXFLAGS="$CXXFLAGS -mdynamic-no-pic"
922 else
923 CFLAGS="$SAVED_CFLAGS"
924 fi
925 fi
926
927 dnl Select appropriate CPU source and REGPARAM define.
928 ASM_OPTIMIZATIONS=none
929 CPUSRCS="cpuemu1.cpp cpuemu2.cpp cpuemu3.cpp cpuemu4.cpp cpuemu5.cpp cpuemu6.cpp cpuemu7.cpp cpuemu8.cpp"
930
931 dnl (gb) JITSRCS will be emptied later if the JIT is not available
932 dnl Other platforms should define their own set of noflags file variants
933 CAN_JIT=no
934 JITSRCS="compemu1.cpp compemu2.cpp compemu3.cpp compemu4.cpp compemu5.cpp compemu6.cpp compemu7.cpp compemu8.cpp"
935
936 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
937 dnl i386 CPU
938 DEFINES="$DEFINES -DUNALIGNED_PROFITABLE -DREGPARAM=\"__attribute__((regparm(3)))\""
939 if [[ "x$HAVE_GAS" = "xyes" ]]; then
940 ASM_OPTIMIZATIONS=i386
941 DEFINES="$DEFINES -DX86_ASSEMBLY -DOPTIMIZED_FLAGS -DSAHF_SETO_PROFITABLE"
942 JITSRCS="cpuemu1_nf.cpp cpuemu2_nf.cpp cpuemu3_nf.cpp cpuemu4_nf.cpp cpuemu5_nf.cpp cpuemu6_nf.cpp cpuemu7_nf.cpp cpuemu8_nf.cpp $JITSRCS"
943 CAN_JIT=yes
944 fi
945 elif [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_X86_64" = "xyes" ]]; then
946 dnl x86-64 CPU
947 DEFINES="$DEFINES -DUNALIGNED_PROFITABLE"
948 if [[ "x$HAVE_GAS" = "xyes" ]]; then
949 ASM_OPTIMIZATIONS="x86-64"
950 DEFINES="$DEFINES -DX86_64_ASSEMBLY -DOPTIMIZED_FLAGS"
951 JITSRCS="cpuemu1_nf.cpp cpuemu2_nf.cpp cpuemu3_nf.cpp cpuemu4_nf.cpp cpuemu5_nf.cpp cpuemu6_nf.cpp cpuemu7_nf.cpp cpuemu8_nf.cpp $JITSRCS"
952 CAN_JIT=yes
953 WANT_32BIT_ADDRESSING=yes
954 fi
955 elif [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_SPARC" = "xyes" -a "x$HAVE_GAS" = "xyes" ]]; then
956 dnl SPARC CPU
957 case "$target_os" in
958 solaris*)
959 AC_MSG_CHECKING(SPARC CPU architecture)
960 SPARC_TYPE=`Solaris/which_sparc`
961 AC_MSG_RESULT($SPARC_TYPE)
962 case "$SPARC_TYPE" in
963 SPARC_V8)
964 ASM_OPTIMIZATIONS="SPARC V8 architecture"
965 DEFINES="$DEFINES -DSPARC_V8_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
966 CFLAGS="$CFLAGS -Wa,-Av8"
967 CXXFLAGS="$CXXFLAGS -Wa,-Av8"
968 ;;
969 SPARC_V9)
970 ASM_OPTIMIZATIONS="SPARC V9 architecture"
971 DEFINES="$DEFINES -DSPARC_V9_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
972 CFLAGS="$CFLAGS -Wa,-Av9"
973 CXXFLAGS="$CXXFLAGS -Wa,-Av9"
974 ;;
975 esac
976 ;;
977 esac
978 elif [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then
979 dnl Native m68k, no emulation
980 CPUINCLUDES="-I../native_cpu"
981 CPUSRCS="asm_support.s"
982 fi
983
984 dnl Enable JIT compiler, if possible.
985 if [[ "x$WANT_JIT" = "xyes" -a "x$CAN_JIT" ]]; then
986 JITSRCS="$JITSRCS ../uae_cpu/compiler/compemu_support.cpp ../uae_cpu/compiler/compemu_fpp.cpp compstbl.o cpustbl_nf.o"
987 DEFINES="$DEFINES -DUSE_JIT -DUSE_JIT_FPU"
988
989 if [[ "x$WANT_JIT_DEBUG" = "xyes" ]]; then
990 if [[ "x$WANT_MON" = "xyes" ]]; then
991 DEFINES="$DEFINES -DJIT_DEBUG=1"
992 else
993 AC_MSG_WARN([cxmon not found, ignoring --enable-jit-debug])
994 WANT_JIT_DEBUG=no
995 fi
996 fi
997
998 dnl IEEE core is the only FPU emulator to use with the JIT compiler
999 case $FPE_CORE_TEST_ORDER in
1000 ieee*) ;;
1001 *) AC_MSG_WARN([Forcing use of the IEEE FPU core, as the JIT compiler supports only this one.]) ;;
1002 esac
1003 FPE_CORE_TEST_ORDER="ieee"
1004 else
1005 WANT_JIT=no
1006 WANT_JIT_DEBUG=no
1007 JITSRCS=""
1008 fi
1009
1010 dnl Use 33-bit memory addressing?
1011 if [[ "$ac_cv_have_33bit_addressing:$WANT_33BIT_ADDRESSING" = "yes:yes" ]]; then
1012 use_33bit_addressing=yes
1013 fi
1014 AC_TRANSLATE_DEFINE(USE_33BIT_ADDRESSING, "$use_33bit_addressing",
1015 [Define to use 33-bit memory addressing on 64-bit JIT capable systems.])
1016
1017 dnl Utility macro used by next two tests.
1018 dnl AC_EXAMINE_OBJECT(C source code,
1019 dnl commands examining object file,
1020 dnl [commands to run if compile failed]):
1021 dnl
1022 dnl Compile the source code to an object file; then convert it into a
1023 dnl printable representation. All unprintable characters and
1024 dnl asterisks (*) are replaced by dots (.). All white space is
1025 dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the
1026 dnl output, but runs of newlines are compressed to a single newline.
1027 dnl Finally, line breaks are forcibly inserted so that no line is
1028 dnl longer than 80 columns and the file ends with a newline. The
1029 dnl result of all this processing is in the file conftest.dmp, which
1030 dnl may be examined by the commands in the second argument.
1031 dnl
1032 AC_DEFUN([gcc_AC_EXAMINE_OBJECT],
1033 [AC_LANG_SAVE
1034 AC_LANG_C
1035 dnl Next bit cribbed from AC_TRY_COMPILE.
1036 cat > conftest.$ac_ext <<EOF
1037 [#line __oline__ "configure"
1038 #include "confdefs.h"
1039 $1
1040 ]EOF
1041 if AC_TRY_EVAL(ac_compile); then
1042 od -c conftest.o |
1043 sed ['s/^[0-7]*[ ]*/ /
1044 s/\*/./g
1045 s/ \\n/*/g
1046 s/ [0-9][0-9][0-9]/./g
1047 s/ \\[^ ]/./g'] |
1048 tr -d '
1049 ' | tr -s '*' '
1050 ' | fold | sed '$a\
1051 ' > conftest.dmp
1052 $2
1053 ifelse($3, , , else
1054 $3
1055 )dnl
1056 fi
1057 rm -rf conftest*
1058 AC_LANG_RESTORE])
1059
1060 dnl Floating point format probe.
1061 dnl The basic concept is the same as the above: grep the object
1062 dnl file for an interesting string. We have to watch out for
1063 dnl rounding changing the values in the object, however; this is
1064 dnl handled by ignoring the least significant byte of the float.
1065 dnl
1066 dnl Does not know about VAX G-float or C4x idiosyncratic format.
1067 dnl It does know about PDP-10 idiosyncratic format, but this is
1068 dnl not presently supported by GCC. S/390 "binary floating point"
1069 dnl is in fact IEEE (but maybe we should have that in EBCDIC as well
1070 dnl as ASCII?)
1071 dnl
1072 AC_DEFUN([gcc_AC_C_FLOAT_FORMAT],
1073 [AC_CACHE_CHECK(floating point format, ac_cv_c_float_format,
1074 [gcc_AC_EXAMINE_OBJECT(
1075 [/* This will not work unless sizeof(double) == 8. */
1076 extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
1077
1078 /* This structure must have no internal padding. */
1079 struct possibility {
1080 char prefix[8];
1081 double candidate;
1082 char postfix[8];
1083 };
1084
1085 #define C(cand) { "\nformat:", cand, ":tamrof\n" }
1086 struct possibility table [] =
1087 {
1088 C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
1089 C( 3.53802595280598432000e+18), /* D__float - VAX */
1090 C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
1091 C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
1092 C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
1093 };],
1094 [if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1095 ac_cv_c_float_format='IEEE (big-endian)'
1096 elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
1097 ac_cv_c_float_format='IEEE (big-endian)'
1098 elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
1099 ac_cv_c_float_format='IEEE (little-endian)'
1100 elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
1101 ac_cv_c_float_format='IEEE (little-endian)'
1102 elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
1103 ac_cv_c_float_format='VAX D-float'
1104 elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
1105 ac_cv_c_float_format='PDP-10'
1106 elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1107 ac_cv_c_float_format='IBM 370 hex'
1108 else
1109 AC_MSG_ERROR(Unknown floating point format)
1110 fi],
1111 [AC_MSG_ERROR(compile failed)])
1112 ])
1113 # IEEE is the default format. If the float endianness isn't the same
1114 # as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
1115 # (which is a tristate: yes, no, default). This is only an issue with
1116 # IEEE; the other formats are only supported by a few machines each,
1117 # all with the same endianness.
1118 format=IEEE_FLOAT_FORMAT
1119 fbigend=
1120 case $ac_cv_c_float_format in
1121 'IEEE (big-endian)' )
1122 if test $ac_cv_c_bigendian = no; then
1123 fbigend=1
1124 fi
1125 ;;
1126 'IEEE (little-endian)' )
1127 if test $ac_cv_c_bigendian = yes; then
1128 fbigend=0
1129 fi
1130 ;;
1131 'VAX D-float' )
1132 format=VAX_FLOAT_FORMAT
1133 ;;
1134 'PDP-10' )
1135 format=PDP10_FLOAT_FORMAT
1136 ;;
1137 'IBM 370 hex' )
1138 format=IBM_FLOAT_FORMAT
1139 ;;
1140 esac
1141 AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format,
1142 [Define to the floating point format of the host machine.])
1143 if test -n "$fbigend"; then
1144 AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend,
1145 [Define to 1 if the host machine stores floating point numbers in
1146 memory with the word containing the sign bit at the lowest address,
1147 or to 0 if it does it the other way around.
1148
1149 This macro should not be defined if the ordering is the same as for
1150 multi-word integers.])
1151 fi
1152 ])
1153
1154 dnl Select appropriate FPU source.
1155 gcc_AC_C_FLOAT_FORMAT
1156 AC_CHECK_HEADERS(ieee754.h ieeefp.h floatingpoint.h nan.h)
1157
1158 for fpe in $FPE_CORE_TEST_ORDER; do
1159 case $fpe in
1160 ieee)
1161 case $ac_cv_c_float_format in
1162 IEEE*)
1163 FPE_CORE="IEEE fpu core"
1164 DEFINES="$DEFINES -DFPU_IEEE"
1165 AC_DEFINE(FPU_IEEE, 1, [Floating Point Core emulation method is IEEE.])
1166 FPUSRCS="../uae_cpu/fpu/fpu_ieee.cpp"
1167 dnl Math functions not mandated by C99 standard
1168 AC_CHECK_FUNCS(isnanl isinfl)
1169 dnl Math functions required by C99 standard, but probably not
1170 dnl implemented everywhere. In that case, we fall back to the
1171 dnl regular variant for doubles.
1172 AC_CHECK_FUNCS(logl log10l expl powl fabsl sqrtl)
1173 AC_CHECK_FUNCS(sinl cosl tanl sinhl coshl tanhl)
1174 AC_CHECK_FUNCS(asinl acosl atanl asinhl acoshl atanhl)
1175 AC_CHECK_FUNCS(floorl ceill)
1176 break
1177 ;;
1178 esac
1179 ;;
1180 x86)
1181 if [[ ":$HAVE_GCC27:$HAVE_I386:$HAVE_GAS:" = ":yes:yes:yes:" ]]; then
1182 FPE_CORE="i387 fpu core"
1183 DEFINES="$DEFINES -DFPU_X86"
1184 FPUSRCS="../uae_cpu/fpu/fpu_x86.cpp"
1185 break
1186 fi
1187 ;;
1188 uae)
1189 FPE_CORE="uae fpu core"
1190 DEFINES="$DEFINES -DFPU_UAE"
1191 AC_DEFINE(FPU_UAE, 1, [Floating Point Core emulation is standard UAE.])
1192 FPUSRCS="../uae_cpu/fpu/fpu_uae.cpp"
1193 break
1194 ;;
1195 *)
1196 AC_MSG_ERROR([Internal configure.in script error for $fpe fpu core])
1197 ;;
1198 esac
1199 done
1200 if [[ "x$FPE_CORE" = "x" ]]; then
1201 AC_MSG_ERROR([Sorry, no suitable FPU core found in $FPE_CORE_TEST_ORDER])
1202 fi
1203
1204 dnl Check for certain math functions
1205 AC_CHECK_FUNCS(atanh)
1206 AC_CHECK_FUNCS(isnan isinf finite isnormal signbit)
1207
1208 dnl UAE CPU sources for all non-m68k-native architectures.
1209 if [[ "x$WANT_NATIVE_M68K" = "xno" ]]; then
1210 CPUINCLUDES="-I../uae_cpu"
1211 CPUSRCS="../uae_cpu/basilisk_glue.cpp ../uae_cpu/memory.cpp ../uae_cpu/newcpu.cpp ../uae_cpu/readcpu.cpp $FPUSRCS cpustbl.cpp cpudefs.cpp $CPUSRCS $JITSRCS"
1212 fi
1213
1214 dnl Remove the "-g" option if set for GCC.
1215 if [[ "x$HAVE_GCC27" = "xyes" ]]; then
1216 CFLAGS=`echo $CFLAGS | sed -e 's/-g\b//g'`
1217 CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-g\b//g'`
1218 fi
1219
1220 dnl Or if we have -IPA (MIPSPro compilers)
1221 if [[ "x$HAVE_IPA" = "xyes" ]]; then
1222 CFLAGS="`echo $CFLAGS | sed -e 's/-g//g'` -O3 -OPT:Olimit=0 -IPA"
1223 CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-g//g'` -O3 -OPT:Olimit=0 -IPA"
1224 CXXFLAGS="-LANG:std $CXXFLAGS"
1225 LDFLAGS="$LDFLAGS -O3 -OPT:Olimit=0 -IPA"
1226 fi
1227
1228 dnl
1229 dnl Some Mac OS X specific stuff:
1230 dnl
1231
1232 dnl MacOS 10.2 (and later?) have a particular header for defining the OS version
1233 if [[ "x$ac_cv_header_AvailabilityMacros_h" = "xyes" ]]; then
1234 AC_DEFINE(AVAILABILITYMACROS, 1, [Header specific to 10.2 and later.])
1235 fi
1236
1237 dnl Which IDE do we use?
1238 if test -d "/Developer/Applications/Xcode.app"; then
1239 IDE=xcodebuild
1240 PROJECT=BasiliskII.xcode
1241 IDEARGS="-project BasiliskII.xcode"
1242 else
1243 IDE=pbxbuild
1244 PROJECT=BasiliskII.pbproj
1245 IDEARGS=""
1246 fi
1247
1248 AC_DEFINE(HAVE_SLIRP, 1, [Try to compile network emulation library!])
1249 AC_DEFINE(DATADIR, "~", [unix_ether needs this!])
1250
1251 dnl Generate Makefile.
1252 AC_SUBST(DEFINES)
1253 AC_SUBST(SYSSRCS)
1254 AC_SUBST(CPUINCLUDES)
1255 AC_SUBST(CPUSRCS)
1256 AC_SUBST(BLESS)
1257 AC_SUBST(IDE)
1258 AC_SUBST(PROJECT)
1259 AC_SUBST(IDEARGS)
1260 AC_SUBST(SLIRP_SRCS)
1261 AC_SUBST(KEYCODES)
1262 dnl autoconf on 10.1 doesn't understand these
1263 dnl AC_CONFIG_FILES([Makefile])
1264 dnl AC_OUTPUT
1265 AC_OUTPUT(Makefile)
1266
1267 dnl Print summary.
1268 echo
1269 echo Basilisk II configuration summary:
1270 echo
1271 echo Multiple emulator windows .............. : $ENABLE_MULTIPLE
1272 echo Enable video on SEGV signals ........... : $WANT_VOSF
1273 echo mon debugger support ................... : $WANT_MON
1274 echo Running m68k code natively ............. : $WANT_NATIVE_M68K
1275 echo Use JIT compiler ....................... : $WANT_JIT
1276 echo JIT debug mode ......................... : $WANT_JIT_DEBUG
1277 echo Floating-Point emulation core .......... : $FPE_CORE
1278 echo Assembly optimizations ................. : $ASM_OPTIMIZATIONS
1279 echo Addressing mode ........................ : $ADDRESSING_MODE
1280 echo Bad memory access recovery type ........ : $sigsegv_recovery
1281 echo Mac OS X development environment ....... : $IDE
1282 echo
1283 echo "Configuration done. Now type \"make\" (or \"make ide\")."