ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.12
Committed: 2002-11-05T10:32:42Z (22 years ago) by gbeauche
Branch: MAIN
Changes since 1.11: +4 -6 lines
Log Message:
Get rid of CPU_* defines as nobody actually used them and are useless

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