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

# User Rev Content
1 nigel 1.10 dnl Mac OS X configuration driver
2 nigel 1.18 dnl $Id: configure.in,v 1.17 2005/09/19 07:45:07 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     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 nigel 1.1 dnl Select system-dependant source files.
283 nigel 1.17 ETHERSRC=ether_unix.cpp
284 nigel 1.13 DEFINES="$DEFINES -DBSD_COMP"
285     CXXFLAGS="$CXXFLAGS -fpermissive"
286 nigel 1.1 dnl Check for the CAM library
287 nigel 1.5 AC_CHECK_LIB(cam, cam_open_btl, HAVE_LIBCAM=yes, HAVE_LIBCAM=no)
288 nigel 1.1 if [[ "x$HAVE_LIBCAM" = "xno" ]]; then
289     AC_MSG_WARN([Cannot find libcam for SCSI management, disabling SCSI support.])
290 nigel 1.5 else
291     dnl Check for the sys kernel includes
292 nigel 1.1 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 nigel 1.17 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 nigel 1.1 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 nigel 1.5 dnl $3 -- template name
326 nigel 1.17 AC_DEFUN([AC_TRANSLATE_DEFINE], [
327 nigel 1.1 if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
328 nigel 1.5 AC_DEFINE($1, 1, $3)
329 nigel 1.1 fi
330     ])
331    
332 nigel 1.17 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 nigel 1.1 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 nigel 1.5 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
362     [Define if your system has a working vm_allocate()-based memory allocator.])
363 nigel 1.1
364     dnl Check that vm_allocate(), vm_protect() work
365     if [[ "x$have_mach_vm" = "xyes" ]]; then
366    
367 nigel 1.5 AC_CACHE_CHECK([whether vm_protect works],
368 nigel 1.1 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 nigel 1.6 #include "../Unix/vm_alloc.cpp"
378 nigel 1.1 ], 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 nigel 1.6 #include "../Unix/vm_alloc.cpp"
387 nigel 1.1 ], , 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 nigel 1.5 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
403     [Define if your system has a working vm_allocate()-based memory allocator.])
404 nigel 1.1
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 nigel 1.5 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
417     [Define if your system has a working mmap()-based memory allocator.])
418 nigel 1.1
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 nigel 1.5 AC_CACHE_CHECK([whether mmap supports MAP_ANON],
424 nigel 1.1 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 nigel 1.6 #include "../Unix/vm_alloc.cpp"
432 nigel 1.1 ], 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 nigel 1.5 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 nigel 1.1
442 nigel 1.5 AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
443 nigel 1.1 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 nigel 1.6 #include "../Unix/vm_alloc.cpp"
451 nigel 1.1 ], 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 nigel 1.5 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 nigel 1.1
461 nigel 1.5 AC_CACHE_CHECK([whether mprotect works],
462 nigel 1.1 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 nigel 1.6 #include "../Unix/vm_alloc.cpp"
472 nigel 1.1 ], 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 nigel 1.6 #include "../Unix/vm_alloc.cpp"
481 nigel 1.1 ], , 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 nigel 1.5 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
497     [Define if your system has a working mmap()-based memory allocator.])
498 nigel 1.1
499     fi dnl HAVE_MMAP_VM
500    
501 nigel 1.12 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 nigel 1.1 dnl Check if we can mmap 0x2000 bytes from 0x0000
515 nigel 1.5 AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x2000],
516 nigel 1.1 ac_cv_can_map_lm, [
517     AC_LANG_SAVE
518     AC_LANG_CPLUSPLUS
519     AC_TRY_RUN([
520 nigel 1.6 #include "../Unix/vm_alloc.cpp"
521 nigel 1.1 int main(void) { /* returns 0 if we could map the lowmem globals */
522 nigel 1.11 volatile char * lm = 0;
523 nigel 1.1 if (vm_init() < 0) exit(1);
524 nigel 1.12 if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
525 nigel 1.1 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 nigel 1.17 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 nigel 1.1 dnl Check signal handlers need to be reinstalled
588 nigel 1.5 AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
589 nigel 1.1 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 nigel 1.5 AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
612     [Define if your system requires signals to be reinstalled.])
613 nigel 1.1
614     dnl Check if sigaction handlers need to be reinstalled
615 nigel 1.5 AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
616 nigel 1.1 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 nigel 1.5 AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
646     [Define if your system requires sigactions to be reinstalled.])
647 nigel 1.1
648 nigel 1.12 dnl Check if Mach exceptions supported.
649     AC_CACHE_CHECK([whether your system supports Mach exceptions],
650     ac_cv_have_mach_exceptions, [
651 nigel 1.1 AC_LANG_SAVE
652     AC_LANG_CPLUSPLUS
653     AC_TRY_RUN([
654 nigel 1.12 #define HAVE_MACH_EXCEPTIONS 1
655 nigel 1.1 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
656 nigel 1.13 #include "../Unix/vm_alloc.cpp"
657     #include "../Unix/sigsegv.cpp"
658 nigel 1.12 ], [
659     sigsegv_recovery=mach
660     ac_cv_have_mach_exceptions=yes
661     ],
662     ac_cv_have_mach_exceptions=no,
663 nigel 1.1 dnl When cross-compiling, do not assume anything.
664 nigel 1.12 ac_cv_have_mach_exceptions=no
665 nigel 1.1 )
666     AC_LANG_RESTORE
667     ]
668     )
669 nigel 1.12 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 nigel 1.5
698 nigel 1.1 dnl Otherwise, check for subterfuges.
699 nigel 1.14 if [[ -z "$sigsegv_recovery" ]]; then
700 nigel 1.13 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 nigel 1.14 AC_TRY_RUN([
705 nigel 1.13 #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 nigel 1.1
723 nigel 1.5 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 nigel 1.6 #include "../Unix/vm_alloc.cpp"
732     #include "../Unix/sigsegv.cpp"
733 nigel 1.5 ], 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 nigel 1.1 dnl Can we do Video on SEGV Signals ?
744     CAN_VOSF=no
745 nigel 1.12 if [[ -n "$sigsegv_recovery" ]]; then
746 nigel 1.1 CAN_VOSF=yes
747     fi
748    
749 nigel 1.12 dnl A dummy program that returns always true
750 nigel 1.17 AC_PATH_PROG([BLESS], "true")
751 nigel 1.12
752 nigel 1.1 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 nigel 1.12 if [[ "x$ac_cv_can_map_lm$ac_cv_pagezero_hack" = "xnono" ]]; then
763 nigel 1.1 continue
764     fi
765 nigel 1.12 dnl Requires VOSF screen updates
766 nigel 1.1 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 nigel 1.13 AC_DEFINE(REAL_ADDRESSING, 1, [Emulated memory is memory mapped to actual address.])
774 nigel 1.12 if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then
775     BLESS=Darwin/lowmem
776     LDFLAGS="$LDFLAGS -pagezero_size 0x2000"
777     fi
778 nigel 1.1 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 nigel 1.13 AC_DEFINE(DIRECT_ADDRESSING, 1, [Emulated memory is an offset from actual address.])
787 nigel 1.1 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 nigel 1.5 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 nigel 1.1 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 nigel 1.5 AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
814 nigel 1.1 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 nigel 1.17 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 nigel 1.1
838     dnl Check for GCC 3.0 or higher.
839     HAVE_GCC30=no
840     AC_MSG_CHECKING(for GCC 3.0 or higher)
841 nigel 1.17 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 nigel 1.1
856     dnl Set "-fomit-frame-pointer" on i386 GCC 2.7 or higher.
857 nigel 1.3 dnl Also set "-fno-exceptions" for C++ because exception handling requires
858     dnl the frame pointer.
859 nigel 1.1 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
860     CFLAGS="$CFLAGS -fomit-frame-pointer"
861 nigel 1.3 CXXFLAGS="$CXXFLAGS -fomit-frame-pointer -fno-exceptions"
862 nigel 1.1 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 nigel 1.17 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
870 nigel 1.1 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 nigel 1.17 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 nigel 1.18 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 nigel 1.17 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 nigel 1.1 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 nigel 1.5
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 nigel 1.10 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
937 nigel 1.1 dnl i386 CPU
938 nigel 1.5 DEFINES="$DEFINES -DUNALIGNED_PROFITABLE -DREGPARAM=\"__attribute__((regparm(3)))\""
939 nigel 1.1 if [[ "x$HAVE_GAS" = "xyes" ]]; then
940     ASM_OPTIMIZATIONS=i386
941 nigel 1.5 DEFINES="$DEFINES -DX86_ASSEMBLY -DOPTIMIZED_FLAGS -DSAHF_SETO_PROFITABLE"
942 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"
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 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"
952     CAN_JIT=yes
953     WANT_32BIT_ADDRESSING=yes
954 nigel 1.1 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 nigel 1.5 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 nigel 1.18 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 nigel 1.5 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 nigel 1.1 else
1109 nigel 1.5 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 nigel 1.1 fi
1152 nigel 1.5 ])
1153 nigel 1.1
1154 nigel 1.5 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 nigel 1.13 AC_DEFINE(FPU_IEEE, 1, [Floating Point Core emulation method is IEEE.])
1166 nigel 1.5 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 nigel 1.13 AC_DEFINE(FPU_UAE, 1, [Floating Point Core emulation is standard UAE.])
1192 nigel 1.5 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 nigel 1.1 fi
1203    
1204     dnl Check for certain math functions
1205     AC_CHECK_FUNCS(atanh)
1206 nigel 1.5 AC_CHECK_FUNCS(isnan isinf finite isnormal signbit)
1207 nigel 1.1
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 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"
1212 nigel 1.1 fi
1213    
1214     dnl Remove the "-g" option if set for GCC.
1215     if [[ "x$HAVE_GCC27" = "xyes" ]]; then
1216 nigel 1.17 CFLAGS=`echo $CFLAGS | sed -e 's/-g\b//g'`
1217     CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-g\b//g'`
1218 nigel 1.1 fi
1219    
1220 nigel 1.10 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 nigel 1.1 CXXFLAGS="-LANG:std $CXXFLAGS"
1225 nigel 1.10 LDFLAGS="$LDFLAGS -O3 -OPT:Olimit=0 -IPA"
1226 nigel 1.1 fi
1227    
1228 nigel 1.14 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 nigel 1.15 if test -d "/Developer/Applications/Xcode.app"; then
1239 nigel 1.14 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 nigel 1.17 AC_DEFINE(HAVE_SLIRP, 1, [Try to compile network emulation library!])
1249     AC_DEFINE(DATADIR, "~", [unix_ether needs this!])
1250    
1251 nigel 1.1 dnl Generate Makefile.
1252     AC_SUBST(DEFINES)
1253     AC_SUBST(SYSSRCS)
1254     AC_SUBST(CPUINCLUDES)
1255     AC_SUBST(CPUSRCS)
1256 nigel 1.12 AC_SUBST(BLESS)
1257 nigel 1.14 AC_SUBST(IDE)
1258     AC_SUBST(PROJECT)
1259     AC_SUBST(IDEARGS)
1260 nigel 1.17 AC_SUBST(SLIRP_SRCS)
1261 nigel 1.18 AC_SUBST(KEYCODES)
1262 nigel 1.11 dnl autoconf on 10.1 doesn't understand these
1263     dnl AC_CONFIG_FILES([Makefile])
1264     dnl AC_OUTPUT
1265 nigel 1.1 AC_OUTPUT(Makefile)
1266    
1267     dnl Print summary.
1268     echo
1269     echo Basilisk II configuration summary:
1270     echo
1271 nigel 1.8 echo Multiple emulator windows .............. : $ENABLE_MULTIPLE
1272 nigel 1.5 echo Enable video on SEGV signals ........... : $WANT_VOSF
1273     echo mon debugger support ................... : $WANT_MON
1274 nigel 1.17 echo Running m68k code natively ............. : $WANT_NATIVE_M68K
1275 nigel 1.5 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 nigel 1.12 echo Bad memory access recovery type ........ : $sigsegv_recovery
1281 nigel 1.15 echo Mac OS X development environment ....... : $IDE
1282 nigel 1.1 echo
1283 nigel 1.2 echo "Configuration done. Now type \"make\" (or \"make ide\")."