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

File Contents

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