ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.47
Committed: 2005-06-06T19:31:22Z (19 years, 3 months ago) by gbeauche
Branch: MAIN
Changes since 1.46: +1 -1 lines
Log Message:
Restrict mandatory SLIRP_CFLAGS to minimum, i.e. -fno-strict-aliasing.

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