ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.32
Committed: 2004-11-01T16:07:39Z (20 years, 1 month ago) by gbeauche
Branch: MAIN
Changes since 1.31: +2 -0 lines
Log Message:
enable JIT on x86_64

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