ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/MacOSX/configure.in
Revision: 1.21
Committed: 2007-01-13T18:21:30Z (17 years, 10 months ago) by gbeauche
Branch: MAIN
Changes since 1.20: +1 -59 lines
Log Message:
Remove the 33-bit addressing hack as it's overly complex for not much gain.
Rather, use an address override prefix (0x67) though Intel Core optimization
reference guide says to avoid LCP prefixes. In practise, impact on performance
is measurably marginal on e.g. Speedometer tests.

File Contents

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