ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/configure.ac
Revision: 1.30
Committed: 2004-06-27T22:06:02Z (20 years, 5 months ago) by gbeauche
Branch: MAIN
Changes since 1.29: +36 -3 lines
Log Message:
Add configure macros to check for -framework Carbon & -framework IOKit so
that we choose to include ../MacOSX/clip_macosx.cpp, sys_darwin.cpp or not.

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