ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.23
Committed: 2003-10-12T22:39:57Z (21 years, 1 month ago) by gbeauche
Branch: MAIN
Changes since 1.22: +23 -2 lines
Log Message:
Merge in __PAGEZERO hack from Michael Z. Sliczniak so that REAL_ADDRESSING
mode can work under Darwin.

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 dnl Video options.
18 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 dnl JIT compiler options.
24 AC_ARG_ENABLE(jit-compiler, [ --enable-jit-compiler enable JIT compiler [default=no]], [WANT_JIT=$enableval], [WANT_JIT=no])
25 AC_ARG_ENABLE(jit-debug, [ --enable-jit-debug activate native code disassemblers [default=no]], [WANT_JIT_DEBUG=$enableval], [WANT_JIT_DEBUG=no])
26
27 dnl FPU emulation core.
28 AC_ARG_ENABLE(fpe,
29 [ --enable-fpe=FPE specify which fpu emulator to use [default=auto]],
30 [ case "$enableval" in
31 dnl default is always ieee, if architecture has this fp format
32 auto) FPE_CORE_TEST_ORDER="ieee uae";;
33 ieee) FPE_CORE_TEST_ORDER="ieee";;
34 uae) FPE_CORE_TEST_ORDER="uae";;
35 x86) FPE_CORE_TEST_ORDER="x86";;
36 *) AC_MSG_ERROR([--enable-fpe takes only one of the following values: auto, x86, ieee, uae]);;
37 esac
38 ],
39 [ FPE_CORE_TEST_ORDER="ieee uae"
40 ])
41
42 dnl Addressing modes.
43 AC_ARG_ENABLE(addressing,
44 [ --enable-addressing=AM specify the addressing mode to use [default=fastest]],
45 [ case "$enableval" in
46 real) ADDRESSING_TEST_ORDER="real";;
47 direct) ADDRESSING_TEST_ORDER="direct";;
48 banks) ADDRESSING_TEST_ORDER="banks";;
49 fastest)ADDRESSING_TEST_ORDER="direct banks";;
50 *) AC_MSG_ERROR([--enable-addressing takes only one of the following values: fastest, real, direct, banks]);;
51 esac
52 ],
53 [ ADDRESSING_TEST_ORDER="direct banks"
54 ])
55
56 dnl External packages.
57 AC_ARG_WITH(esd, [ --with-esd support ESD for sound under Linux/FreeBSD [default=yes]], [WANT_ESD=$withval], [WANT_ESD=yes])
58 AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]], [WANT_GTK=$withval], [WANT_GTK=yes])
59 AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes])
60
61 dnl Canonical system information.
62 AC_CANONICAL_HOST
63 AC_CANONICAL_TARGET
64
65 dnl Target OS type (target is host if not cross-compiling).
66 case "$target_os" in
67 linux*) OS_TYPE=linux;;
68 netbsd*) OS_TYPE=netbsd;;
69 freebsd*) OS_TYPE=freebsd;;
70 solaris*) OS_TYPE=solaris;;
71 darwin*) OS_TYPE=darwin;;
72 *) OS_TYPE=`echo $target_os | sed -e 's/-/_/g' | sed -e 's/\./_/g'`;;
73 esac
74 DEFINES="$DEFINES -DOS_$OS_TYPE"
75
76 dnl Target CPU type.
77 HAVE_I386=no
78 HAVE_M68K=no
79 HAVE_SPARC=no
80 HAVE_POWERPC=no
81 HAVE_X86_64=no
82 case "$target_cpu" in
83 i386* | i486* | i586* | i686* | i786* ) HAVE_I386=yes;;
84 m68k* ) HAVE_M68K=yes;;
85 sparc* ) HAVE_SPARC=yes;;
86 powerpc* ) HAVE_POWERPC=yes;;
87 x86_64* ) HAVE_X86_64=yes;;
88 esac
89
90 dnl Checks for programs.
91 AC_PROG_CC
92 AC_PROG_CC_C_O
93 AC_PROG_CPP
94 AC_PROG_CXX
95 AC_PROG_MAKE_SET
96 AC_PROG_INSTALL
97
98 dnl We use mon if possible.
99 MONSRCS=
100 if [[ "x$WANT_MON" = "xyes" ]]; then
101 AC_MSG_CHECKING(for mon)
102 mon_srcdir=../../../mon/src
103 if grep mon_init $mon_srcdir/mon.h >/dev/null 2>/dev/null; then
104 AC_MSG_RESULT(yes)
105 AC_DEFINE(ENABLE_MON, 1, [Define if using "mon".])
106 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"
107 CXXFLAGS="$CXXFLAGS -I$mon_srcdir -I$mon_srcdir/disass"
108 AC_CHECK_LIB(ncurses, tgetent, ,
109 AC_CHECK_LIB(termcap, tgetent, ,
110 AC_CHECK_LIB(termlib, tgetent, ,
111 AC_CHECK_LIB(terminfo, tgetent, ,
112 AC_CHECK_LIB(Hcurses, tgetent, ,
113 AC_CHECK_LIB(curses, tgetent))))))
114 AC_CHECK_LIB(readline, readline)
115 else
116 AC_MSG_RESULT(no)
117 AC_MSG_WARN([Could not find mon, ignoring --with-mon.])
118 WANT_MON=no
119 fi
120 fi
121
122 dnl Checks for libraries.
123 AC_CHECK_LIB(posix4, sem_init)
124 AC_CHECK_LIB(rt, timer_create)
125
126 dnl We need X11.
127 AC_PATH_XTRA
128 if [[ "x$no_x" = "xyes" ]]; then
129 AC_MSG_ERROR([You need X11 to run Basilisk II.])
130 fi
131 CFLAGS="$CFLAGS $X_CFLAGS"
132 CXXFLAGS="$CXXFLAGS $X_CFLAGS"
133 LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS"
134
135 dnl We want pthreads. Try libpthread first, then libc_r (FreeBSD), then PTL.
136 HAVE_PTHREADS=yes
137 AC_CHECK_LIB(pthread, pthread_create, , [
138 AC_CHECK_LIB(c_r, pthread_create, , [
139 AC_CHECK_LIB(PTL, pthread_create, , [
140 HAVE_PTHREADS=no
141 ])
142 ])
143 ])
144 if [[ "x$HAVE_PTHREADS" = "xyes" ]]; then
145 AC_DEFINE(HAVE_PTHREADS, 1, [Define if pthreads are available.])
146 fi
147 AC_CHECK_FUNCS(pthread_cancel)
148 AC_CHECK_FUNCS(pthread_mutexattr_setprotocol)
149 AC_CHECK_FUNCS(pthread_mutexattr_settype)
150 AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
151
152 dnl If POSIX.4 semaphores are not available, we emulate them with pthread mutexes.
153 SEMSRC=
154 AC_CHECK_FUNCS(sem_init, , [
155 if test "x$HAVE_PTHREADS" = "xyes"; then
156 SEMSRC=posix_sem.cpp
157 fi
158 ])
159
160 dnl We use DGA (XFree86 or fbdev) if possible.
161 if [[ "x$WANT_XF86_DGA" = "xyes" ]]; then
162 AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension, [
163 AC_DEFINE(ENABLE_XF86_DGA, 1, [Define if using XFree86 DGA extension.])
164 LIBS="$LIBS -lXxf86dga"
165 if [[ "x$WANT_FBDEV_DGA" = "xyes" ]]; then
166 AC_MSG_WARN([Cannot have both --enable-xf86-dga and --enable-fbdev-dga, ignoring --enable-fbdev-dga.])
167 WANT_FBDEV_DGA=no
168 fi
169 ], [
170 AC_MSG_WARN([Could not find XFree86 DGA extension, ignoring --enable-xf86-dga.])
171 WANT_XF86_DGA=no
172 ])
173 fi
174 if [[ "x$WANT_FBDEV_DGA" = "xyes" ]]; then
175 AC_DEFINE(ENABLE_FBDEV_DGA, 1, [Define if using DGA with framebuffer device.])
176 fi
177
178 dnl We use XFree86 VidMode if possible.
179 if [[ "x$WANT_XF86_VIDMODE" = "xyes" ]]; then
180 AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension, [
181 AC_DEFINE(ENABLE_XF86_VIDMODE, 1, [Define if using XFree86 DGA extension.])
182 LIBS="$LIBS -lXxf86vm"
183 ], [
184 AC_MSG_WARN([Could not find XFree86 VidMode extension, ignoring --enable-xf86-vidmode.])
185 WANT_XF86_VIDMODE=no
186 ])
187 fi
188
189 dnl We use GTK+ if possible.
190 UISRCS=../dummy/prefs_editor_dummy.cpp
191 if [[ "x$WANT_GTK" = "xyes" ]]; then
192 AM_PATH_GTK(1.2.0, [
193 AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
194 CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
195 LIBS="$LIBS $GTK_LIBS"
196 UISRCS=prefs_editor_gtk.cpp
197 dnl somehow, <gnome-i18n.h> would redefine gettext() to nothing if
198 dnl ENABLE_NLS is not set, thusly conflicting with C++ <string> which
199 dnl includes <libintl.h>
200 AM_GNU_GETTEXT
201 B2_PATH_GNOMEUI([
202 AC_DEFINE(HAVE_GNOMEUI, 1, [Define if libgnomeui is available.])
203 CXXFLAGS="$CXXFLAGS $GNOMEUI_CFLAGS"
204 LIBS="$LIBS $GNOMEUI_LIBS"
205 ], [])
206 ], [
207 AC_MSG_WARN([Could not find GTK+, disabling user interface.])
208 WANT_GTK=no
209 ])
210 fi
211
212 dnl We use ESD if possible.
213 if [[ "x$WANT_ESD" = "xyes" ]]; then
214 AM_PATH_ESD(0.2.8, [
215 AC_DEFINE(ENABLE_ESD, 1, [Define is using ESD.])
216 CFLAGS="$CFLAGS $ESD_CFLAGS"
217 CXXFLAGS="$CXXFLAGS $ESD_CFLAGS"
218 LIBS="$LIBS $ESD_LIBS"
219 ], [
220 AC_MSG_WARN([Could not find ESD, disabling ESD support.])
221 WANT_ESD=no
222 ])
223 fi
224
225 dnl We use 64-bit file size support if possible.
226 AC_SYS_LARGEFILE
227
228 dnl Checks for header files.
229 AC_HEADER_STDC
230 AC_CHECK_HEADERS(unistd.h fcntl.h sys/time.h sys/mman.h mach/mach.h)
231 AC_CHECK_HEADERS(readline.h history.h readline/readline.h readline/history.h)
232
233 dnl Checks for typedefs, structures, and compiler characteristics.
234 AC_C_BIGENDIAN
235 AC_C_CONST
236 AC_C_INLINE
237 AC_CHECK_SIZEOF(short, 2)
238 AC_CHECK_SIZEOF(int, 4)
239 AC_CHECK_SIZEOF(long, 4)
240 AC_CHECK_SIZEOF(long long, 8)
241 AC_CHECK_SIZEOF(float, 4)
242 AC_CHECK_SIZEOF(double, 8)
243 AC_CHECK_SIZEOF(long double, 12)
244 AC_CHECK_SIZEOF(void *, 4)
245 AC_TYPE_OFF_T
246 AC_CHECK_TYPE(loff_t, off_t)
247 AC_CHECK_TYPE(caddr_t, [char *])
248 AC_TYPE_SIZE_T
249 AC_TYPE_SIGNAL
250 AC_HEADER_TIME
251 AC_STRUCT_TM
252
253 dnl Check whether sys/socket.h defines type socklen_t.
254 dnl (extracted from ac-archive/Miscellaneous)
255 AC_CACHE_CHECK([for socklen_t],
256 ac_cv_type_socklen_t, [
257 AC_TRY_COMPILE([
258 #include <sys/types.h>
259 #include <sys/socket.h>
260 ], [socklen_t len = 42; return 0;],
261 ac_cv_type_socklen_t=yes, ac_cv_type_socklen_t=no,
262 dnl When cross-compiling, do not assume anything.
263 ac_cv_type_socklen_t="guessing no"
264 )
265 ])
266 if [[ "x$ac_cv_type_socklen_t" != "xyes" ]]; then
267 AC_DEFINE(socklen_t, int, [Define to 'int' if <sys/types.h> doesn't define.])
268 fi
269
270 dnl Checks for library functions.
271 AC_CHECK_FUNCS(strdup cfmakeraw)
272 AC_CHECK_FUNCS(clock_gettime timer_create)
273 AC_CHECK_FUNCS(sigaction signal)
274 AC_CHECK_FUNCS(mmap mprotect munmap)
275 AC_CHECK_FUNCS(vm_allocate vm_deallocate vm_protect)
276
277 dnl Darwin seems to define mach_task_self() instead of task_self().
278 AC_CHECK_FUNCS(mach_task_self task_self)
279
280 dnl Check for headers and functions related to pty support (sshpty.c)
281 dnl From openssh-3.2.2p1 configure.ac
282
283 AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h)
284 AC_CHECK_FUNCS(_getpty vhangup strlcpy)
285
286 case "$host" in
287 *-*-hpux10.26)
288 disable_ptmx_check=yes
289 ;;
290 *-*-linux*)
291 no_dev_ptmx=1
292 ;;
293 mips-sony-bsd|mips-sony-newsos4)
294 AC_DEFINE(HAVE_NEWS4, 1, [Define if you are on NEWS-OS (additions from openssh-3.2.2p1, for sshpty.c).])
295 ;;
296 *-*-sco3.2v4*)
297 no_dev_ptmx=1
298 ;;
299 *-*-sco3.2v5*)
300 no_dev_ptmx=1
301 ;;
302 esac
303
304 if test -z "$no_dev_ptmx" ; then
305 if test "x$disable_ptmx_check" != "xyes" ; then
306 AC_CHECK_FILE([/dev/ptmx],
307 [
308 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1, [Define if you have /dev/ptmx.])
309 have_dev_ptmx=1
310 ]
311 )
312 fi
313 fi
314 AC_CHECK_FILE([/dev/ptc],
315 [
316 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1, [Define if you have /dev/ptc.])
317 have_dev_ptc=1
318 ]
319 )
320
321 dnl (end of code from openssh-3.2.2p1 configure.ac)
322
323
324 dnl Select system-dependant source files.
325 SERIALSRC=serial_unix.cpp
326 ETHERSRC=../dummy/ether_dummy.cpp
327 SCSISRC=../dummy/scsi_dummy.cpp
328 AUDIOSRC=../dummy/audio_dummy.cpp
329 EXTRASYSSRCS=
330 CAN_NATIVE_M68K=no
331 case "$target_os" in
332 linux*)
333 ETHERSRC=ether_unix.cpp
334 AUDIOSRC=audio_oss_esd.cpp
335 SCSISRC=Linux/scsi_linux.cpp
336 ;;
337 freebsd*)
338 ETHERSRC=ether_unix.cpp
339 AUDIOSRC=audio_oss_esd.cpp
340 DEFINES="$DEFINES -DBSD_COMP"
341 CXXFLAGS="$CXXFLAGS -fpermissive"
342 dnl Check for the CAM library
343 AC_CHECK_LIB(cam, cam_open_btl, HAVE_LIBCAM=yes, HAVE_LIBCAM=no)
344 if [[ "x$HAVE_LIBCAM" = "xno" ]]; then
345 AC_MSG_WARN([Cannot find libcam for SCSI management, disabling SCSI support.])
346 else
347 dnl Check for the sys kernel includes
348 AC_CHECK_HEADER(camlib.h)
349 if [[ "x$ac_cv_header_camlib_h" = "xno" ]]; then
350 dnl In this case I should fix this thing including a "patch"
351 dnl to access directly to the functions in the kernel :) --Orlando
352 AC_MSG_WARN([Cannot find includes for CAM library, disabling SCSI support.])
353 else
354 SCSISRC=FreeBSD/scsi_freebsd.cpp
355 LIBS="$LIBS -lcam"
356 DEFINES="$DEFINES -DCAM"
357 fi
358 fi
359 ;;
360 netbsd*)
361 CAN_NATIVE_M68K=yes
362 ;;
363 solaris*)
364 AUDIOSRC=Solaris/audio_solaris.cpp
365 DEFINES="$DEFINES -DBSD_COMP -D_POSIX_PTHREAD_SEMANTICS"
366 ;;
367 irix*)
368 ETHERSRC=ether_unix.cpp
369 AUDIOSRC=Irix/audio_irix.cpp
370 EXTRASYSSRCS=Irix/unaligned.c
371 dnl IRIX headers work fine, but somehow don't define or use "STDC_HEADERS"
372 DEFINES="$DEFINES -DCRTSCTS=CNEW_RTSCTS -DB230400=B115200 -DSTDC_HEADERS"
373 LIBS="$LIBS -laudio"
374 WANT_ESD=no
375
376 dnl Check if our compiler supports -IPA (MIPSPro)
377 HAVE_IPA=no
378 ocflags="$CFLAGS"
379 CFLAGS=`echo "$CFLAGS -IPA" | sed -e "s/-g//g"`
380 AC_MSG_CHECKING(if "-IPA" works)
381 dnl Do a test compile of an empty function
382 AC_TRY_COMPILE(,, [AC_MSG_RESULT(yes); HAVE_IPA=yes], AC_MSG_RESULT(no))
383 CFLAGS="$ocflags"
384
385 ;;
386 esac
387
388 dnl Use 68k CPU natively?
389 WANT_NATIVE_M68K=no
390 if [[ "x$HAVE_M68K" = "xyes" -a "x$CAN_NATIVE_M68K" = "xyes" ]]; then
391 AC_DEFINE(ENABLE_NATIVE_M68K, 1, [Define if using native 68k mode.])
392 WANT_NATIVE_M68K=yes
393 fi
394
395 if [[ "x$HAVE_PTHREADS" = "xno" ]]; then
396 dnl Serial, ethernet and audio support needs pthreads
397 AC_MSG_WARN([You don't have pthreads, disabling serial, ethernet and audio support.])
398 SERIALSRC=../dummy/serial_dummy.cpp
399 ETHERSRC=../dummy/ether_dummy.cpp
400 AUDIOSRC=../dummy/audio_dummy.cpp
401 fi
402 SYSSRCS="$SERIALSRC $ETHERSRC $SCSISRC $AUDIOSRC $SEMSRC $UISRCS $MONSRCS $EXTRASYSSRCS"
403
404 dnl Define a macro that translates a yesno-variable into a C macro definition
405 dnl to be put into the config.h file
406 dnl $1 -- the macro to define
407 dnl $2 -- the value to translate
408 dnl $3 -- template name
409 AC_DEFUN(AC_TRANSLATE_DEFINE, [
410 if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
411 AC_DEFINE($1, 1, $3)
412 fi
413 ])
414
415 dnl Various checks if the system supports vm_allocate() and the like functions.
416 have_mach_vm=no
417 if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \
418 "x$ac_cv_func_vm_protect" = "xyes" ]]; then
419 have_mach_vm=yes
420 fi
421 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
422 [Define if your system has a working vm_allocate()-based memory allocator.])
423
424 dnl Check that vm_allocate(), vm_protect() work
425 if [[ "x$have_mach_vm" = "xyes" ]]; then
426
427 AC_CACHE_CHECK([whether vm_protect works],
428 ac_cv_vm_protect_works, [
429 AC_LANG_SAVE
430 AC_LANG_CPLUSPLUS
431 ac_cv_vm_protect_works=yes
432 dnl First the tests that should segfault
433 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
434 AC_TRY_RUN([
435 #define CONFIGURE_TEST_VM_MAP
436 #define TEST_VM_PROT_$test_def
437 #include "vm_alloc.cpp"
438 ], ac_cv_vm_protect_works=no, rm -f core,
439 dnl When cross-compiling, do not assume anything
440 ac_cv_vm_protect_works="guessing no"
441 )
442 done
443 AC_TRY_RUN([
444 #define CONFIGURE_TEST_VM_MAP
445 #define TEST_VM_PROT_RDWR_WRITE
446 #include "vm_alloc.cpp"
447 ], , ac_cv_vm_protect_works=no,
448 dnl When cross-compiling, do not assume anything
449 ac_cv_vm_protect_works="guessing no"
450 )
451 AC_LANG_RESTORE
452 ]
453 )
454
455 dnl Remove support for vm_allocate() if vm_protect() does not work
456 if [[ "x$have_mach_vm" = "xyes" ]]; then
457 case $ac_cv_vm_protect_works in
458 *yes) have_mach_vm=yes;;
459 *no) have_mach_vm=no;;
460 esac
461 fi
462 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
463 [Define if your system has a working vm_allocate()-based memory allocator.])
464
465 fi dnl HAVE_MACH_VM
466
467 dnl Various checks if the system supports mmap() and the like functions.
468 dnl ... and Mach memory allocators are not supported
469 have_mmap_vm=no
470 if [[ "x$ac_cv_func_mmap" = "xyes" -a "x$ac_cv_func_munmap" = "xyes" -a \
471 "x$ac_cv_func_mprotect" = "xyes" ]]; then
472 if [[ "x$have_mach_vm" = "xno" ]]; then
473 have_mmap_vm=yes
474 fi
475 fi
476 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
477 [Define if your system has a working mmap()-based memory allocator.])
478
479 dnl Check that mmap() and associated functions work.
480 if [[ "x$have_mmap_vm" = "xyes" ]]; then
481
482 dnl Check if we have a working anonymous mmap()
483 AC_CACHE_CHECK([whether mmap supports MAP_ANON],
484 ac_cv_mmap_anon, [
485 AC_LANG_SAVE
486 AC_LANG_CPLUSPLUS
487 AC_TRY_RUN([
488 #define HAVE_MMAP_ANON
489 #define CONFIGURE_TEST_VM_MAP
490 #define TEST_VM_MMAP_ANON
491 #include "vm_alloc.cpp"
492 ], ac_cv_mmap_anon=yes, ac_cv_mmap_anon=no,
493 dnl When cross-compiling, do not assume anything.
494 ac_cv_mmap_anon="guessing no"
495 )
496 AC_LANG_RESTORE
497 ]
498 )
499 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANON, "$ac_cv_mmap_anon",
500 [Define if <sys/mman.h> defines MAP_ANON and mmap()'ing with MAP_ANON works.])
501
502 AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
503 ac_cv_mmap_anonymous, [
504 AC_LANG_SAVE
505 AC_LANG_CPLUSPLUS
506 AC_TRY_RUN([
507 #define HAVE_MMAP_ANONYMOUS
508 #define CONFIGURE_TEST_VM_MAP
509 #define TEST_VM_MMAP_ANON
510 #include "vm_alloc.cpp"
511 ], ac_cv_mmap_anonymous=yes, ac_cv_mmap_anonymous=no,
512 dnl When cross-compiling, do not assume anything.
513 ac_cv_mmap_anonymous="guessing no"
514 )
515 AC_LANG_RESTORE
516 ]
517 )
518 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANONYMOUS, "$ac_cv_mmap_anonymous",
519 [Define if <sys/mman.h> defines MAP_ANONYMOUS and mmap()'ing with MAP_ANONYMOUS works.])
520
521 AC_CACHE_CHECK([whether mprotect works],
522 ac_cv_mprotect_works, [
523 AC_LANG_SAVE
524 AC_LANG_CPLUSPLUS
525 ac_cv_mprotect_works=yes
526 dnl First the tests that should segfault
527 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
528 AC_TRY_RUN([
529 #define CONFIGURE_TEST_VM_MAP
530 #define TEST_VM_PROT_$test_def
531 #include "vm_alloc.cpp"
532 ], ac_cv_mprotect_works=no, rm -f core,
533 dnl When cross-compiling, do not assume anything
534 ac_cv_mprotect_works="guessing no"
535 )
536 done
537 AC_TRY_RUN([
538 #define CONFIGURE_TEST_VM_MAP
539 #define TEST_VM_PROT_RDWR_WRITE
540 #include "vm_alloc.cpp"
541 ], , ac_cv_mprotect_works=no,
542 dnl When cross-compiling, do not assume anything
543 ac_cv_mprotect_works="guessing no"
544 )
545 AC_LANG_RESTORE
546 ]
547 )
548
549 dnl Remove support for mmap() if mprotect() does not work
550 if [[ "x$have_mmap_vm" = "xyes" ]]; then
551 case $ac_cv_mprotect_works in
552 *yes) have_mmap_vm=yes;;
553 *no) have_mmap_vm=no;;
554 esac
555 fi
556 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
557 [Define if your system has a working mmap()-based memory allocator.])
558
559 fi dnl HAVE_MMAP_VM
560
561 dnl Check if we can modify the __PAGEZERO segment for use as Low Memory
562 AC_CACHE_CHECK([whether __PAGEZERO can be Low Memory area 0x0000-0x2000],
563 ac_cv_pagezero_hack, [
564 ac_cv_pagezero_hack=no
565 if AC_TRY_COMMAND([Darwin/testlmem.sh 0x2000]); then
566 ac_cv_pagezero_hack=yes
567 dnl might as well skip the test for mmap-able low memory
568 ac_cv_can_map_lm=no
569 fi
570 ])
571 AC_TRANSLATE_DEFINE(PAGEZERO_HACK, "$ac_cv_pagezero_hack",
572 [Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this system.])
573
574 dnl Check if we can mmap 0x2000 bytes from 0x0000
575 AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x2000],
576 ac_cv_can_map_lm, [
577 AC_LANG_SAVE
578 AC_LANG_CPLUSPLUS
579 AC_TRY_RUN([
580 #include "vm_alloc.cpp"
581 int main(void) { /* returns 0 if we could map the lowmem globals */
582 volatile char * lm = 0;
583 if (vm_init() < 0) exit(1);
584 if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
585 lm[0] = 'z';
586 if (vm_release((char *)lm, 0x2000) < 0) exit(1);
587 vm_exit(); exit(0);
588 }
589 ], ac_cv_can_map_lm=yes, ac_cv_can_map_lm=no,
590 dnl When cross-compiling, do not assume anything.
591 ac_cv_can_map_lm="guessing no"
592 )
593 AC_LANG_RESTORE
594 ]
595 )
596
597 dnl Check signal handlers need to be reinstalled
598 AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
599 ac_cv_signal_need_reinstall, [
600 AC_LANG_SAVE
601 AC_LANG_CPLUSPLUS
602 AC_TRY_RUN([
603 #include <stdlib.h>
604 #ifdef HAVE_UNISTD_H
605 #include <unistd.h>
606 #endif
607 #include <signal.h>
608 static int handled_signal = 0;
609 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
610 int main(void) { /* returns 0 if signals need not to be reinstalled */
611 signal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
612 exit(handled_signal == 2);
613 }
614 ], ac_cv_signal_need_reinstall=yes, ac_cv_signal_need_reinstall=no,
615 dnl When cross-compiling, do not assume anything.
616 ac_cv_signal_need_reinstall="guessing yes"
617 )
618 AC_LANG_RESTORE
619 ]
620 )
621 AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
622 [Define if your system requires signals to be reinstalled.])
623
624 dnl Check if sigaction handlers need to be reinstalled
625 AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
626 ac_cv_sigaction_need_reinstall, [
627 AC_LANG_SAVE
628 AC_LANG_CPLUSPLUS
629 AC_TRY_RUN([
630 #include <stdlib.h>
631 #ifdef HAVE_UNISTD_H
632 #include <unistd.h>
633 #endif
634 #include <signal.h>
635 static int handled_signal = 0;
636 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
637 typedef RETSIGTYPE (*signal_handler)(int);
638 static signal_handler mysignal(int sig, signal_handler handler) {
639 struct sigaction old_sa;
640 struct sigaction new_sa;
641 new_sa.sa_handler = handler;
642 return ((sigaction(sig,&new_sa,&old_sa) < 0) ? SIG_IGN : old_sa.sa_handler);
643 }
644 int main(void) { /* returns 0 if signals need not to be reinstalled */
645 mysignal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
646 exit(handled_signal == 2);
647 }
648 ], ac_cv_sigaction_need_reinstall=yes, ac_cv_sigaction_need_reinstall=no,
649 dnl When cross-compiling, do not assume anything.
650 ac_cv_sigaction_need_reinstall="guessing yes"
651 )
652 AC_LANG_RESTORE
653 ]
654 )
655 AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
656 [Define if your system requires sigactions to be reinstalled.])
657
658 dnl Check if Mach exceptions supported.
659 AC_CACHE_CHECK([whether your system supports Mach exceptions],
660 ac_cv_have_mach_exceptions, [
661 AC_LANG_SAVE
662 AC_LANG_CPLUSPLUS
663 AC_TRY_RUN([
664 #define HAVE_MACH_EXCEPTIONS 1
665 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
666 #include "vm_alloc.cpp"
667 #include "sigsegv.cpp"
668 ], [
669 sigsegv_recovery=mach
670 ac_cv_have_mach_exceptions=yes
671 ],
672 ac_cv_have_mach_exceptions=no,
673 dnl When cross-compiling, do not assume anything.
674 ac_cv_have_mach_exceptions=no
675 )
676 AC_LANG_RESTORE
677 ]
678 )
679 AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions",
680 [Define if your system supports Mach exceptions.])
681
682 dnl Otherwise, check if extended signals are supported.
683 if [[ -z "$sigsegv_recovery" ]]; then
684 AC_CACHE_CHECK([whether your system supports extended signal handlers],
685 ac_cv_have_extended_signals, [
686 AC_LANG_SAVE
687 AC_LANG_CPLUSPLUS
688 AC_TRY_RUN([
689 #define HAVE_SIGINFO_T 1
690 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
691 #include "vm_alloc.cpp"
692 #include "sigsegv.cpp"
693 ], [
694 sigsegv_recovery=siginfo
695 ac_cv_have_extended_signals=yes
696 ],
697 ac_cv_have_extended_signals=no,
698 dnl When cross-compiling, do not assume anything.
699 ac_cv_have_extended_signals=no
700 )
701 AC_LANG_RESTORE
702 ]
703 )
704 AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals",
705 [Define if your system support extended signals.])
706 fi
707
708 dnl Otherwise, check for subterfuges.
709 if [[ -z "$sigsegv_recovery" ]]; then
710 AC_CACHE_CHECK([whether we then have a subterfuge for your system],
711 ac_cv_have_sigcontext_hack, [
712 AC_LANG_SAVE
713 AC_LANG_CPLUSPLUS
714 AC_TRY_RUN([
715 #define HAVE_SIGCONTEXT_SUBTERFUGE 1
716 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
717 #include "vm_alloc.cpp"
718 #include "sigsegv.cpp"
719 ], [
720 sigsegv_recovery=sigcontext
721 ac_cv_have_sigcontext_hack=yes
722 ],
723 ac_cv_have_sigcontext_hack=no,
724 dnl When cross-compiling, do not assume anything.
725 ac_cv_have_sigcontext_hack=no
726 )
727 AC_LANG_RESTORE
728 ])
729 AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack",
730 [Define if we know a hack to replace siginfo_t->si_addr member.])
731 fi
732
733 dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
734 AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
735 ac_cv_have_skip_instruction, [
736 AC_LANG_SAVE
737 AC_LANG_CPLUSPLUS
738 AC_TRY_RUN([
739 #define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
740 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
741 #include "vm_alloc.cpp"
742 #include "sigsegv.cpp"
743 ], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
744 dnl When cross-compiling, do not assume anything.
745 ac_cv_have_skip_instruction=no
746 )
747 AC_LANG_RESTORE
748 ]
749 )
750 AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
751 [Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
752
753 dnl Can we do Video on SEGV Signals ?
754 CAN_VOSF=no
755 if [[ -n "$sigsegv_recovery" ]]; then
756 CAN_VOSF=yes
757 fi
758
759 dnl A dummy program that returns always true
760 BLESS=/bin/true
761
762 dnl Determine the addressing mode to use
763 if [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then
764 ADDRESSING_MODE="real"
765 else
766 ADDRESSING_MODE=""
767 AC_MSG_CHECKING([for the addressing mode to use])
768 for am in $ADDRESSING_TEST_ORDER; do
769 case $am in
770 real)
771 dnl Requires ability to mmap() Low Memory globals
772 if [[ "x$ac_cv_can_map_lm$ac_cv_pagezero_hack" = "xnono" ]]; then
773 continue
774 fi
775 dnl Requires VOSF screen updates
776 if [[ "x$CAN_VOSF" = "xno" ]]; then
777 continue
778 fi
779 dnl Real addressing will probably work.
780 ADDRESSING_MODE="real"
781 WANT_VOSF=yes dnl we can use VOSF and we need it actually
782 DEFINES="$DEFINES -DREAL_ADDRESSING"
783 if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then
784 BLESS=Darwin/lowmem
785 LDFLAGS="$LDFLAGS -pagezero_size 0x2000"
786 fi
787 break
788 ;;
789 direct)
790 dnl Requires VOSF screen updates
791 if [[ "x$CAN_VOSF" = "xyes" ]]; then
792 ADDRESSING_MODE="direct"
793 WANT_VOSF=yes dnl we can use VOSF and we need it actually
794 DEFINES="$DEFINES -DDIRECT_ADDRESSING"
795 break
796 fi
797 ;;
798 banks)
799 dnl Default addressing mode
800 ADDRESSING_MODE="memory banks"
801 break
802 ;;
803 *)
804 AC_MSG_ERROR([Internal configure.in script error for $am addressing mode])
805 esac
806 done
807 AC_MSG_RESULT($ADDRESSING_MODE)
808 if [[ "x$ADDRESSING_MODE" = "x" ]]; then
809 AC_MSG_WARN([Sorry, no suitable addressing mode in $ADDRESSING_TEST_ORDER])
810 ADDRESSING_MODE="memory banks"
811 fi
812 fi
813
814 dnl Banked Memory Addressing mode is not supported by the JIT compiler
815 if [[ "x$WANT_JIT" = "xyes" -a "x$ADDRESSING_MODE" = "xmemory banks" ]]; then
816 AC_MSG_ERROR([Sorry, the JIT Compiler requires Direct Addressing, at least])
817 fi
818
819 dnl Enable VOSF screen updates with this feature is requested and feasible
820 if [[ "x$WANT_VOSF" = "xyes" -a "x$CAN_VOSF" = "xyes" ]]; then
821 AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
822 else
823 WANT_VOSF=no
824 fi
825
826 dnl Check for GAS.
827 HAVE_GAS=no
828 AC_MSG_CHECKING(for GAS .p2align feature)
829 cat >conftest.S << EOF
830 .text
831 .p2align 5
832 EOF
833 if $CC conftest.S -c -o conftest.o >/dev/null 2>&1 ; then HAVE_GAS=yes; fi
834 AC_MSG_RESULT($HAVE_GAS)
835
836 dnl Check for GCC 2.7 or higher.
837 HAVE_GCC27=no
838 AC_MSG_CHECKING(for GCC 2.7 or higher)
839 AC_EGREP_CPP(xyes,
840 [#if __GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5
841 xyes
842 #endif
843 ], [AC_MSG_RESULT(yes); HAVE_GCC27=yes], AC_MSG_RESULT(no))
844
845 dnl Check for GCC 3.0 or higher.
846 HAVE_GCC30=no
847 AC_MSG_CHECKING(for GCC 3.0 or higher)
848 AC_EGREP_CPP(xyes,
849 [#if __GNUC__ >= 3
850 xyes
851 #endif
852 ], [AC_MSG_RESULT(yes); HAVE_GCC30=yes], AC_MSG_RESULT(no))
853
854 dnl Set "-fomit-frame-pointer" on i386 GCC 2.7 or higher.
855 dnl Also set "-fno-exceptions" for C++ because exception handling requires
856 dnl the frame pointer.
857 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
858 CFLAGS="$CFLAGS -fomit-frame-pointer"
859 CXXFLAGS="$CXXFLAGS -fomit-frame-pointer -fno-exceptions"
860 fi
861
862 dnl (gb) Do not merge constants since it breaks fpu/fpu_x86.cpp.
863 dnl As of 2001/08/02, this affects the following compilers:
864 dnl Official: probably gcc-3.1 (mainline CVS)
865 dnl Mandrake: gcc-2.96 >= 0.59mdk, gcc-3.0.1 >= 0.1mdk
866 dnl Red Hat : gcc-2.96 >= 89, gcc-3.0 >= 1
867 if [[ "x$HAVE_GCC27" = "xyes" ]]; then
868 SAVED_CXXFLAGS="$CXXFLAGS"
869 CXXFLAGS="$CXXFLAGS -fno-merge-constants"
870 AC_CACHE_CHECK([whether GCC supports constants merging], ac_cv_gcc_constants_merging, [
871 AC_LANG_SAVE
872 AC_LANG_CPLUSPLUS
873 AC_TRY_COMPILE([],[],[ac_cv_gcc_constants_merging=yes],[ac_cv_gcc_constants_merging=no])
874 AC_LANG_RESTORE
875 ])
876 if [[ "x$ac_cv_gcc_constants_merging" != "xyes" ]]; then
877 CXXFLAGS="$SAVED_CXXFLAGS"
878 fi
879 fi
880
881 dnl Select appropriate CPU source and REGPARAM define.
882 ASM_OPTIMIZATIONS=none
883 CPUSRCS="cpuemu1.cpp cpuemu2.cpp cpuemu3.cpp cpuemu4.cpp cpuemu5.cpp cpuemu6.cpp cpuemu7.cpp cpuemu8.cpp"
884
885 dnl (gb) JITSRCS will be emptied later if the JIT is not available
886 dnl Other platforms should define their own set of noflags file variants
887 CAN_JIT=no
888 JITSRCS="compemu1.cpp compemu2.cpp compemu3.cpp compemu4.cpp compemu5.cpp compemu6.cpp compemu7.cpp compemu8.cpp"
889
890 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
891 dnl i386 CPU
892 DEFINES="$DEFINES -DUNALIGNED_PROFITABLE -DREGPARAM=\"__attribute__((regparm(3)))\""
893 if [[ "x$HAVE_GAS" = "xyes" ]]; then
894 ASM_OPTIMIZATIONS=i386
895 DEFINES="$DEFINES -DX86_ASSEMBLY -DOPTIMIZED_FLAGS -DSAHF_SETO_PROFITABLE"
896 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"
897 CAN_JIT=yes
898 fi
899 elif [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_X86_64" = "xyes" ]]; then
900 dnl x86-64 CPU
901 DEFINES="$DEFINES -DUNALIGNED_PROFITABLE"
902 if [[ "x$HAVE_GAS" = "xyes" ]]; then
903 ASM_OPTIMIZATIONS="x86-64"
904 DEFINES="$DEFINES -DX86_64_ASSEMBLY -DOPTIMIZED_FLAGS"
905 fi
906 elif [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_SPARC" = "xyes" -a "x$HAVE_GAS" = "xyes" ]]; then
907 dnl SPARC CPU
908 case "$target_os" in
909 solaris*)
910 AC_MSG_CHECKING(SPARC CPU architecture)
911 SPARC_TYPE=`Solaris/which_sparc`
912 AC_MSG_RESULT($SPARC_TYPE)
913 case "$SPARC_TYPE" in
914 SPARC_V8)
915 ASM_OPTIMIZATIONS="SPARC V8 architecture"
916 DEFINES="$DEFINES -DSPARC_V8_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
917 CFLAGS="$CFLAGS -Wa,-Av8"
918 CXXFLAGS="$CXXFLAGS -Wa,-Av8"
919 ;;
920 SPARC_V9)
921 ASM_OPTIMIZATIONS="SPARC V9 architecture"
922 DEFINES="$DEFINES -DSPARC_V9_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
923 CFLAGS="$CFLAGS -Wa,-Av9"
924 CXXFLAGS="$CXXFLAGS -Wa,-Av9"
925 ;;
926 esac
927 ;;
928 esac
929 elif [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then
930 dnl Native m68k, no emulation
931 CPUINCLUDES="-I../native_cpu"
932 CPUSRCS="asm_support.s"
933 fi
934
935 dnl Enable JIT compiler, if possible.
936 if [[ "x$WANT_JIT" = "xyes" -a "x$CAN_JIT" ]]; then
937 JITSRCS="$JITSRCS ../uae_cpu/compiler/compemu_support.cpp ../uae_cpu/compiler/compemu_fpp.cpp compstbl.o cpustbl_nf.o"
938 DEFINES="$DEFINES -DUSE_JIT -DUSE_JIT_FPU"
939
940 if [[ "x$WANT_JIT_DEBUG" = "xyes" ]]; then
941 if [[ "x$WANT_MON" = "xyes" ]]; then
942 DEFINES="$DEFINES -DJIT_DEBUG=1"
943 else
944 AC_MSG_WARN([cxmon not found, ignoring --enable-jit-debug])
945 WANT_JIT_DEBUG=no
946 fi
947 fi
948
949 dnl IEEE core is the only FPU emulator to use with the JIT compiler
950 case $FPE_CORE_TEST_ORDER in
951 ieee*) ;;
952 *) AC_MSG_WARN([Forcing use of the IEEE FPU core, as the JIT compiler supports only this one.]) ;;
953 esac
954 FPE_CORE_TEST_ORDER="ieee"
955 else
956 WANT_JIT=no
957 WANT_JIT_DEBUG=no
958 JITSRCS=""
959 fi
960
961 dnl Utility macro used by next two tests.
962 dnl AC_EXAMINE_OBJECT(C source code,
963 dnl commands examining object file,
964 dnl [commands to run if compile failed]):
965 dnl
966 dnl Compile the source code to an object file; then convert it into a
967 dnl printable representation. All unprintable characters and
968 dnl asterisks (*) are replaced by dots (.). All white space is
969 dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the
970 dnl output, but runs of newlines are compressed to a single newline.
971 dnl Finally, line breaks are forcibly inserted so that no line is
972 dnl longer than 80 columns and the file ends with a newline. The
973 dnl result of all this processing is in the file conftest.dmp, which
974 dnl may be examined by the commands in the second argument.
975 dnl
976 AC_DEFUN([gcc_AC_EXAMINE_OBJECT],
977 [AC_LANG_SAVE
978 AC_LANG_C
979 dnl Next bit cribbed from AC_TRY_COMPILE.
980 cat > conftest.$ac_ext <<EOF
981 [#line __oline__ "configure"
982 #include "confdefs.h"
983 $1
984 ]EOF
985 if AC_TRY_EVAL(ac_compile); then
986 od -c conftest.o |
987 sed ['s/^[0-7]*[ ]*/ /
988 s/\*/./g
989 s/ \\n/*/g
990 s/ [0-9][0-9][0-9]/./g
991 s/ \\[^ ]/./g'] |
992 tr -d '
993 ' | tr -s '*' '
994 ' | fold | sed '$a\
995 ' > conftest.dmp
996 $2
997 ifelse($3, , , else
998 $3
999 )dnl
1000 fi
1001 rm -rf conftest*
1002 AC_LANG_RESTORE])
1003
1004 dnl Floating point format probe.
1005 dnl The basic concept is the same as the above: grep the object
1006 dnl file for an interesting string. We have to watch out for
1007 dnl rounding changing the values in the object, however; this is
1008 dnl handled by ignoring the least significant byte of the float.
1009 dnl
1010 dnl Does not know about VAX G-float or C4x idiosyncratic format.
1011 dnl It does know about PDP-10 idiosyncratic format, but this is
1012 dnl not presently supported by GCC. S/390 "binary floating point"
1013 dnl is in fact IEEE (but maybe we should have that in EBCDIC as well
1014 dnl as ASCII?)
1015 dnl
1016 AC_DEFUN([gcc_AC_C_FLOAT_FORMAT],
1017 [AC_CACHE_CHECK(floating point format, ac_cv_c_float_format,
1018 [gcc_AC_EXAMINE_OBJECT(
1019 [/* This will not work unless sizeof(double) == 8. */
1020 extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
1021
1022 /* This structure must have no internal padding. */
1023 struct possibility {
1024 char prefix[8];
1025 double candidate;
1026 char postfix[8];
1027 };
1028
1029 #define C(cand) { "\nformat:", cand, ":tamrof\n" }
1030 struct possibility table [] =
1031 {
1032 C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
1033 C( 3.53802595280598432000e+18), /* D__float - VAX */
1034 C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
1035 C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
1036 C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
1037 };],
1038 [if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1039 ac_cv_c_float_format='IEEE (big-endian)'
1040 elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
1041 ac_cv_c_float_format='IEEE (big-endian)'
1042 elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
1043 ac_cv_c_float_format='IEEE (little-endian)'
1044 elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
1045 ac_cv_c_float_format='IEEE (little-endian)'
1046 elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
1047 ac_cv_c_float_format='VAX D-float'
1048 elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
1049 ac_cv_c_float_format='PDP-10'
1050 elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1051 ac_cv_c_float_format='IBM 370 hex'
1052 else
1053 AC_MSG_ERROR(Unknown floating point format)
1054 fi],
1055 [AC_MSG_ERROR(compile failed)])
1056 ])
1057 # IEEE is the default format. If the float endianness isn't the same
1058 # as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
1059 # (which is a tristate: yes, no, default). This is only an issue with
1060 # IEEE; the other formats are only supported by a few machines each,
1061 # all with the same endianness.
1062 format=IEEE_FLOAT_FORMAT
1063 fbigend=
1064 case $ac_cv_c_float_format in
1065 'IEEE (big-endian)' )
1066 if test $ac_cv_c_bigendian = no; then
1067 fbigend=1
1068 fi
1069 ;;
1070 'IEEE (little-endian)' )
1071 if test $ac_cv_c_bigendian = yes; then
1072 fbigend=0
1073 fi
1074 ;;
1075 'VAX D-float' )
1076 format=VAX_FLOAT_FORMAT
1077 ;;
1078 'PDP-10' )
1079 format=PDP10_FLOAT_FORMAT
1080 ;;
1081 'IBM 370 hex' )
1082 format=IBM_FLOAT_FORMAT
1083 ;;
1084 esac
1085 AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format,
1086 [Define to the floating point format of the host machine.])
1087 if test -n "$fbigend"; then
1088 AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend,
1089 [Define to 1 if the host machine stores floating point numbers in
1090 memory with the word containing the sign bit at the lowest address,
1091 or to 0 if it does it the other way around.
1092
1093 This macro should not be defined if the ordering is the same as for
1094 multi-word integers.])
1095 fi
1096 ])
1097
1098 dnl Select appropriate FPU source.
1099 gcc_AC_C_FLOAT_FORMAT
1100 AC_CHECK_HEADERS(ieee754.h ieeefp.h floatingpoint.h nan.h)
1101
1102 for fpe in $FPE_CORE_TEST_ORDER; do
1103 case $fpe in
1104 ieee)
1105 case $ac_cv_c_float_format in
1106 IEEE*)
1107 FPE_CORE="IEEE fpu core"
1108 DEFINES="$DEFINES -DFPU_IEEE"
1109 FPUSRCS="../uae_cpu/fpu/fpu_ieee.cpp"
1110 dnl Math functions not mandated by C99 standard
1111 AC_CHECK_FUNCS(isnanl isinfl)
1112 dnl Math functions required by C99 standard, but probably not
1113 dnl implemented everywhere. In that case, we fall back to the
1114 dnl regular variant for doubles.
1115 AC_CHECK_FUNCS(logl log10l expl powl fabsl sqrtl)
1116 AC_CHECK_FUNCS(sinl cosl tanl sinhl coshl tanhl)
1117 AC_CHECK_FUNCS(asinl acosl atanl asinhl acoshl atanhl)
1118 AC_CHECK_FUNCS(floorl ceill)
1119 break
1120 ;;
1121 esac
1122 ;;
1123 x86)
1124 if [[ ":$HAVE_GCC27:$HAVE_I386:$HAVE_GAS:" = ":yes:yes:yes:" ]]; then
1125 FPE_CORE="i387 fpu core"
1126 DEFINES="$DEFINES -DFPU_X86"
1127 FPUSRCS="../uae_cpu/fpu/fpu_x86.cpp"
1128 break
1129 fi
1130 ;;
1131 uae)
1132 FPE_CORE="uae fpu core"
1133 DEFINES="$DEFINES -DFPU_UAE"
1134 FPUSRCS="../uae_cpu/fpu/fpu_uae.cpp"
1135 break
1136 ;;
1137 *)
1138 AC_MSG_ERROR([Internal configure.in script error for $fpe fpu core])
1139 ;;
1140 esac
1141 done
1142 if [[ "x$FPE_CORE" = "x" ]]; then
1143 AC_MSG_ERROR([Sorry, no suitable FPU core found in $FPE_CORE_TEST_ORDER])
1144 fi
1145
1146 dnl Check for certain math functions
1147 AC_CHECK_FUNCS(atanh)
1148 AC_CHECK_FUNCS(isnan isinf finite isnormal signbit)
1149
1150 dnl UAE CPU sources for all non-m68k-native architectures.
1151 if [[ "x$WANT_NATIVE_M68K" = "xno" ]]; then
1152 CPUINCLUDES="-I../uae_cpu"
1153 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"
1154 fi
1155
1156 dnl Remove the "-g" option if set for GCC.
1157 if [[ "x$HAVE_GCC27" = "xyes" ]]; then
1158 CFLAGS=`echo $CFLAGS | sed -e 's/-g//g'`
1159 CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-g//g'`
1160 fi
1161
1162 dnl Or if we have -IPA (MIPSPro compilers)
1163 if [[ "x$HAVE_IPA" = "xyes" ]]; then
1164 CFLAGS="`echo $CFLAGS | sed -e 's/-g//g'` -O3 -OPT:Olimit=0 -IPA"
1165 CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-g//g'` -O3 -OPT:Olimit=0 -IPA"
1166 CXXFLAGS="-LANG:std $CXXFLAGS"
1167 LDFLAGS="$LDFLAGS -O3 -OPT:Olimit=0 -IPA"
1168 fi
1169
1170 dnl Generate Makefile.
1171 AC_SUBST(DEFINES)
1172 AC_SUBST(SYSSRCS)
1173 AC_SUBST(CPUINCLUDES)
1174 AC_SUBST(CPUSRCS)
1175 AC_SUBST(BLESS)
1176 AC_CONFIG_FILES([Makefile])
1177 AC_OUTPUT
1178
1179 dnl Print summary.
1180 echo
1181 echo Basilisk II configuration summary:
1182 echo
1183 echo XFree86 DGA support .................... : $WANT_XF86_DGA
1184 echo XFree86 VidMode support ................ : $WANT_XF86_VIDMODE
1185 echo fbdev DGA support ...................... : $WANT_FBDEV_DGA
1186 echo Enable video on SEGV signals ........... : $WANT_VOSF
1187 echo ESD sound support ...................... : $WANT_ESD
1188 echo GTK user interface ..................... : $WANT_GTK
1189 echo mon debugger support ................... : $WANT_MON
1190 echo Running m68k code natively ............. : $WANT_NATIVE_M68K
1191 echo Use JIT compiler ....................... : $WANT_JIT
1192 echo JIT debug mode ......................... : $WANT_JIT_DEBUG
1193 echo Floating-Point emulation core .......... : $FPE_CORE
1194 echo Assembly optimizations ................. : $ASM_OPTIMIZATIONS
1195 echo Addressing mode ........................ : $ADDRESSING_MODE
1196 echo Bad memory access recovery type ........ : $sigsegv_recovery
1197 echo
1198 echo "Configuration done. Now type \"make\" (or \"gmake\")."