ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.62
Committed: 2006-03-14T21:18:44Z (18 years, 6 months ago) by gbeauche
Branch: MAIN
Changes since 1.61: +1 -0 lines
Log Message:
Relocate MacOS X executable to 0x78048000 akin to linker scripts on Linux
arches. This probably already worked in the past but I have just verified
that Basilisk II works with up to 1 GB of Mac RAM in DIRECT_ADDRESSING or
REAL_ADDRESSING mode.

BTW, a quick Speedometer 4 CPU performance test showed a +15% speed increase
in real addressing mode vs. direct addressing. x86 arches don't benefit much
from that mode since they support complex address modes already (beyond plain
load/store).

TODO: check on MacOS X for Intel so that to reduce the test to darwin*:*)

File Contents

# User Rev Content
1 gbeauche 1.1 dnl Process this file with autoconf to produce a configure script.
2     dnl Written in 2002 by Christian Bauer et al.
3    
4 cebix 1.16 AC_INIT([Basilisk II], 1.0, [Christian.Bauer@uni-mainz.de], BasiliskII)
5     AC_CONFIG_SRCDIR(main_unix.cpp)
6 gbeauche 1.1 AC_PREREQ(2.52)
7     AC_CONFIG_HEADER(config.h)
8    
9 gbeauche 1.19 dnl Aliases for PACKAGE and VERSION macros.
10 gbeauche 1.22 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE_NAME", [Define this program name.])
11     AC_DEFINE_UNQUOTED(VERSION, "$PACKAGE_VERSION", [Define this program version.])
12 gbeauche 1.19
13 gbeauche 1.21 dnl Some systems do not put corefiles in the currect directory, avoid saving
14     dnl cores for the configure tests since some are intended to dump core.
15     ulimit -c 0
16    
17 gbeauche 1.5 dnl Video options.
18 gbeauche 1.1 AC_ARG_ENABLE(xf86-dga, [ --enable-xf86-dga use the XFree86 DGA extension [default=yes]], [WANT_XF86_DGA=$enableval], [WANT_XF86_DGA=yes])
19     AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=yes]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=yes])
20     AC_ARG_ENABLE(fbdev-dga, [ --enable-fbdev-dga use direct frame buffer access via /dev/fb [default=yes]], [WANT_FBDEV_DGA=$enableval], [WANT_FBDEV_DGA=yes])
21     AC_ARG_ENABLE(vosf, [ --enable-vosf enable video on SEGV signals [default=yes]], [WANT_VOSF=$enableval], [WANT_VOSF=yes])
22    
23 gbeauche 1.26 dnl SDL options.
24 gbeauche 1.41 AC_ARG_ENABLE(sdl-static, [ --enable-sdl-static use SDL static libraries for linking [default=no]], [WANT_SDL_STATIC=$enableval], [WANT_SDL_STATIC=no])
25 gbeauche 1.26 AC_ARG_ENABLE(sdl-video, [ --enable-sdl-video use SDL for video graphics [default=no]], [WANT_SDL_VIDEO=$enableval], [WANT_SDL_VIDEO=no])
26 gbeauche 1.31 AC_ARG_ENABLE(sdl-audio, [ --enable-sdl-audio use SDL for audio [default=no]], [WANT_SDL_AUDIO=$enableval], [WANT_SDL_AUDIO=no])
27 gbeauche 1.26
28 gbeauche 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 gbeauche 1.1 dnl FPU emulation core.
33     AC_ARG_ENABLE(fpe,
34     [ --enable-fpe=FPE specify which fpu emulator to use [default=auto]],
35     [ case "$enableval" in
36     dnl default is always ieee, if architecture has this fp format
37     auto) FPE_CORE_TEST_ORDER="ieee uae";;
38     ieee) FPE_CORE_TEST_ORDER="ieee";;
39     uae) FPE_CORE_TEST_ORDER="uae";;
40     x86) FPE_CORE_TEST_ORDER="x86";;
41     *) AC_MSG_ERROR([--enable-fpe takes only one of the following values: auto, x86, ieee, uae]);;
42     esac
43     ],
44     [ FPE_CORE_TEST_ORDER="ieee uae"
45     ])
46    
47     dnl Addressing modes.
48     AC_ARG_ENABLE(addressing,
49     [ --enable-addressing=AM specify the addressing mode to use [default=fastest]],
50     [ case "$enableval" in
51     real) ADDRESSING_TEST_ORDER="real";;
52     direct) ADDRESSING_TEST_ORDER="direct";;
53     banks) ADDRESSING_TEST_ORDER="banks";;
54     fastest)ADDRESSING_TEST_ORDER="direct banks";;
55     *) AC_MSG_ERROR([--enable-addressing takes only one of the following values: fastest, real, direct, banks]);;
56     esac
57     ],
58     [ ADDRESSING_TEST_ORDER="direct banks"
59     ])
60    
61     dnl External packages.
62     AC_ARG_WITH(esd, [ --with-esd support ESD for sound under Linux/FreeBSD [default=yes]], [WANT_ESD=$withval], [WANT_ESD=yes])
63 gbeauche 1.49 AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]],
64     [case "$withval" in
65     gtk1) WANT_GTK="gtk";;
66     gtk|gtk2) WANT_GTK="$withval";;
67     yes) WANT_GTK="gtk2 gtk";;
68     *) WANT_GTK="no";;
69     esac],
70     [WANT_GTK="gtk2 gtk"])
71 gbeauche 1.1 AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes])
72    
73     dnl Canonical system information.
74     AC_CANONICAL_HOST
75     AC_CANONICAL_TARGET
76    
77     dnl Target OS type (target is host if not cross-compiling).
78     case "$target_os" in
79     linux*) OS_TYPE=linux;;
80     netbsd*) OS_TYPE=netbsd;;
81     freebsd*) OS_TYPE=freebsd;;
82     solaris*) OS_TYPE=solaris;;
83     darwin*) OS_TYPE=darwin;;
84     *) OS_TYPE=`echo $target_os | sed -e 's/-/_/g' | sed -e 's/\./_/g'`;;
85     esac
86     DEFINES="$DEFINES -DOS_$OS_TYPE"
87    
88     dnl Target CPU type.
89     HAVE_I386=no
90     HAVE_M68K=no
91     HAVE_SPARC=no
92     HAVE_POWERPC=no
93 gbeauche 1.13 HAVE_X86_64=no
94 gbeauche 1.1 case "$target_cpu" in
95 gbeauche 1.12 i386* | i486* | i586* | i686* | i786* ) HAVE_I386=yes;;
96     m68k* ) HAVE_M68K=yes;;
97     sparc* ) HAVE_SPARC=yes;;
98     powerpc* ) HAVE_POWERPC=yes;;
99 gbeauche 1.13 x86_64* ) HAVE_X86_64=yes;;
100 gbeauche 1.1 esac
101    
102     dnl Checks for programs.
103     AC_PROG_CC
104     AC_PROG_CC_C_O
105     AC_PROG_CPP
106     AC_PROG_CXX
107     AC_PROG_MAKE_SET
108     AC_PROG_INSTALL
109 gbeauche 1.36 AC_PROG_EGREP
110 gbeauche 1.1
111     dnl We use mon if possible.
112     MONSRCS=
113     if [[ "x$WANT_MON" = "xyes" ]]; then
114     AC_MSG_CHECKING(for mon)
115     mon_srcdir=../../../mon/src
116     if grep mon_init $mon_srcdir/mon.h >/dev/null 2>/dev/null; then
117     AC_MSG_RESULT(yes)
118     AC_DEFINE(ENABLE_MON, 1, [Define if using "mon".])
119     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"
120     CXXFLAGS="$CXXFLAGS -I$mon_srcdir -I$mon_srcdir/disass"
121     AC_CHECK_LIB(ncurses, tgetent, ,
122     AC_CHECK_LIB(termcap, tgetent, ,
123     AC_CHECK_LIB(termlib, tgetent, ,
124     AC_CHECK_LIB(terminfo, tgetent, ,
125     AC_CHECK_LIB(Hcurses, tgetent, ,
126     AC_CHECK_LIB(curses, tgetent))))))
127     AC_CHECK_LIB(readline, readline)
128     else
129     AC_MSG_RESULT(no)
130     AC_MSG_WARN([Could not find mon, ignoring --with-mon.])
131     WANT_MON=no
132     fi
133     fi
134    
135     dnl Checks for libraries.
136     AC_CHECK_LIB(posix4, sem_init)
137     AC_CHECK_LIB(rt, timer_create)
138 gbeauche 1.34 AC_CHECK_LIB(rt, shm_open)
139 gbeauche 1.56 AC_CHECK_LIB(m, cos)
140 gbeauche 1.1
141 gbeauche 1.26 dnl Do we need SDL?
142     WANT_SDL=no
143     if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
144     WANT_SDL=yes
145     WANT_XF86_DGA=no
146     WANT_XF86_VIDMODE=no
147     WANT_FBDEV_DGA=no
148 gbeauche 1.31 SDL_SUPPORT="$SDL_SUPPORT video"
149     fi
150     if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
151     WANT_SDL=yes
152     SDL_SUPPORT="$SDL_SUPPORT audio"
153 gbeauche 1.26 fi
154     if [[ "x$WANT_SDL" = "xyes" ]]; then
155     AC_PATH_PROG(sdl_config, "sdl-config")
156     if [[ -n "$sdl_config" ]]; then
157 gbeauche 1.36 case $target_os in
158     # Special treatment for Cygwin so that we can still use the POSIX layer
159     *cygwin*)
160     sdl_cflags="-I`$sdl_config --prefix`/include/SDL"
161     sdl_libs="-L`$sdl_config --exec-prefix`/lib -lSDL"
162     ;;
163     *)
164     sdl_cflags=`$sdl_config --cflags`
165 gbeauche 1.41 if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then
166     sdl_libs=`$sdl_config --static-libs`
167     else
168     sdl_libs=`$sdl_config --libs`
169     fi
170 gbeauche 1.36 ;;
171     esac
172 gbeauche 1.26 CFLAGS="$CFLAGS $sdl_cflags"
173     CXXFLAGS="$CXXFLAGS $sdl_cflags"
174     LIBS="$LIBS $sdl_libs"
175     else
176     WANT_SDL=no
177     fi
178 gbeauche 1.31 SDL_SUPPORT=`echo "$SDL_SUPPORT" | sed -e "s/^ //"`
179     else
180     SDL_SUPPORT="none"
181 gbeauche 1.26 fi
182    
183     dnl We need X11, if not using SDL.
184     if [[ "x$WANT_SDL" = "xno" ]]; then
185     AC_PATH_XTRA
186     if [[ "x$no_x" = "xyes" ]]; then
187     AC_MSG_ERROR([You need X11 to run Basilisk II.])
188     fi
189     CFLAGS="$CFLAGS $X_CFLAGS"
190     CXXFLAGS="$CXXFLAGS $X_CFLAGS"
191     LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS"
192     fi
193 gbeauche 1.1
194     dnl We want pthreads. Try libpthread first, then libc_r (FreeBSD), then PTL.
195     HAVE_PTHREADS=yes
196     AC_CHECK_LIB(pthread, pthread_create, , [
197     AC_CHECK_LIB(c_r, pthread_create, , [
198     AC_CHECK_LIB(PTL, pthread_create, , [
199     HAVE_PTHREADS=no
200     ])
201     ])
202     ])
203     if [[ "x$HAVE_PTHREADS" = "xyes" ]]; then
204     AC_DEFINE(HAVE_PTHREADS, 1, [Define if pthreads are available.])
205     fi
206 gbeauche 1.50 AC_CHECK_FUNCS(pthread_cond_init)
207 gbeauche 1.46 AC_CHECK_FUNCS(pthread_cancel pthread_testcancel)
208 gbeauche 1.1 AC_CHECK_FUNCS(pthread_mutexattr_setprotocol)
209     AC_CHECK_FUNCS(pthread_mutexattr_settype)
210 gbeauche 1.3 AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
211 gbeauche 1.1
212     dnl If POSIX.4 semaphores are not available, we emulate them with pthread mutexes.
213     SEMSRC=
214     AC_CHECK_FUNCS(sem_init, , [
215     if test "x$HAVE_PTHREADS" = "xyes"; then
216     SEMSRC=posix_sem.cpp
217     fi
218     ])
219    
220     dnl We use DGA (XFree86 or fbdev) if possible.
221     if [[ "x$WANT_XF86_DGA" = "xyes" ]]; then
222     AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension, [
223     AC_DEFINE(ENABLE_XF86_DGA, 1, [Define if using XFree86 DGA extension.])
224     LIBS="$LIBS -lXxf86dga"
225     if [[ "x$WANT_FBDEV_DGA" = "xyes" ]]; then
226     AC_MSG_WARN([Cannot have both --enable-xf86-dga and --enable-fbdev-dga, ignoring --enable-fbdev-dga.])
227     WANT_FBDEV_DGA=no
228     fi
229     ], [
230     AC_MSG_WARN([Could not find XFree86 DGA extension, ignoring --enable-xf86-dga.])
231     WANT_XF86_DGA=no
232     ])
233     fi
234     if [[ "x$WANT_FBDEV_DGA" = "xyes" ]]; then
235     AC_DEFINE(ENABLE_FBDEV_DGA, 1, [Define if using DGA with framebuffer device.])
236     fi
237    
238     dnl We use XFree86 VidMode if possible.
239     if [[ "x$WANT_XF86_VIDMODE" = "xyes" ]]; then
240     AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension, [
241     AC_DEFINE(ENABLE_XF86_VIDMODE, 1, [Define if using XFree86 DGA extension.])
242     LIBS="$LIBS -lXxf86vm"
243     ], [
244     AC_MSG_WARN([Could not find XFree86 VidMode extension, ignoring --enable-xf86-vidmode.])
245     WANT_XF86_VIDMODE=no
246     ])
247     fi
248    
249     dnl We use GTK+ if possible.
250     UISRCS=../dummy/prefs_editor_dummy.cpp
251 gbeauche 1.49 case "x$WANT_GTK" in
252     xgtk2*)
253     AM_PATH_GTK_2_0(1.3.15, [
254     AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
255     CFLAGS="$CFLAGS $GTK_CFLAGS"
256     CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
257     LIBS="$LIBS $GTK_LIBS"
258     UISRCS=prefs_editor_gtk.cpp
259     WANT_GTK=gtk2
260     ], [
261     case "x${WANT_GTK}x" in
262     *gtkx)
263     AC_MSG_WARN([Could not find GTK+ 2.0, trying with GTK+ 1.2.])
264     WANT_GTK=gtk
265     ;;
266     *)
267     AC_MSG_WARN([Could not find GTK+, disabling user interface.])
268     WANT_GTK=no
269     ;;
270     esac
271     ])
272     ;;
273     esac
274     if [[ "x$WANT_GTK" = "xgtk" ]]; then
275 gbeauche 1.1 AM_PATH_GTK(1.2.0, [
276     AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
277     CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
278     LIBS="$LIBS $GTK_LIBS"
279     UISRCS=prefs_editor_gtk.cpp
280 gbeauche 1.18 dnl somehow, <gnome-i18n.h> would redefine gettext() to nothing if
281     dnl ENABLE_NLS is not set, thusly conflicting with C++ <string> which
282     dnl includes <libintl.h>
283     AM_GNU_GETTEXT
284 gbeauche 1.1 B2_PATH_GNOMEUI([
285     AC_DEFINE(HAVE_GNOMEUI, 1, [Define if libgnomeui is available.])
286     CXXFLAGS="$CXXFLAGS $GNOMEUI_CFLAGS"
287     LIBS="$LIBS $GNOMEUI_LIBS"
288     ], [])
289     ], [
290     AC_MSG_WARN([Could not find GTK+, disabling user interface.])
291     WANT_GTK=no
292     ])
293     fi
294    
295     dnl We use ESD if possible.
296     if [[ "x$WANT_ESD" = "xyes" ]]; then
297     AM_PATH_ESD(0.2.8, [
298     AC_DEFINE(ENABLE_ESD, 1, [Define is using ESD.])
299     CFLAGS="$CFLAGS $ESD_CFLAGS"
300     CXXFLAGS="$CXXFLAGS $ESD_CFLAGS"
301     LIBS="$LIBS $ESD_LIBS"
302     ], [
303     AC_MSG_WARN([Could not find ESD, disabling ESD support.])
304     WANT_ESD=no
305     ])
306     fi
307    
308     dnl We use 64-bit file size support if possible.
309     AC_SYS_LARGEFILE
310    
311     dnl Checks for header files.
312     AC_HEADER_STDC
313 gbeauche 1.52 AC_CHECK_HEADERS(stdlib.h stdint.h)
314     AC_CHECK_HEADERS(unistd.h fcntl.h sys/types.h sys/time.h sys/mman.h mach/mach.h)
315 gbeauche 1.20 AC_CHECK_HEADERS(readline.h history.h readline/readline.h readline/history.h)
316 gbeauche 1.42 AC_CHECK_HEADERS(sys/socket.h sys/ioctl.h sys/filio.h sys/bitypes.h sys/wait.h)
317     AC_CHECK_HEADERS(sys/poll.h sys/select.h)
318 gbeauche 1.39 AC_CHECK_HEADERS(arpa/inet.h)
319 gbeauche 1.35 AC_CHECK_HEADERS(linux/if.h linux/if_tun.h net/if.h net/if_tun.h, [], [], [
320 gbeauche 1.42 #ifdef HAVE_SYS_TYPES_H
321     #include <sys/types.h>
322     #endif
323 gbeauche 1.35 #ifdef HAVE_SYS_SOCKET_H
324     #include <sys/socket.h>
325     #endif
326     ])
327 gbeauche 1.30 AC_CHECK_HEADERS(AvailabilityMacros.h)
328 gbeauche 1.48 AC_CHECK_HEADERS(IOKit/storage/IOBlockStorageDevice.h)
329 gbeauche 1.1
330     dnl Checks for typedefs, structures, and compiler characteristics.
331     AC_C_BIGENDIAN
332     AC_C_CONST
333     AC_C_INLINE
334     AC_CHECK_SIZEOF(short, 2)
335     AC_CHECK_SIZEOF(int, 4)
336     AC_CHECK_SIZEOF(long, 4)
337     AC_CHECK_SIZEOF(long long, 8)
338     AC_CHECK_SIZEOF(float, 4)
339     AC_CHECK_SIZEOF(double, 8)
340     AC_CHECK_SIZEOF(long double, 12)
341     AC_CHECK_SIZEOF(void *, 4)
342     AC_TYPE_OFF_T
343 gbeauche 1.24 AC_CHECK_TYPES(loff_t)
344     AC_CHECK_TYPES(caddr_t)
345 gbeauche 1.1 AC_TYPE_SIZE_T
346     AC_TYPE_SIGNAL
347     AC_HEADER_TIME
348     AC_STRUCT_TM
349    
350     dnl Check whether sys/socket.h defines type socklen_t.
351     dnl (extracted from ac-archive/Miscellaneous)
352     AC_CACHE_CHECK([for socklen_t],
353     ac_cv_type_socklen_t, [
354     AC_TRY_COMPILE([
355     #include <sys/types.h>
356     #include <sys/socket.h>
357     ], [socklen_t len = 42; return 0;],
358     ac_cv_type_socklen_t=yes, ac_cv_type_socklen_t=no,
359     dnl When cross-compiling, do not assume anything.
360     ac_cv_type_socklen_t="guessing no"
361     )
362     ])
363     if [[ "x$ac_cv_type_socklen_t" != "xyes" ]]; then
364     AC_DEFINE(socklen_t, int, [Define to 'int' if <sys/types.h> doesn't define.])
365     fi
366    
367     dnl Checks for library functions.
368 gbeauche 1.39 AC_CHECK_FUNCS(strdup strerror cfmakeraw)
369 gbeauche 1.1 AC_CHECK_FUNCS(clock_gettime timer_create)
370     AC_CHECK_FUNCS(sigaction signal)
371     AC_CHECK_FUNCS(mmap mprotect munmap)
372     AC_CHECK_FUNCS(vm_allocate vm_deallocate vm_protect)
373 gbeauche 1.42 AC_CHECK_FUNCS(poll inet_aton)
374 gbeauche 1.1
375     dnl Darwin seems to define mach_task_self() instead of task_self().
376     AC_CHECK_FUNCS(mach_task_self task_self)
377    
378     dnl Check for headers and functions related to pty support (sshpty.c)
379     dnl From openssh-3.2.2p1 configure.ac
380    
381     AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h)
382     AC_CHECK_FUNCS(_getpty vhangup strlcpy)
383    
384     case "$host" in
385     *-*-hpux10.26)
386     disable_ptmx_check=yes
387     ;;
388     *-*-linux*)
389     no_dev_ptmx=1
390     ;;
391     mips-sony-bsd|mips-sony-newsos4)
392     AC_DEFINE(HAVE_NEWS4, 1, [Define if you are on NEWS-OS (additions from openssh-3.2.2p1, for sshpty.c).])
393     ;;
394     *-*-sco3.2v4*)
395     no_dev_ptmx=1
396     ;;
397     *-*-sco3.2v5*)
398     no_dev_ptmx=1
399     ;;
400 gbeauche 1.36 *-*-cygwin*)
401     no_dev_ptmx=1
402     ;;
403 gbeauche 1.1 esac
404    
405     if test -z "$no_dev_ptmx" ; then
406     if test "x$disable_ptmx_check" != "xyes" ; then
407     AC_CHECK_FILE([/dev/ptmx],
408     [
409     AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1, [Define if you have /dev/ptmx.])
410     have_dev_ptmx=1
411     ]
412     )
413     fi
414     fi
415     AC_CHECK_FILE([/dev/ptc],
416     [
417     AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1, [Define if you have /dev/ptc.])
418     have_dev_ptc=1
419     ]
420     )
421    
422     dnl (end of code from openssh-3.2.2p1 configure.ac)
423    
424    
425 gbeauche 1.58 dnl Check for systems where POSIX-style non-blocking I/O (O_NONBLOCK)
426     dnl doesn't work or is unimplemented. On these systems (mostly older
427     dnl ones), use the old BSD-style FIONBIO approach instead. [tcl.m4]
428     AC_CACHE_CHECK([FIONBIO vs. O_NONBLOCK for non-blocking I/O],
429     ac_cv_nonblocking_io, [
430     case "$host" in
431     *-*-osf*)
432     ac_cv_nonblocking_io=FIONBIO
433     ;;
434     *-*-sunos4*)
435     ac_cv_nonblocking_io=FIONBIO
436     ;;
437     *-*-ultrix*)
438     ac_cv_nonblocking_io=FIONBIO
439     ;;
440     *)
441     ac_cv_nonblocking_io=O_NONBLOCK
442     ;;
443     esac
444     ])
445     if [[ "$ac_cv_nonblocking_io" = "FIONBIO" ]]; then
446     AC_DEFINE(USE_FIONBIO, 1, [Define if BSD-style non-blocking I/O is to be used])
447     fi
448    
449 gbeauche 1.59 dnl Check whether compiler supports byte bit-fields
450     AC_CACHE_CHECK([whether compiler supports byte bit-fields],
451     ac_cv_have_byte_bitfields, [
452     AC_LANG_SAVE
453     AC_LANG_CPLUSPLUS
454     AC_TRY_RUN([
455     struct A {
456     unsigned char b1:4;
457     unsigned char b2:4;
458     unsigned char c;
459     unsigned short s;
460     unsigned char a[4];
461     };
462    
463     int main(void) {
464     A a;
465     return ! (sizeof(A) == 8 && &a.c == ((unsigned char *)&a + 1));
466     }],
467     [ac_cv_have_byte_bitfields=yes],
468     [ac_cv_have_byte_bitfields=no],
469     dnl When cross-compiling, assume only GCC supports this
470     [if [[ "$GCC" = "yes" ]]; then
471     ac_cv_have_byte_bitfields="guessing yes"
472     else
473     ac_cv_have_byte_bitfields="guessing no"
474     fi]
475     )
476     AC_LANG_RESTORE
477     ])
478 gbeauche 1.58
479 gbeauche 1.30 dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES)
480 cebix 1.51 AC_DEFUN([AC_CHECK_FRAMEWORK], [
481 gbeauche 1.30 AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl
482     AC_CACHE_CHECK([whether compiler supports framework $1],
483     ac_Framework, [
484     saved_LIBS="$LIBS"
485     LIBS="$LIBS -framework $1"
486     AC_TRY_LINK(
487 gbeauche 1.57 [$2], [],
488 gbeauche 1.30 [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"]
489     )
490     ])
491     AS_IF([test AS_VAR_GET(ac_Framework) = yes],
492     [AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])]
493     )
494     AS_VAR_POPDEF([ac_Framework])dnl
495     ])
496    
497     dnl Check for some MacOS X frameworks
498     AC_CHECK_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>])
499     AC_CHECK_FRAMEWORK(IOKit, [#include <IOKit/IOKitLib.h>])
500 gbeauche 1.48 AC_CHECK_FRAMEWORK(CoreFoundation, [#include <CoreFoundation/CoreFoundation.h>])
501 gbeauche 1.30
502 gbeauche 1.1 dnl Select system-dependant source files.
503     SERIALSRC=serial_unix.cpp
504     ETHERSRC=../dummy/ether_dummy.cpp
505     SCSISRC=../dummy/scsi_dummy.cpp
506     AUDIOSRC=../dummy/audio_dummy.cpp
507 gbeauche 1.41 EXTFSSRC=extfs_unix.cpp
508 gbeauche 1.1 EXTRASYSSRCS=
509     CAN_NATIVE_M68K=no
510     case "$target_os" in
511     linux*)
512     ETHERSRC=ether_unix.cpp
513     AUDIOSRC=audio_oss_esd.cpp
514     SCSISRC=Linux/scsi_linux.cpp
515     ;;
516     freebsd*)
517     ETHERSRC=ether_unix.cpp
518     AUDIOSRC=audio_oss_esd.cpp
519     DEFINES="$DEFINES -DBSD_COMP"
520     CXXFLAGS="$CXXFLAGS -fpermissive"
521     dnl Check for the CAM library
522     AC_CHECK_LIB(cam, cam_open_btl, HAVE_LIBCAM=yes, HAVE_LIBCAM=no)
523     if [[ "x$HAVE_LIBCAM" = "xno" ]]; then
524     AC_MSG_WARN([Cannot find libcam for SCSI management, disabling SCSI support.])
525     else
526     dnl Check for the sys kernel includes
527     AC_CHECK_HEADER(camlib.h)
528     if [[ "x$ac_cv_header_camlib_h" = "xno" ]]; then
529     dnl In this case I should fix this thing including a "patch"
530     dnl to access directly to the functions in the kernel :) --Orlando
531     AC_MSG_WARN([Cannot find includes for CAM library, disabling SCSI support.])
532     else
533     SCSISRC=FreeBSD/scsi_freebsd.cpp
534     LIBS="$LIBS -lcam"
535     DEFINES="$DEFINES -DCAM"
536     fi
537     fi
538     ;;
539     netbsd*)
540     CAN_NATIVE_M68K=yes
541 gbeauche 1.44 ETHERSRC=ether_unix.cpp
542 gbeauche 1.1 ;;
543     solaris*)
544     AUDIOSRC=Solaris/audio_solaris.cpp
545     DEFINES="$DEFINES -DBSD_COMP -D_POSIX_PTHREAD_SEMANTICS"
546     ;;
547     irix*)
548     AUDIOSRC=Irix/audio_irix.cpp
549     EXTRASYSSRCS=Irix/unaligned.c
550     LIBS="$LIBS -laudio"
551     WANT_ESD=no
552    
553 gbeauche 1.14 dnl Check if our compiler supports -IPA (MIPSPro)
554     HAVE_IPA=no
555 gbeauche 1.1 ocflags="$CFLAGS"
556 gbeauche 1.14 CFLAGS=`echo "$CFLAGS -IPA" | sed -e "s/-g//g"`
557     AC_MSG_CHECKING(if "-IPA" works)
558 gbeauche 1.1 dnl Do a test compile of an empty function
559 gbeauche 1.56 AC_TRY_COMPILE([#if defined __GNUC__
560     # error GCC does not support IPA yet
561     #endif],, [AC_MSG_RESULT(yes); HAVE_IPA=yes], AC_MSG_RESULT(no))
562 gbeauche 1.1 CFLAGS="$ocflags"
563 gbeauche 1.30 ;;
564     darwin*)
565 gbeauche 1.45 ETHERSRC=ether_unix.cpp
566 gbeauche 1.48 if [[ "x$ac_cv_framework_IOKit" = "xyes" -a "x$ac_cv_framework_CoreFoundation" = "xyes" ]]; then
567 gbeauche 1.30 EXTRASYSSRCS="../MacOSX/sys_darwin.cpp"
568     fi
569 gbeauche 1.41 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
570     EXTFSSRC=../MacOSX/extfs_macosx.mm
571     fi
572 gbeauche 1.1 ;;
573 gbeauche 1.36 cygwin*)
574     SERIALSRC="../dummy/serial_dummy.cpp"
575 gbeauche 1.37 EXTRASYSSRCS="../Windows/BasiliskII.rc"
576 gbeauche 1.36 ;;
577 gbeauche 1.1 esac
578 gbeauche 1.43
579     dnl Is the slirp library supported?
580 gbeauche 1.59 case "$ac_cv_have_byte_bitfields" in
581     yes|"guessing yes")
582 gbeauche 1.60 CAN_SLIRP=yes
583 gbeauche 1.59 ETHERSRC=ether_unix.cpp
584     ;;
585     esac
586 gbeauche 1.60 if [[ -n "$CAN_SLIRP" ]]; then
587 gbeauche 1.43 AC_DEFINE(HAVE_SLIRP, 1, [Define if slirp library is supported])
588     SLIRP_SRCS="\
589     ../slirp/bootp.c ../slirp/ip_output.c ../slirp/tcp_input.c \
590     ../slirp/cksum.c ../slirp/mbuf.c ../slirp/tcp_output.c \
591     ../slirp/debug.c ../slirp/misc.c ../slirp/tcp_subr.c \
592     ../slirp/if.c ../slirp/sbuf.c ../slirp/tcp_timer.c \
593     ../slirp/ip_icmp.c ../slirp/slirp.c ../slirp/tftp.c \
594     ../slirp/ip_input.c ../slirp/socket.c ../slirp/udp.c"
595     fi
596     AC_SUBST(SLIRP_SRCS)
597    
598 gbeauche 1.26 dnl SDL overrides
599     if [[ "x$WANT_SDL" = "xyes" ]]; then
600     AC_DEFINE(USE_SDL, 1, [Define to enble SDL support])
601     fi
602     if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
603 gbeauche 1.31 AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support])
604 gbeauche 1.30 VIDEOSRCS="../SDL/video_sdl.cpp"
605 gbeauche 1.29 KEYCODES="../SDL/keycodes"
606 gbeauche 1.30 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
607     EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/clip_macosx.cpp"
608     else
609 gbeauche 1.38 case "$target_os" in
610     cygwin*)
611     EXTRASYSSRCS="$EXTRASYSSRCS ../Windows/clip_windows.cpp"
612     ;;
613     *)
614     EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp"
615     ;;
616     esac
617 gbeauche 1.30 fi
618 gbeauche 1.26 else
619 gbeauche 1.30 VIDEOSRCS="video_x.cpp"
620 gbeauche 1.29 KEYCODES="keycodes"
621 gbeauche 1.30 EXTRASYSSRCS="$EXTRASYSSRCS clip_unix.cpp"
622 gbeauche 1.26 fi
623 gbeauche 1.31 if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
624     AC_DEFINE(USE_SDL_AUDIO, 1, [Define to enable SDL audio support])
625     AUDIOSRC="../SDL/audio_sdl.cpp"
626     fi
627 gbeauche 1.1
628     dnl Use 68k CPU natively?
629     WANT_NATIVE_M68K=no
630     if [[ "x$HAVE_M68K" = "xyes" -a "x$CAN_NATIVE_M68K" = "xyes" ]]; then
631     AC_DEFINE(ENABLE_NATIVE_M68K, 1, [Define if using native 68k mode.])
632     WANT_NATIVE_M68K=yes
633     fi
634    
635     if [[ "x$HAVE_PTHREADS" = "xno" ]]; then
636     dnl Serial, ethernet and audio support needs pthreads
637     AC_MSG_WARN([You don't have pthreads, disabling serial, ethernet and audio support.])
638     SERIALSRC=../dummy/serial_dummy.cpp
639     ETHERSRC=../dummy/ether_dummy.cpp
640     AUDIOSRC=../dummy/audio_dummy.cpp
641     fi
642 gbeauche 1.41 SYSSRCS="$VIDEOSRCS $EXTFSSRC $SERIALSRC $ETHERSRC $SCSISRC $AUDIOSRC $SEMSRC $UISRCS $MONSRCS $EXTRASYSSRCS"
643 gbeauche 1.1
644     dnl Define a macro that translates a yesno-variable into a C macro definition
645     dnl to be put into the config.h file
646     dnl $1 -- the macro to define
647     dnl $2 -- the value to translate
648     dnl $3 -- template name
649 cebix 1.51 AC_DEFUN([AC_TRANSLATE_DEFINE], [
650 gbeauche 1.1 if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
651     AC_DEFINE($1, 1, $3)
652     fi
653     ])
654    
655 gbeauche 1.25 dnl Check that the host supports TUN/TAP devices
656     AC_CACHE_CHECK([whether TUN/TAP is supported],
657     ac_cv_tun_tap_support, [
658     AC_TRY_COMPILE([
659     #if defined(HAVE_LINUX_IF_H) && defined(HAVE_LINUX_IF_TUN_H)
660     #include <linux/if.h>
661     #include <linux/if_tun.h>
662     #endif
663     #if defined(HAVE_NET_IF_H) && defined(HAVE_NET_IF_TUN_H)
664     #include <net/if.h>
665     #include <net/if_tun.h>
666     #endif
667     ], [
668     struct ifreq ifr;
669     memset(&ifr, 0, sizeof(ifr));
670     ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
671     ],
672     ac_cv_tun_tap_support=yes, ac_cv_tun_tap_support=no
673     )
674     ])
675     AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support",
676     [Define if your system supports TUN/TAP devices.])
677    
678 gbeauche 1.1 dnl Various checks if the system supports vm_allocate() and the like functions.
679     have_mach_vm=no
680     if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \
681     "x$ac_cv_func_vm_protect" = "xyes" ]]; then
682     have_mach_vm=yes
683     fi
684     AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
685     [Define if your system has a working vm_allocate()-based memory allocator.])
686    
687     dnl Check that vm_allocate(), vm_protect() work
688     if [[ "x$have_mach_vm" = "xyes" ]]; then
689    
690     AC_CACHE_CHECK([whether vm_protect works],
691     ac_cv_vm_protect_works, [
692     AC_LANG_SAVE
693     AC_LANG_CPLUSPLUS
694     ac_cv_vm_protect_works=yes
695     dnl First the tests that should segfault
696     for test_def in NONE_READ NONE_WRITE READ_WRITE; do
697     AC_TRY_RUN([
698     #define CONFIGURE_TEST_VM_MAP
699     #define TEST_VM_PROT_$test_def
700     #include "vm_alloc.cpp"
701     ], ac_cv_vm_protect_works=no, rm -f core,
702     dnl When cross-compiling, do not assume anything
703     ac_cv_vm_protect_works="guessing no"
704     )
705     done
706     AC_TRY_RUN([
707     #define CONFIGURE_TEST_VM_MAP
708     #define TEST_VM_PROT_RDWR_WRITE
709     #include "vm_alloc.cpp"
710     ], , ac_cv_vm_protect_works=no,
711     dnl When cross-compiling, do not assume anything
712     ac_cv_vm_protect_works="guessing no"
713     )
714     AC_LANG_RESTORE
715     ]
716     )
717    
718     dnl Remove support for vm_allocate() if vm_protect() does not work
719     if [[ "x$have_mach_vm" = "xyes" ]]; then
720     case $ac_cv_vm_protect_works in
721     *yes) have_mach_vm=yes;;
722     *no) have_mach_vm=no;;
723     esac
724     fi
725     AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
726     [Define if your system has a working vm_allocate()-based memory allocator.])
727    
728     fi dnl HAVE_MACH_VM
729    
730     dnl Various checks if the system supports mmap() and the like functions.
731     dnl ... and Mach memory allocators are not supported
732     have_mmap_vm=no
733     if [[ "x$ac_cv_func_mmap" = "xyes" -a "x$ac_cv_func_munmap" = "xyes" -a \
734     "x$ac_cv_func_mprotect" = "xyes" ]]; then
735     if [[ "x$have_mach_vm" = "xno" ]]; then
736     have_mmap_vm=yes
737     fi
738     fi
739     AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
740     [Define if your system has a working mmap()-based memory allocator.])
741    
742     dnl Check that mmap() and associated functions work.
743     if [[ "x$have_mmap_vm" = "xyes" ]]; then
744    
745     dnl Check if we have a working anonymous mmap()
746     AC_CACHE_CHECK([whether mmap supports MAP_ANON],
747     ac_cv_mmap_anon, [
748     AC_LANG_SAVE
749     AC_LANG_CPLUSPLUS
750     AC_TRY_RUN([
751     #define HAVE_MMAP_ANON
752     #define CONFIGURE_TEST_VM_MAP
753     #define TEST_VM_MMAP_ANON
754     #include "vm_alloc.cpp"
755     ], ac_cv_mmap_anon=yes, ac_cv_mmap_anon=no,
756     dnl When cross-compiling, do not assume anything.
757     ac_cv_mmap_anon="guessing no"
758     )
759     AC_LANG_RESTORE
760     ]
761     )
762     AC_TRANSLATE_DEFINE(HAVE_MMAP_ANON, "$ac_cv_mmap_anon",
763     [Define if <sys/mman.h> defines MAP_ANON and mmap()'ing with MAP_ANON works.])
764    
765     AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
766     ac_cv_mmap_anonymous, [
767     AC_LANG_SAVE
768     AC_LANG_CPLUSPLUS
769     AC_TRY_RUN([
770     #define HAVE_MMAP_ANONYMOUS
771     #define CONFIGURE_TEST_VM_MAP
772     #define TEST_VM_MMAP_ANON
773     #include "vm_alloc.cpp"
774     ], ac_cv_mmap_anonymous=yes, ac_cv_mmap_anonymous=no,
775     dnl When cross-compiling, do not assume anything.
776     ac_cv_mmap_anonymous="guessing no"
777     )
778     AC_LANG_RESTORE
779     ]
780     )
781     AC_TRANSLATE_DEFINE(HAVE_MMAP_ANONYMOUS, "$ac_cv_mmap_anonymous",
782     [Define if <sys/mman.h> defines MAP_ANONYMOUS and mmap()'ing with MAP_ANONYMOUS works.])
783    
784     AC_CACHE_CHECK([whether mprotect works],
785     ac_cv_mprotect_works, [
786     AC_LANG_SAVE
787     AC_LANG_CPLUSPLUS
788     ac_cv_mprotect_works=yes
789     dnl First the tests that should segfault
790     for test_def in NONE_READ NONE_WRITE READ_WRITE; do
791     AC_TRY_RUN([
792     #define CONFIGURE_TEST_VM_MAP
793     #define TEST_VM_PROT_$test_def
794     #include "vm_alloc.cpp"
795     ], ac_cv_mprotect_works=no, rm -f core,
796     dnl When cross-compiling, do not assume anything
797     ac_cv_mprotect_works="guessing no"
798     )
799     done
800     AC_TRY_RUN([
801     #define CONFIGURE_TEST_VM_MAP
802     #define TEST_VM_PROT_RDWR_WRITE
803     #include "vm_alloc.cpp"
804     ], , ac_cv_mprotect_works=no,
805     dnl When cross-compiling, do not assume anything
806     ac_cv_mprotect_works="guessing no"
807     )
808     AC_LANG_RESTORE
809     ]
810     )
811    
812     dnl Remove support for mmap() if mprotect() does not work
813     if [[ "x$have_mmap_vm" = "xyes" ]]; then
814     case $ac_cv_mprotect_works in
815     *yes) have_mmap_vm=yes;;
816     *no) have_mmap_vm=no;;
817     esac
818     fi
819     AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
820     [Define if your system has a working mmap()-based memory allocator.])
821    
822     fi dnl HAVE_MMAP_VM
823    
824 gbeauche 1.23 dnl Check if we can modify the __PAGEZERO segment for use as Low Memory
825     AC_CACHE_CHECK([whether __PAGEZERO can be Low Memory area 0x0000-0x2000],
826     ac_cv_pagezero_hack, [
827     ac_cv_pagezero_hack=no
828     if AC_TRY_COMMAND([Darwin/testlmem.sh 0x2000]); then
829     ac_cv_pagezero_hack=yes
830     dnl might as well skip the test for mmap-able low memory
831     ac_cv_can_map_lm=no
832     fi
833     ])
834     AC_TRANSLATE_DEFINE(PAGEZERO_HACK, "$ac_cv_pagezero_hack",
835     [Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this system.])
836    
837 gbeauche 1.1 dnl Check if we can mmap 0x2000 bytes from 0x0000
838     AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x2000],
839     ac_cv_can_map_lm, [
840     AC_LANG_SAVE
841     AC_LANG_CPLUSPLUS
842     AC_TRY_RUN([
843     #include "vm_alloc.cpp"
844     int main(void) { /* returns 0 if we could map the lowmem globals */
845 gbeauche 1.15 volatile char * lm = 0;
846 gbeauche 1.1 if (vm_init() < 0) exit(1);
847 gbeauche 1.15 if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
848 gbeauche 1.1 lm[0] = 'z';
849     if (vm_release((char *)lm, 0x2000) < 0) exit(1);
850     vm_exit(); exit(0);
851     }
852     ], ac_cv_can_map_lm=yes, ac_cv_can_map_lm=no,
853     dnl When cross-compiling, do not assume anything.
854     ac_cv_can_map_lm="guessing no"
855     )
856     AC_LANG_RESTORE
857     ]
858     )
859    
860 gbeauche 1.34 dnl Check if we have POSIX shared memory support
861     AC_CACHE_CHECK([whether POSIX shared memory is working],
862     ac_cv_have_posix_shm, [
863     AC_LANG_SAVE
864     AC_LANG_CPLUSPLUS
865     AC_TRY_RUN([
866     #define HAVE_POSIX_SHM
867     #include "vm_alloc.cpp"
868     int main(void) { /* returns 0 if we have working POSIX shm */
869     if (vm_init() < 0) exit(2);
870     char *m1 = (char *)vm_acquire(32768, VM_MAP_DEFAULT | VM_MAP_33BIT);
871     if (m1 == VM_MAP_FAILED) exit(3);
872     vm_exit(); exit(0);
873     }
874     ], ac_cv_have_posix_shm=yes, ac_cv_have_posix_shm=no,
875     dnl When cross-compiling, do not assume anything.
876     ac_cv_have_posix_shm="guessing no"
877     )
878     AC_LANG_RESTORE
879     ]
880     )
881     AC_TRANSLATE_DEFINE(HAVE_POSIX_SHM, "$ac_cv_have_posix_shm",
882     [Define if your system supports POSIX shared memory.])
883    
884     dnl Check if we have working 33-bit memory addressing
885     AC_CACHE_CHECK([whether 33-bit memory addressing is working],
886     ac_cv_have_33bit_addressing, [
887     AC_LANG_SAVE
888     AC_LANG_CPLUSPLUS
889     AC_TRY_RUN([
890     #define USE_33BIT_ADDRESSING 1
891     #include "vm_alloc.cpp"
892     int main(void) { /* returns 0 if we have working 33-bit addressing */
893     if (sizeof(void *) < 8) exit(1);
894     if (vm_init() < 0) exit(2);
895     char *m1 = (char *)vm_acquire(32768, VM_MAP_DEFAULT | VM_MAP_33BIT);
896     if (m1 == VM_MAP_FAILED) exit(3);
897     char *m2 = m1 + (1L << 32);
898     m1[0] = 0x12; if (m2[0] != 0x12) exit(4);
899     m2[0] = 0x34; if (m1[0] != 0x34) exit(5);
900     vm_exit(); exit(0);
901     }
902     ], ac_cv_have_33bit_addressing=yes, ac_cv_have_33bit_addressing=no,
903     dnl When cross-compiling, do not assume anything.
904     ac_cv_have_33bit_addressing="guessing no"
905     )
906     AC_LANG_RESTORE
907     ]
908     )
909    
910 gbeauche 1.1 dnl Check signal handlers need to be reinstalled
911     AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
912     ac_cv_signal_need_reinstall, [
913     AC_LANG_SAVE
914     AC_LANG_CPLUSPLUS
915     AC_TRY_RUN([
916     #include <stdlib.h>
917     #ifdef HAVE_UNISTD_H
918     #include <unistd.h>
919     #endif
920     #include <signal.h>
921     static int handled_signal = 0;
922     RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
923     int main(void) { /* returns 0 if signals need not to be reinstalled */
924     signal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
925     exit(handled_signal == 2);
926     }
927     ], ac_cv_signal_need_reinstall=yes, ac_cv_signal_need_reinstall=no,
928     dnl When cross-compiling, do not assume anything.
929     ac_cv_signal_need_reinstall="guessing yes"
930     )
931     AC_LANG_RESTORE
932     ]
933     )
934     AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
935     [Define if your system requires signals to be reinstalled.])
936    
937     dnl Check if sigaction handlers need to be reinstalled
938     AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
939     ac_cv_sigaction_need_reinstall, [
940     AC_LANG_SAVE
941     AC_LANG_CPLUSPLUS
942     AC_TRY_RUN([
943     #include <stdlib.h>
944     #ifdef HAVE_UNISTD_H
945     #include <unistd.h>
946     #endif
947     #include <signal.h>
948     static int handled_signal = 0;
949     RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
950     typedef RETSIGTYPE (*signal_handler)(int);
951     static signal_handler mysignal(int sig, signal_handler handler) {
952     struct sigaction old_sa;
953     struct sigaction new_sa;
954     new_sa.sa_handler = handler;
955     return ((sigaction(sig,&new_sa,&old_sa) < 0) ? SIG_IGN : old_sa.sa_handler);
956     }
957     int main(void) { /* returns 0 if signals need not to be reinstalled */
958     mysignal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
959     exit(handled_signal == 2);
960     }
961     ], ac_cv_sigaction_need_reinstall=yes, ac_cv_sigaction_need_reinstall=no,
962     dnl When cross-compiling, do not assume anything.
963     ac_cv_sigaction_need_reinstall="guessing yes"
964     )
965     AC_LANG_RESTORE
966     ]
967     )
968     AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
969     [Define if your system requires sigactions to be reinstalled.])
970    
971 gbeauche 1.21 dnl Check if Mach exceptions supported.
972     AC_CACHE_CHECK([whether your system supports Mach exceptions],
973     ac_cv_have_mach_exceptions, [
974 gbeauche 1.1 AC_LANG_SAVE
975     AC_LANG_CPLUSPLUS
976     AC_TRY_RUN([
977 gbeauche 1.21 #define HAVE_MACH_EXCEPTIONS 1
978 gbeauche 1.1 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
979     #include "vm_alloc.cpp"
980     #include "sigsegv.cpp"
981 gbeauche 1.21 ], [
982     sigsegv_recovery=mach
983     ac_cv_have_mach_exceptions=yes
984     ],
985     ac_cv_have_mach_exceptions=no,
986 gbeauche 1.1 dnl When cross-compiling, do not assume anything.
987 gbeauche 1.21 ac_cv_have_mach_exceptions=no
988 gbeauche 1.1 )
989     AC_LANG_RESTORE
990     ]
991     )
992 gbeauche 1.21 AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions",
993     [Define if your system supports Mach exceptions.])
994    
995 gbeauche 1.36 dnl Check if Windows exceptions are supported.
996     AC_CACHE_CHECK([whether your system supports Windows exceptions],
997     ac_cv_have_win32_exceptions, [
998     AC_LANG_SAVE
999     AC_LANG_CPLUSPLUS
1000     AC_TRY_RUN([
1001     #define HAVE_WIN32_EXCEPTIONS 1
1002     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
1003     #include "vm_alloc.cpp"
1004     #include "sigsegv.cpp"
1005     ], [
1006     sigsegv_recovery=win32
1007     ac_cv_have_win32_exceptions=yes
1008     ],
1009     ac_cv_have_win32_exceptions=no,
1010     dnl When cross-compiling, do not assume anything.
1011     ac_cv_have_win32_exceptions=no
1012     )
1013     AC_LANG_RESTORE
1014     ]
1015     )
1016     AC_TRANSLATE_DEFINE(HAVE_WIN32_EXCEPTIONS, "$ac_cv_have_win32_exceptions",
1017     [Define if your system supports Windows exceptions.])
1018    
1019 gbeauche 1.21 dnl Otherwise, check if extended signals are supported.
1020     if [[ -z "$sigsegv_recovery" ]]; then
1021     AC_CACHE_CHECK([whether your system supports extended signal handlers],
1022     ac_cv_have_extended_signals, [
1023     AC_LANG_SAVE
1024     AC_LANG_CPLUSPLUS
1025     AC_TRY_RUN([
1026     #define HAVE_SIGINFO_T 1
1027     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
1028     #include "vm_alloc.cpp"
1029     #include "sigsegv.cpp"
1030     ], [
1031     sigsegv_recovery=siginfo
1032     ac_cv_have_extended_signals=yes
1033     ],
1034     ac_cv_have_extended_signals=no,
1035     dnl When cross-compiling, do not assume anything.
1036     ac_cv_have_extended_signals=no
1037     )
1038     AC_LANG_RESTORE
1039     ]
1040     )
1041     AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals",
1042     [Define if your system support extended signals.])
1043     fi
1044 gbeauche 1.1
1045     dnl Otherwise, check for subterfuges.
1046 gbeauche 1.21 if [[ -z "$sigsegv_recovery" ]]; then
1047 gbeauche 1.1 AC_CACHE_CHECK([whether we then have a subterfuge for your system],
1048     ac_cv_have_sigcontext_hack, [
1049     AC_LANG_SAVE
1050     AC_LANG_CPLUSPLUS
1051     AC_TRY_RUN([
1052     #define HAVE_SIGCONTEXT_SUBTERFUGE 1
1053     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
1054     #include "vm_alloc.cpp"
1055     #include "sigsegv.cpp"
1056 gbeauche 1.21 ], [
1057     sigsegv_recovery=sigcontext
1058     ac_cv_have_sigcontext_hack=yes
1059     ],
1060     ac_cv_have_sigcontext_hack=no,
1061 gbeauche 1.1 dnl When cross-compiling, do not assume anything.
1062     ac_cv_have_sigcontext_hack=no
1063     )
1064     AC_LANG_RESTORE
1065     ])
1066     AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack",
1067     [Define if we know a hack to replace siginfo_t->si_addr member.])
1068     fi
1069    
1070     dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
1071     AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
1072     ac_cv_have_skip_instruction, [
1073     AC_LANG_SAVE
1074     AC_LANG_CPLUSPLUS
1075     AC_TRY_RUN([
1076     #define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
1077     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
1078     #include "vm_alloc.cpp"
1079     #include "sigsegv.cpp"
1080     ], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
1081     dnl When cross-compiling, do not assume anything.
1082     ac_cv_have_skip_instruction=no
1083     )
1084     AC_LANG_RESTORE
1085     ]
1086     )
1087     AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
1088     [Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
1089    
1090     dnl Can we do Video on SEGV Signals ?
1091     CAN_VOSF=no
1092 gbeauche 1.21 if [[ -n "$sigsegv_recovery" ]]; then
1093 gbeauche 1.1 CAN_VOSF=yes
1094     fi
1095    
1096 gbeauche 1.23 dnl A dummy program that returns always true
1097 gbeauche 1.28 AC_PATH_PROG([BLESS], "true")
1098 gbeauche 1.23
1099 gbeauche 1.61 dnl Check for linker script support
1100     case $target_os:$target_cpu in
1101     linux*:i?86) LINKER_SCRIPT_FLAGS="-Wl,-T,ldscripts/linux-i386.ld";;
1102     linux*:x86_64) LINKER_SCRIPT_FLAGS="-Wl,-T,ldscripts/linux-x86_64.ld";;
1103 gbeauche 1.62 darwin*:powerpc)LINKER_SCRIPT_FLAGS="-Wl,-seg1addr,0x78048000";;
1104 gbeauche 1.61 esac
1105     if [[ -n "$LINKER_SCRIPT_FLAGS" ]]; then
1106     AC_CACHE_CHECK([whether linker script is usable],
1107     ac_cv_linker_script_works, [
1108     AC_LANG_SAVE
1109     AC_LANG_CPLUSPLUS
1110     saved_LDFLAGS="$LDFLAGS"
1111     LDFLAGS="$LDFLAGS $LINKER_SCRIPT_FLAGS"
1112     AC_TRY_RUN(
1113     [int main() {if ((char *)&main < (char *)0x70000000) return 1;}],
1114     [ac_cv_linker_script_works=yes],
1115     [ac_cv_linker_script_works=no],
1116     dnl When cross-compiling, assume it works
1117     [ac_cv_linker_script_works="guessing yes"]
1118     )
1119     AC_LANG_RESTORE
1120     if [[ "$ac_cv_linker_script_works" = "no" ]]; then
1121     LDFLAGS="$saved_LDFLAGS"
1122     LINKER_SCRIPT_FLAGS=""
1123     fi
1124     ])
1125     fi
1126     AC_TRANSLATE_DEFINE(HAVE_LINKER_SCRIPT, "$ac_cv_linker_script_works",
1127     [Define if there is a linker script to relocate the executable above 0x70000000.])
1128    
1129 gbeauche 1.1 dnl Determine the addressing mode to use
1130     if [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then
1131     ADDRESSING_MODE="real"
1132     else
1133     ADDRESSING_MODE=""
1134     AC_MSG_CHECKING([for the addressing mode to use])
1135     for am in $ADDRESSING_TEST_ORDER; do
1136     case $am in
1137     real)
1138     dnl Requires ability to mmap() Low Memory globals
1139 gbeauche 1.23 if [[ "x$ac_cv_can_map_lm$ac_cv_pagezero_hack" = "xnono" ]]; then
1140 gbeauche 1.1 continue
1141     fi
1142 gbeauche 1.23 dnl Requires VOSF screen updates
1143 gbeauche 1.1 if [[ "x$CAN_VOSF" = "xno" ]]; then
1144     continue
1145     fi
1146     dnl Real addressing will probably work.
1147     ADDRESSING_MODE="real"
1148     WANT_VOSF=yes dnl we can use VOSF and we need it actually
1149     DEFINES="$DEFINES -DREAL_ADDRESSING"
1150 gbeauche 1.23 if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then
1151     BLESS=Darwin/lowmem
1152     LDFLAGS="$LDFLAGS -pagezero_size 0x2000"
1153     fi
1154 gbeauche 1.1 break
1155     ;;
1156     direct)
1157     dnl Requires VOSF screen updates
1158     if [[ "x$CAN_VOSF" = "xyes" ]]; then
1159     ADDRESSING_MODE="direct"
1160     WANT_VOSF=yes dnl we can use VOSF and we need it actually
1161     DEFINES="$DEFINES -DDIRECT_ADDRESSING"
1162     break
1163     fi
1164     ;;
1165     banks)
1166     dnl Default addressing mode
1167     ADDRESSING_MODE="memory banks"
1168     break
1169     ;;
1170     *)
1171     AC_MSG_ERROR([Internal configure.in script error for $am addressing mode])
1172     esac
1173     done
1174     AC_MSG_RESULT($ADDRESSING_MODE)
1175     if [[ "x$ADDRESSING_MODE" = "x" ]]; then
1176     AC_MSG_WARN([Sorry, no suitable addressing mode in $ADDRESSING_TEST_ORDER])
1177     ADDRESSING_MODE="memory banks"
1178     fi
1179     fi
1180    
1181 gbeauche 1.5 dnl Banked Memory Addressing mode is not supported by the JIT compiler
1182     if [[ "x$WANT_JIT" = "xyes" -a "x$ADDRESSING_MODE" = "xmemory banks" ]]; then
1183     AC_MSG_ERROR([Sorry, the JIT Compiler requires Direct Addressing, at least])
1184     fi
1185    
1186 gbeauche 1.1 dnl Enable VOSF screen updates with this feature is requested and feasible
1187     if [[ "x$WANT_VOSF" = "xyes" -a "x$CAN_VOSF" = "xyes" ]]; then
1188     AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
1189     else
1190     WANT_VOSF=no
1191     fi
1192    
1193     dnl Check for GAS.
1194     HAVE_GAS=no
1195     AC_MSG_CHECKING(for GAS .p2align feature)
1196     cat >conftest.S << EOF
1197     .text
1198     .p2align 5
1199     EOF
1200     if $CC conftest.S -c -o conftest.o >/dev/null 2>&1 ; then HAVE_GAS=yes; fi
1201     AC_MSG_RESULT($HAVE_GAS)
1202    
1203     dnl Check for GCC 2.7 or higher.
1204     HAVE_GCC27=no
1205     AC_MSG_CHECKING(for GCC 2.7 or higher)
1206 gbeauche 1.53 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5)
1207     # error gcc < 2.7
1208     #endif
1209     ]])],
1210     [AC_MSG_RESULT(yes); HAVE_GCC27=yes],
1211     [AC_MSG_RESULT(no)])
1212 gbeauche 1.1
1213     dnl Check for GCC 3.0 or higher.
1214     HAVE_GCC30=no
1215     AC_MSG_CHECKING(for GCC 3.0 or higher)
1216 gbeauche 1.53 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ >= 3)
1217     # error gcc < 3
1218     #endif
1219     ]])],
1220     [AC_MSG_RESULT(yes); HAVE_GCC30=yes],
1221     [AC_MSG_RESULT(no)])
1222 gbeauche 1.1
1223 gbeauche 1.39 dnl Check for ICC.
1224     AC_MSG_CHECKING(for ICC)
1225     HAVE_ICC=no
1226     if $CXX -V -v 2>&1 | grep -q "Intel(R) C++ Compiler"; then
1227     HAVE_ICC=yes
1228     fi
1229     AC_MSG_RESULT($HAVE_ICC)
1230    
1231 gbeauche 1.1 dnl Set "-fomit-frame-pointer" on i386 GCC 2.7 or higher.
1232     dnl Also set "-fno-exceptions" for C++ because exception handling requires
1233     dnl the frame pointer.
1234     if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
1235     CFLAGS="$CFLAGS -fomit-frame-pointer"
1236     CXXFLAGS="$CXXFLAGS -fomit-frame-pointer -fno-exceptions"
1237     fi
1238    
1239     dnl (gb) Do not merge constants since it breaks fpu/fpu_x86.cpp.
1240     dnl As of 2001/08/02, this affects the following compilers:
1241     dnl Official: probably gcc-3.1 (mainline CVS)
1242     dnl Mandrake: gcc-2.96 >= 0.59mdk, gcc-3.0.1 >= 0.1mdk
1243     dnl Red Hat : gcc-2.96 >= 89, gcc-3.0 >= 1
1244 gbeauche 1.39 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1245 gbeauche 1.1 SAVED_CXXFLAGS="$CXXFLAGS"
1246     CXXFLAGS="$CXXFLAGS -fno-merge-constants"
1247     AC_CACHE_CHECK([whether GCC supports constants merging], ac_cv_gcc_constants_merging, [
1248     AC_LANG_SAVE
1249     AC_LANG_CPLUSPLUS
1250     AC_TRY_COMPILE([],[],[ac_cv_gcc_constants_merging=yes],[ac_cv_gcc_constants_merging=no])
1251     AC_LANG_RESTORE
1252     ])
1253     if [[ "x$ac_cv_gcc_constants_merging" != "xyes" ]]; then
1254     CXXFLAGS="$SAVED_CXXFLAGS"
1255     fi
1256     fi
1257    
1258 gbeauche 1.33 dnl Store motion was introduced in 3.3-hammer branch and any gcc >= 3.4
1259     dnl However, there are some corner cases exposed on x86-64
1260 gbeauche 1.39 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1261 gbeauche 1.33 SAVED_CXXFLAGS="$CXXFLAGS"
1262     CXXFLAGS="$CXXFLAGS -fno-gcse-sm"
1263     AC_CACHE_CHECK([whether GCC supports store motion], ac_cv_gcc_store_motion, [
1264     AC_LANG_SAVE
1265     AC_LANG_CPLUSPLUS
1266     AC_TRY_COMPILE([],[],[ac_cv_gcc_store_motion=yes],[ac_cv_gcc_store_motion=no])
1267     AC_LANG_RESTORE
1268     ])
1269     if [[ "x$ac_cv_gcc_store_motion" != "xyes" ]]; then
1270     CXXFLAGS="$SAVED_CXXFLAGS"
1271     fi
1272     fi
1273    
1274 gbeauche 1.39 dnl Add -fno-strict-aliasing for slirp sources
1275     if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1276 gbeauche 1.40 SAVED_CFLAGS="$CFLAGS"
1277 gbeauche 1.39 CFLAGS="$CFLAGS -fno-strict-aliasing"
1278     AC_CACHE_CHECK([whether the compiler supports -fno-strict-aliasing],
1279     ac_cv_gcc_no_strict_aliasing, [
1280     AC_TRY_COMPILE([],[],
1281 gbeauche 1.47 [ac_cv_gcc_no_strict_aliasing=yes; AC_SUBST(SLIRP_CFLAGS, "-fno-strict-aliasing")],
1282 gbeauche 1.39 [ac_cv_gcc_no_strict_aliasing=no])
1283     ])
1284     CFLAGS="$SAVED_CFLAGS"
1285     fi
1286    
1287 gbeauche 1.54 dnl Add -mdynamic-no-pic for MacOS X (XXX icc10 will support MacOS X)
1288     if [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1289 gbeauche 1.52 SAVED_CFLAGS="$CFLAGS"
1290     CFLAGS="$CFLAGS -mdynamic-no-pic"
1291     AC_CACHE_CHECK([whether the compiler supports -mdynamic-no-pic],
1292     ac_cv_gcc_mdynamic_no_pic, [
1293     AC_TRY_COMPILE([],[],[ac_cv_gcc_mdynamic_no_pic=yes],[ac_cv_gcc_mdynamic_no_pic=no])
1294     ])
1295     if [[ "x$ac_cv_gcc_mdynamic_no_pic" = "xyes" ]]; then
1296     CXXFLAGS="$CXXFLAGS -mdynamic-no-pic"
1297     else
1298     CFLAGS="$SAVED_CFLAGS"
1299     fi
1300     fi
1301    
1302 gbeauche 1.1 dnl Select appropriate CPU source and REGPARAM define.
1303     ASM_OPTIMIZATIONS=none
1304     CPUSRCS="cpuemu1.cpp cpuemu2.cpp cpuemu3.cpp cpuemu4.cpp cpuemu5.cpp cpuemu6.cpp cpuemu7.cpp cpuemu8.cpp"
1305 gbeauche 1.5
1306     dnl (gb) JITSRCS will be emptied later if the JIT is not available
1307     dnl Other platforms should define their own set of noflags file variants
1308     CAN_JIT=no
1309     JITSRCS="compemu1.cpp compemu2.cpp compemu3.cpp compemu4.cpp compemu5.cpp compemu6.cpp compemu7.cpp compemu8.cpp"
1310    
1311 gbeauche 1.11 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
1312 gbeauche 1.1 dnl i386 CPU
1313 gbeauche 1.7 DEFINES="$DEFINES -DUNALIGNED_PROFITABLE -DREGPARAM=\"__attribute__((regparm(3)))\""
1314 gbeauche 1.1 if [[ "x$HAVE_GAS" = "xyes" ]]; then
1315     ASM_OPTIMIZATIONS=i386
1316 gbeauche 1.7 DEFINES="$DEFINES -DX86_ASSEMBLY -DOPTIMIZED_FLAGS -DSAHF_SETO_PROFITABLE"
1317 gbeauche 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"
1318 gbeauche 1.11 CAN_JIT=yes
1319 gbeauche 1.13 fi
1320     elif [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_X86_64" = "xyes" ]]; then
1321     dnl x86-64 CPU
1322     DEFINES="$DEFINES -DUNALIGNED_PROFITABLE"
1323     if [[ "x$HAVE_GAS" = "xyes" ]]; then
1324     ASM_OPTIMIZATIONS="x86-64"
1325     DEFINES="$DEFINES -DX86_64_ASSEMBLY -DOPTIMIZED_FLAGS"
1326 gbeauche 1.32 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"
1327     CAN_JIT=yes
1328 gbeauche 1.34 WANT_33BIT_ADDRESSING=yes
1329 gbeauche 1.1 fi
1330     elif [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_SPARC" = "xyes" -a "x$HAVE_GAS" = "xyes" ]]; then
1331     dnl SPARC CPU
1332     case "$target_os" in
1333     solaris*)
1334     AC_MSG_CHECKING(SPARC CPU architecture)
1335     SPARC_TYPE=`Solaris/which_sparc`
1336     AC_MSG_RESULT($SPARC_TYPE)
1337     case "$SPARC_TYPE" in
1338     SPARC_V8)
1339     ASM_OPTIMIZATIONS="SPARC V8 architecture"
1340     DEFINES="$DEFINES -DSPARC_V8_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
1341     CFLAGS="$CFLAGS -Wa,-Av8"
1342     CXXFLAGS="$CXXFLAGS -Wa,-Av8"
1343     ;;
1344     SPARC_V9)
1345     ASM_OPTIMIZATIONS="SPARC V9 architecture"
1346     DEFINES="$DEFINES -DSPARC_V9_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
1347     CFLAGS="$CFLAGS -Wa,-Av9"
1348     CXXFLAGS="$CXXFLAGS -Wa,-Av9"
1349     ;;
1350     esac
1351     ;;
1352     esac
1353     elif [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then
1354     dnl Native m68k, no emulation
1355     CPUINCLUDES="-I../native_cpu"
1356     CPUSRCS="asm_support.s"
1357     fi
1358    
1359 gbeauche 1.5 dnl Enable JIT compiler, if possible.
1360     if [[ "x$WANT_JIT" = "xyes" -a "x$CAN_JIT" ]]; then
1361     JITSRCS="$JITSRCS ../uae_cpu/compiler/compemu_support.cpp ../uae_cpu/compiler/compemu_fpp.cpp compstbl.o cpustbl_nf.o"
1362     DEFINES="$DEFINES -DUSE_JIT -DUSE_JIT_FPU"
1363    
1364     if [[ "x$WANT_JIT_DEBUG" = "xyes" ]]; then
1365     if [[ "x$WANT_MON" = "xyes" ]]; then
1366     DEFINES="$DEFINES -DJIT_DEBUG=1"
1367     else
1368     AC_MSG_WARN([cxmon not found, ignoring --enable-jit-debug])
1369     WANT_JIT_DEBUG=no
1370     fi
1371     fi
1372 gbeauche 1.8
1373     dnl IEEE core is the only FPU emulator to use with the JIT compiler
1374     case $FPE_CORE_TEST_ORDER in
1375     ieee*) ;;
1376     *) AC_MSG_WARN([Forcing use of the IEEE FPU core, as the JIT compiler supports only this one.]) ;;
1377     esac
1378     FPE_CORE_TEST_ORDER="ieee"
1379 gbeauche 1.5 else
1380     WANT_JIT=no
1381     WANT_JIT_DEBUG=no
1382     JITSRCS=""
1383     fi
1384    
1385 gbeauche 1.34 dnl Use 33-bit memory addressing?
1386     if [[ "$ac_cv_have_33bit_addressing:$WANT_33BIT_ADDRESSING" = "yes:yes" ]]; then
1387     use_33bit_addressing=yes
1388     fi
1389     AC_TRANSLATE_DEFINE(USE_33BIT_ADDRESSING, "$use_33bit_addressing",
1390     [Define to use 33-bit memory addressing on 64-bit JIT capable systems.])
1391    
1392 gbeauche 1.1 dnl Utility macro used by next two tests.
1393     dnl AC_EXAMINE_OBJECT(C source code,
1394     dnl commands examining object file,
1395     dnl [commands to run if compile failed]):
1396     dnl
1397     dnl Compile the source code to an object file; then convert it into a
1398     dnl printable representation. All unprintable characters and
1399     dnl asterisks (*) are replaced by dots (.). All white space is
1400     dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the
1401     dnl output, but runs of newlines are compressed to a single newline.
1402     dnl Finally, line breaks are forcibly inserted so that no line is
1403     dnl longer than 80 columns and the file ends with a newline. The
1404     dnl result of all this processing is in the file conftest.dmp, which
1405     dnl may be examined by the commands in the second argument.
1406     dnl
1407     AC_DEFUN([gcc_AC_EXAMINE_OBJECT],
1408     [AC_LANG_SAVE
1409     AC_LANG_C
1410     dnl Next bit cribbed from AC_TRY_COMPILE.
1411     cat > conftest.$ac_ext <<EOF
1412     [#line __oline__ "configure"
1413     #include "confdefs.h"
1414     $1
1415     ]EOF
1416     if AC_TRY_EVAL(ac_compile); then
1417     od -c conftest.o |
1418     sed ['s/^[0-7]*[ ]*/ /
1419     s/\*/./g
1420     s/ \\n/*/g
1421     s/ [0-9][0-9][0-9]/./g
1422     s/ \\[^ ]/./g'] |
1423     tr -d '
1424     ' | tr -s '*' '
1425     ' | fold | sed '$a\
1426     ' > conftest.dmp
1427     $2
1428     ifelse($3, , , else
1429     $3
1430     )dnl
1431     fi
1432     rm -rf conftest*
1433     AC_LANG_RESTORE])
1434    
1435     dnl Floating point format probe.
1436     dnl The basic concept is the same as the above: grep the object
1437     dnl file for an interesting string. We have to watch out for
1438     dnl rounding changing the values in the object, however; this is
1439     dnl handled by ignoring the least significant byte of the float.
1440     dnl
1441     dnl Does not know about VAX G-float or C4x idiosyncratic format.
1442     dnl It does know about PDP-10 idiosyncratic format, but this is
1443     dnl not presently supported by GCC. S/390 "binary floating point"
1444     dnl is in fact IEEE (but maybe we should have that in EBCDIC as well
1445     dnl as ASCII?)
1446     dnl
1447     AC_DEFUN([gcc_AC_C_FLOAT_FORMAT],
1448     [AC_CACHE_CHECK(floating point format, ac_cv_c_float_format,
1449     [gcc_AC_EXAMINE_OBJECT(
1450     [/* This will not work unless sizeof(double) == 8. */
1451     extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
1452    
1453     /* This structure must have no internal padding. */
1454     struct possibility {
1455     char prefix[8];
1456     double candidate;
1457     char postfix[8];
1458     };
1459    
1460     #define C(cand) { "\nformat:", cand, ":tamrof\n" }
1461     struct possibility table [] =
1462     {
1463     C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
1464     C( 3.53802595280598432000e+18), /* D__float - VAX */
1465     C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
1466     C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
1467     C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
1468     };],
1469     [if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1470     ac_cv_c_float_format='IEEE (big-endian)'
1471     elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
1472     ac_cv_c_float_format='IEEE (big-endian)'
1473     elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
1474     ac_cv_c_float_format='IEEE (little-endian)'
1475     elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
1476     ac_cv_c_float_format='IEEE (little-endian)'
1477     elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
1478     ac_cv_c_float_format='VAX D-float'
1479     elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
1480     ac_cv_c_float_format='PDP-10'
1481     elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1482     ac_cv_c_float_format='IBM 370 hex'
1483     else
1484     AC_MSG_ERROR(Unknown floating point format)
1485     fi],
1486     [AC_MSG_ERROR(compile failed)])
1487     ])
1488     # IEEE is the default format. If the float endianness isn't the same
1489     # as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
1490     # (which is a tristate: yes, no, default). This is only an issue with
1491     # IEEE; the other formats are only supported by a few machines each,
1492     # all with the same endianness.
1493     format=IEEE_FLOAT_FORMAT
1494     fbigend=
1495     case $ac_cv_c_float_format in
1496     'IEEE (big-endian)' )
1497     if test $ac_cv_c_bigendian = no; then
1498     fbigend=1
1499     fi
1500     ;;
1501     'IEEE (little-endian)' )
1502     if test $ac_cv_c_bigendian = yes; then
1503     fbigend=0
1504     fi
1505     ;;
1506     'VAX D-float' )
1507     format=VAX_FLOAT_FORMAT
1508     ;;
1509     'PDP-10' )
1510     format=PDP10_FLOAT_FORMAT
1511     ;;
1512     'IBM 370 hex' )
1513     format=IBM_FLOAT_FORMAT
1514     ;;
1515     esac
1516     AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format,
1517     [Define to the floating point format of the host machine.])
1518     if test -n "$fbigend"; then
1519     AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend,
1520     [Define to 1 if the host machine stores floating point numbers in
1521     memory with the word containing the sign bit at the lowest address,
1522     or to 0 if it does it the other way around.
1523    
1524     This macro should not be defined if the ordering is the same as for
1525     multi-word integers.])
1526     fi
1527     ])
1528    
1529     dnl Select appropriate FPU source.
1530     gcc_AC_C_FLOAT_FORMAT
1531     AC_CHECK_HEADERS(ieee754.h ieeefp.h floatingpoint.h nan.h)
1532    
1533     for fpe in $FPE_CORE_TEST_ORDER; do
1534     case $fpe in
1535     ieee)
1536 gbeauche 1.2 case $ac_cv_c_float_format in
1537     IEEE*)
1538 gbeauche 1.1 FPE_CORE="IEEE fpu core"
1539     DEFINES="$DEFINES -DFPU_IEEE"
1540     FPUSRCS="../uae_cpu/fpu/fpu_ieee.cpp"
1541 gbeauche 1.4 dnl Math functions not mandated by C99 standard
1542     AC_CHECK_FUNCS(isnanl isinfl)
1543     dnl Math functions required by C99 standard, but probably not
1544     dnl implemented everywhere. In that case, we fall back to the
1545     dnl regular variant for doubles.
1546     AC_CHECK_FUNCS(logl log10l expl powl fabsl sqrtl)
1547     AC_CHECK_FUNCS(sinl cosl tanl sinhl coshl tanhl)
1548     AC_CHECK_FUNCS(asinl acosl atanl asinhl acoshl atanhl)
1549     AC_CHECK_FUNCS(floorl ceill)
1550 gbeauche 1.1 break
1551 gbeauche 1.2 ;;
1552     esac
1553 gbeauche 1.1 ;;
1554     x86)
1555     if [[ ":$HAVE_GCC27:$HAVE_I386:$HAVE_GAS:" = ":yes:yes:yes:" ]]; then
1556     FPE_CORE="i387 fpu core"
1557     DEFINES="$DEFINES -DFPU_X86"
1558     FPUSRCS="../uae_cpu/fpu/fpu_x86.cpp"
1559     break
1560     fi
1561     ;;
1562     uae)
1563     FPE_CORE="uae fpu core"
1564     DEFINES="$DEFINES -DFPU_UAE"
1565     FPUSRCS="../uae_cpu/fpu/fpu_uae.cpp"
1566     break
1567     ;;
1568     *)
1569     AC_MSG_ERROR([Internal configure.in script error for $fpe fpu core])
1570     ;;
1571     esac
1572     done
1573     if [[ "x$FPE_CORE" = "x" ]]; then
1574     AC_MSG_ERROR([Sorry, no suitable FPU core found in $FPE_CORE_TEST_ORDER])
1575     fi
1576    
1577     dnl Check for certain math functions
1578     AC_CHECK_FUNCS(atanh)
1579 gbeauche 1.4 AC_CHECK_FUNCS(isnan isinf finite isnormal signbit)
1580 gbeauche 1.1
1581     dnl UAE CPU sources for all non-m68k-native architectures.
1582     if [[ "x$WANT_NATIVE_M68K" = "xno" ]]; then
1583     CPUINCLUDES="-I../uae_cpu"
1584 gbeauche 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"
1585 gbeauche 1.1 fi
1586    
1587     dnl Remove the "-g" option if set for GCC.
1588     if [[ "x$HAVE_GCC27" = "xyes" ]]; then
1589 gbeauche 1.33 CFLAGS=`echo $CFLAGS | sed -e 's/-g\b//g'`
1590     CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-g\b//g'`
1591 gbeauche 1.1 fi
1592    
1593 gbeauche 1.14 dnl Or if we have -IPA (MIPSPro compilers)
1594     if [[ "x$HAVE_IPA" = "xyes" ]]; then
1595     CFLAGS="`echo $CFLAGS | sed -e 's/-g//g'` -O3 -OPT:Olimit=0 -IPA"
1596     CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-g//g'` -O3 -OPT:Olimit=0 -IPA"
1597 gbeauche 1.1 CXXFLAGS="-LANG:std $CXXFLAGS"
1598 gbeauche 1.14 LDFLAGS="$LDFLAGS -O3 -OPT:Olimit=0 -IPA"
1599 gbeauche 1.1 fi
1600    
1601     dnl Generate Makefile.
1602     AC_SUBST(DEFINES)
1603     AC_SUBST(SYSSRCS)
1604     AC_SUBST(CPUINCLUDES)
1605     AC_SUBST(CPUSRCS)
1606 gbeauche 1.23 AC_SUBST(BLESS)
1607 gbeauche 1.29 AC_SUBST(KEYCODES)
1608 cebix 1.16 AC_CONFIG_FILES([Makefile])
1609     AC_OUTPUT
1610 gbeauche 1.1
1611     dnl Print summary.
1612     echo
1613     echo Basilisk II configuration summary:
1614     echo
1615 gbeauche 1.26 echo SDL support ............................ : $SDL_SUPPORT
1616 gbeauche 1.1 echo XFree86 DGA support .................... : $WANT_XF86_DGA
1617     echo XFree86 VidMode support ................ : $WANT_XF86_VIDMODE
1618     echo fbdev DGA support ...................... : $WANT_FBDEV_DGA
1619     echo Enable video on SEGV signals ........... : $WANT_VOSF
1620     echo ESD sound support ...................... : $WANT_ESD
1621     echo GTK user interface ..................... : $WANT_GTK
1622     echo mon debugger support ................... : $WANT_MON
1623     echo Running m68k code natively ............. : $WANT_NATIVE_M68K
1624 gbeauche 1.5 echo Use JIT compiler ....................... : $WANT_JIT
1625     echo JIT debug mode ......................... : $WANT_JIT_DEBUG
1626 gbeauche 1.1 echo Floating-Point emulation core .......... : $FPE_CORE
1627     echo Assembly optimizations ................. : $ASM_OPTIMIZATIONS
1628     echo Addressing mode ........................ : $ADDRESSING_MODE
1629 gbeauche 1.21 echo Bad memory access recovery type ........ : $sigsegv_recovery
1630 gbeauche 1.1 echo
1631     echo "Configuration done. Now type \"make\" (or \"gmake\")."