ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.29
Committed: 2004-06-27T18:14:43Z (20 years, 5 months ago) by gbeauche
Branch: MAIN
Changes since 1.28: +3 -0 lines
Log Message:
Handle SDL scancode -> Mac keycode map files

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