ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/Unix/configure.ac
Revision: 1.16
Committed: 2005-02-13T15:32:10Z (19 years, 4 months ago) by gbeauche
Branch: MAIN
Changes since 1.15: +5 -3 lines
Log Message:
Support NetBSD 2.0 for x86:
- implement trunc() function, isless() and isgreater() macros
- execute genexec.pl through a real perl executable
- disable generation of debug info from dyngen u-ops

File Contents

# Content
1 dnl Process this file with autoconf to produce a configure script.
2 dnl Written in 2002 by Christian Bauer
3
4 AC_INIT([SheepShaver], 2.2, [Christian.Bauer@uni-mainz.de], SheepShaver)
5 AC_CONFIG_SRCDIR(main_unix.cpp)
6 AC_PREREQ(2.52)
7 AC_CONFIG_HEADER(config.h)
8
9 dnl Canonical system information.
10 AC_CANONICAL_HOST
11 AC_CANONICAL_TARGET
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 Options.
18 AC_ARG_ENABLE(jit, [ --enable-jit enable JIT compiler [default=yes]], [WANT_JIT=$enableval], [WANT_JIT=yes])
19 AC_ARG_ENABLE(ppc-emulator, [ --enable-ppc-emulator use the selected PowerPC emulator [default=auto]], [WANT_EMULATED_PPC=$enableval], [WANT_EMULATED_PPC=auto])
20 AC_ARG_ENABLE(xf86-dga, [ --enable-xf86-dga use the XFree86 DGA extension [default=yes]], [WANT_XF86_DGA=$enableval], [WANT_XF86_DGA=yes])
21 AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=no]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=no])
22 AC_ARG_ENABLE(vosf, [ --enable-vosf enable video on SEGV signals [default=yes]], [WANT_VOSF=$enableval], [WANT_VOSF=yes])
23 AC_ARG_WITH(esd, [ --with-esd support ESD for sound under Linux/FreeBSD [default=yes]], [WANT_ESD=$withval], [WANT_ESD=yes])
24 AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]], [WANT_GTK=$withval], [WANT_GTK=yes])
25 AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes])
26 AC_ARG_WITH(dgcc, [ --with-dgcc=COMPILER use C++ COMPILER to compile synthetic opcodes], [DYNGEN_CC=$withval])
27
28 dnl Addressing mode
29 AC_ARG_ENABLE(addressing,
30 [ --enable-addressing=AM set the addressing mode to use [default=real]],
31 [case "$enableval" in
32 real) WANT_ADDRESSING_MODE="real";;
33 direct) WANT_ADDRESSING_MODE="direct";;
34 direct,0x*) WANT_ADDRESSING_MODE="direct"; NATMEM_OFFSET=`echo "$enableval" | sed -n '/direct,\(0[[xX]][[0-9A-Fa-f]]*\([[UuLl]]\{1,2\}\)\?\)$/s//\1/p'`;;
35 esac],
36 [WANT_ADDRESSING_MODE="real"]
37 )
38
39 dnl SDL options.
40 AC_ARG_ENABLE(sdl-static, [ --enable-sdl-static use SDL static libraries for linking [default=no]], [WANT_SDL_STATIC=$enableval], [WANT_SDL_STATIC=no])
41 AC_ARG_ENABLE(sdl-video, [ --enable-sdl-video use SDL for video graphics [default=no]], [WANT_SDL_VIDEO=$enableval], [WANT_SDL_VIDEO=no])
42 AC_ARG_ENABLE(sdl-audio, [ --enable-sdl-audio use SDL for audio [default=no]], [WANT_SDL_AUDIO=$enableval], [WANT_SDL_AUDIO=no])
43
44 dnl Checks for programs.
45 AC_PROG_CC
46 AC_PROG_CPP
47 AC_PROG_CXX
48 AC_PROG_MAKE_SET
49 AC_PROG_INSTALL
50 AC_PROG_EGREP
51 AC_PATH_PROGS(FILE, [file false])
52 AC_PATH_PROG(PERL, [perl])
53
54 dnl Check for PowerPC target CPU.
55 HAVE_PPC=no
56 AC_MSG_CHECKING(for PowerPC target CPU)
57 AC_EGREP_CPP(yes,
58 [
59 #ifdef __powerpc__
60 yes
61 #endif
62 #ifdef __ppc__
63 yes
64 #endif
65 ], [AC_MSG_RESULT(yes); HAVE_PPC=yes], AC_MSG_RESULT(no))
66
67 dnl We use native CPU if possible.
68 EMULATED_PPC=yes
69 case $WANT_EMULATED_PPC in
70 auto) [[ "x$HAVE_PPC" = "xyes" ]] && EMULATED_PPC=no;;
71 no) EMULATED_PPC=no;;
72 esac
73 if [[ "x$EMULATED_PPC" = "xyes" ]]; then
74 AC_DEFINE(EMULATED_PPC, 1, [Define if using a PowerPC CPU emulator.])
75 fi
76
77 dnl We use mon if possible.
78 MONSRCS=
79 case "x$WANT_MON" in
80 x/* | x.*)
81 mon_srcdir=$WANT_MON
82 WANT_MON=yes
83 ;;
84 xyes)
85 mon_srcdir=../../../mon/src
86 ;;
87 esac
88 if [[ "x$WANT_MON" = "xyes" ]]; then
89 AC_MSG_CHECKING(for mon)
90 if grep mon_init $mon_srcdir/mon.h >/dev/null 2>/dev/null; then
91 AC_MSG_RESULT(yes)
92 AC_DEFINE(ENABLE_MON, 1, [Define if using "mon".])
93 MONSRCS="$mon_srcdir/mon.cpp $mon_srcdir/mon_6502.cpp $mon_srcdir/mon_z80.cpp $mon_srcdir/mon_cmd.cpp $mon_srcdir/mon_lowmem.cpp $mon_srcdir/mon_disass.cpp $mon_srcdir/mon_ppc.cpp $mon_srcdir/disass/floatformat.c $mon_srcdir/disass/i386-dis.c $mon_srcdir/disass/m68k-dis.c $mon_srcdir/disass/m68k-opc.c"
94 CXXFLAGS="$CXXFLAGS -I$mon_srcdir -I$mon_srcdir/disass"
95 AC_CHECK_LIB(ncurses, tgetent, ,
96 AC_CHECK_LIB(termcap, tgetent, ,
97 AC_CHECK_LIB(termlib, tgetent, ,
98 AC_CHECK_LIB(terminfo, tgetent, ,
99 AC_CHECK_LIB(Hcurses, tgetent, ,
100 AC_CHECK_LIB(curses, tgetent))))))
101 AC_CHECK_LIB(readline, readline)
102 AC_CHECK_HEADERS(readline.h history.h readline/readline.h readline/history.h)
103 else
104 AC_MSG_RESULT(no)
105 AC_MSG_WARN([Could not find mon, ignoring --with-mon.])
106 WANT_MON=no
107 fi
108 fi
109 AC_SUBST(MONSRCS)
110
111 dnl Checks for libraries.
112 AC_CHECK_LIB(posix4, sem_init)
113
114 dnl Do we need SDL?
115 WANT_SDL=no
116 if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
117 WANT_SDL=yes
118 WANT_XF86_DGA=no
119 WANT_XF86_VIDMODE=no
120 WANT_FBDEV_DGA=no
121 SDL_SUPPORT="$SDL_SUPPORT video"
122 fi
123 if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
124 WANT_SDL=yes
125 SDL_SUPPORT="$SDL_SUPPORT audio"
126 fi
127 if [[ "x$WANT_SDL" = "xyes" ]]; then
128 AC_PATH_PROG(sdl_config, "sdl-config")
129 if [[ -n "$sdl_config" ]]; then
130 case $target_os in
131 # Special treatment for Cygwin so that we can still use the POSIX layer
132 *cygwin*)
133 sdl_cflags="-I`$sdl_config --prefix`/include/SDL"
134 sdl_libs="-L`$sdl_config --exec-prefix`/lib -lSDL"
135 ;;
136 *)
137 sdl_cflags=`$sdl_config --cflags`
138 if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then
139 sdl_libs=`$sdl_config --static-libs`
140 else
141 sdl_libs=`$sdl_config --libs`
142 fi
143 ;;
144 esac
145 CFLAGS="$CFLAGS $sdl_cflags"
146 CXXFLAGS="$CXXFLAGS $sdl_cflags"
147 LIBS="$LIBS $sdl_libs"
148 else
149 WANT_SDL=no
150 WANT_SDL_VIDEO=no
151 WANT_SDL_AUDIO=no
152 fi
153 SDL_SUPPORT=`echo "$SDL_SUPPORT" | sed -e "s/^ //"`
154 else
155 SDL_SUPPORT="none"
156 fi
157
158 dnl We need X11, if not using SDL.
159 if [[ "x$WANT_SDL_VIDEO" != "xyes" ]]; then
160 AC_PATH_XTRA
161 if [[ "x$no_x" = "xyes" ]]; then
162 AC_MSG_ERROR([You need X11 to run SheepShaver.])
163 fi
164 CFLAGS="$CFLAGS $X_CFLAGS"
165 CXXFLAGS="$CXXFLAGS $X_CFLAGS"
166 LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS"
167 fi
168
169 dnl We need pthreads on non-PowerPC systems. Try libpthread first, then libc_r (FreeBSD), then PTL.
170 HAVE_PTHREADS=yes
171 case $EMULATED_PPC:$target_os in
172 no:linux*)
173 dnl We do have our own pthread_cancel() implementation
174 AC_DEFINE(HAVE_PTHREAD_CANCEL, 1, [Define if you have the pthread_cancel function.])
175 ;;
176 *:*)
177 AC_CHECK_LIB(pthread, pthread_create, , [
178 AC_CHECK_LIB(c_r, pthread_create, , [
179 AC_CHECK_LIB(PTL, pthread_create, , [
180 AC_MSG_ERROR([You need pthreads to run Basilisk II.])
181 ])
182 ])
183 ])
184 AC_CHECK_FUNCS(pthread_cancel)
185 AC_CHECK_FUNCS(pthread_mutexattr_setprotocol)
186 AC_CHECK_FUNCS(pthread_mutexattr_settype)
187 AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
188 if [[ "x$HAVE_PTHREADS" = "xyes" ]]; then
189 AC_DEFINE(HAVE_PTHREADS, 1, [Define if pthreads are available.])
190 fi
191 dnl If POSIX.4 semaphores are not available, we emulate them with pthread mutexes.
192 SEMSRC=
193 AC_CHECK_FUNCS(sem_init, , [
194 if test "x$HAVE_PTHREADS" = "xyes"; then
195 SEMSRC=posix_sem.cpp
196 fi
197 ])
198 ;;
199 esac
200
201 dnl We use XFree86 DGA if possible.
202 if [[ "x$WANT_XF86_DGA" = "xyes" ]]; then
203 AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension, [
204 AC_DEFINE(ENABLE_XF86_DGA, 1, [Define if using XFree86 DGA extension.])
205 LIBS="$LIBS -lXxf86dga"
206 ], [
207 AC_MSG_WARN([Could not find XFree86 DGA extension, ignoring --enable-xf86-dga.])
208 WANT_XF86_DGA=no
209 ])
210 fi
211
212 dnl We use XFree86 VidMode if possible.
213 if [[ "x$WANT_XF86_VIDMODE" = "xyes" ]]; then
214 AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension, [
215 AC_DEFINE(ENABLE_XF86_VIDMODE, 1, [Define if using XFree86 DGA extension.])
216 LIBS="$LIBS -lXxf86vm"
217 ], [
218 AC_MSG_WARN([Could not find XFree86 VidMode extension, ignoring --enable-xf86-vidmode.])
219 WANT_XF86_VIDMODE=no
220 ])
221 fi
222
223 dnl We use GTK+ if possible.
224 UISRCS=../dummy/prefs_editor_dummy.cpp
225 if [[ "x$WANT_GTK" = "xyes" ]]; then
226 AM_PATH_GTK(1.2.0, [
227 AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
228 CFLAGS="$CFLAGS $GTK_CFLAGS"
229 CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
230 LIBS="$LIBS $GTK_LIBS"
231 UISRCS=prefs_editor_gtk.cpp
232 ], [
233 AC_MSG_WARN([Could not find GTK+, disabling user interface.])
234 WANT_GTK=no
235 ])
236 fi
237
238 dnl We use ESD if possible.
239 if [[ "x$WANT_ESD" = "xyes" ]]; then
240 AM_PATH_ESD(0.2.8, [
241 AC_DEFINE(ENABLE_ESD, 1, [Define is using ESD.])
242 CFLAGS="$CFLAGS $ESD_CFLAGS"
243 CXXFLAGS="$CXXFLAGS $ESD_CFLAGS"
244 LIBS="$LIBS $ESD_LIBS"
245 ], [
246 AC_MSG_WARN([Could not find ESD, disabling ESD support.])
247 WANT_ESD=no
248 ])
249 fi
250
251 dnl We use 64-bit file size support if possible.
252 AC_SYS_LARGEFILE
253
254 dnl Checks for header files.
255 AC_HEADER_STDC
256 AC_HEADER_SYS_WAIT
257 AC_CHECK_HEADERS(malloc.h)
258 AC_CHECK_HEADERS(mach/vm_map.h mach/mach_init.h sys/mman.h)
259 AC_CHECK_HEADERS(sys/time.h sys/times.h sys/socket.h)
260 AC_CHECK_HEADERS(unistd.h fcntl.h byteswap.h dirent.h)
261 AC_CHECK_HEADERS(linux/if.h, [], [], [
262 #if HAVE_SYS_SOCKET_H
263 # include <sys/socket.h>
264 #endif
265 ])
266 AC_CHECK_HEADERS(linux/if_tun.h net/if.h net/if_tun.h)
267 AC_CHECK_HEADERS(fenv.h)
268
269 dnl Checks for typedefs, structures, and compiler characteristics.
270 AC_C_BIGENDIAN
271 AC_C_CONST
272 AC_C_INLINE
273 AC_CHECK_SIZEOF(short, 2)
274 AC_CHECK_SIZEOF(int, 4)
275 AC_CHECK_SIZEOF(long, 4)
276 AC_CHECK_SIZEOF(long long, 8)
277 AC_CHECK_SIZEOF(float, 4)
278 AC_CHECK_SIZEOF(double, 8)
279 AC_CHECK_SIZEOF(void *, 4)
280 AC_TYPE_OFF_T
281 AC_CHECK_TYPE(loff_t, off_t)
282 AC_TYPE_SIZE_T
283 AC_TYPE_SIGNAL
284 AC_HEADER_TIME
285 AC_STRUCT_TM
286
287 dnl Check whether struct sigaction has sa_restorer member.
288 AC_CACHE_CHECK([whether struct sigaction has sa_restorer],
289 ac_cv_signal_sa_restorer, [
290 AC_TRY_COMPILE([
291 #include <signal.h>
292 ], [struct sigaction sa; sa.sa_restorer = 0;],
293 ac_cv_signal_sa_restorer=yes, ac_cv_signal_sa_restorer=no,
294 dnl When cross-compiling, do not assume anything.
295 ac_cv_signal_sa_restorer=no
296 )
297 ])
298 if [[ "x$ac_cv_signal_sa_restorer" = "xyes" ]]; then
299 AC_DEFINE(HAVE_SIGNAL_SA_RESTORER, 1, [Define if sa_restorer is available in struct sigaction.])
300 fi
301
302 dnl Checks for library functions.
303 AC_CHECK_FUNCS(strdup strlcpy cfmakeraw)
304 AC_CHECK_FUNCS(nanosleep)
305 AC_CHECK_FUNCS(sigaction signal)
306 AC_CHECK_FUNCS(mmap mprotect munmap)
307 AC_CHECK_FUNCS(vm_allocate vm_deallocate vm_protect)
308 AC_CHECK_FUNCS(posix_memalign memalign valloc)
309 AC_CHECK_FUNCS(exp2f log2f exp2 log2 trunc)
310
311 dnl Darwin seems to define mach_task_self() instead of task_self().
312 AC_CHECK_FUNCS(mach_task_self task_self)
313
314 dnl We need clock_gettime() for better performance but it may drag
315 dnl libpthread in, which we don't want for native ppc mode
316 case $EMULATED_PPC:$target_os in
317 no:linux*)
318 ;;
319 *:*)
320 AC_SEARCH_LIBS(clock_gettime, [rt posix4])
321 AC_CHECK_FUNCS(clock_gettime)
322 ;;
323 esac
324
325 dnl Check for headers and functions related to pty support (sshpty.c)
326 dnl From openssh-3.2.2p1 configure.ac
327 AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h)
328 AC_CHECK_FUNCS(_getpty vhangup strlcpy)
329
330 case "$host" in
331 *-*-hpux10.26)
332 disable_ptmx_check=yes
333 ;;
334 *-*-linux*)
335 no_dev_ptmx=1
336 ;;
337 mips-sony-bsd|mips-sony-newsos4)
338 AC_DEFINE(HAVE_NEWS4, 1, [Define if you are on NEWS-OS (additions from openssh-3.2.2p1, for sshpty.c).])
339 ;;
340 *-*-sco3.2v4*)
341 no_dev_ptmx=1
342 ;;
343 *-*-sco3.2v5*)
344 no_dev_ptmx=1
345 ;;
346 *-*-cygwin*)
347 no_dev_ptmx=1
348 ;;
349 esac
350
351 if test -z "$no_dev_ptmx" ; then
352 if test "x$disable_ptmx_check" != "xyes" ; then
353 AC_CHECK_FILE([/dev/ptmx],
354 [
355 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1, [Define if you have /dev/ptmx.])
356 have_dev_ptmx=1
357 ]
358 )
359 fi
360 fi
361 AC_CHECK_FILE([/dev/ptc],
362 [
363 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1, [Define if you have /dev/ptc.])
364 have_dev_ptc=1
365 ]
366 )
367 dnl (end of code from openssh-3.2.2p1 configure.ac)
368
369 dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES)
370 AC_DEFUN(AC_CHECK_FRAMEWORK, [
371 AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl
372 AC_CACHE_CHECK([whether compiler supports framework $1],
373 ac_Framework, [
374 saved_LIBS="$LIBS"
375 LIBS="$LIBS -framework $1"
376 AC_TRY_LINK(
377 [$2], [int main(void) { return 0; }],
378 [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"]
379 )
380 ])
381 AS_IF([test AS_VAR_GET(ac_Framework) = yes],
382 [AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])]
383 )
384 AS_VAR_POPDEF([ac_Framework])dnl
385 ])
386
387 dnl Check for some MacOS X frameworks
388 AC_CHECK_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>])
389 AC_CHECK_FRAMEWORK(IOKit, [#include <IOKit/IOKitLib.h>])
390
391 dnl Select system-dependant sources.
392 SERIALSRC=serial_unix.cpp
393 ETHERSRC=../dummy/ether_dummy.cpp
394 SCSISRC=../dummy/scsi_dummy.cpp
395 AUDIOSRC=../dummy/audio_dummy.cpp
396 EXTFSSRC=extfs_unix.cpp
397 EXTRASYSSRCS=
398 case "$target_os" in
399 linux*)
400 ETHERSRC=Linux/ether_linux.cpp
401 AUDIOSRC=audio_oss_esd.cpp
402 SCSISRC=Linux/scsi_linux.cpp
403 if [[ "x$EMULATED_PPC" = "xno" ]]; then
404 EXTRASYSSRCS="Linux/paranoia.cpp Linux/sheepthreads.c Linux/asm_linux.S"
405 fi
406 ;;
407 darwin*)
408 if [[ "x$EMULATED_PPC" = "xno" ]]; then
409 EXTRASYSSRCS="Darwin/paranoia.cpp Linux/asm_linux.S"
410 fi
411 if [[ "x$ac_cv_framework_IOKit" = "xyes" ]]; then
412 EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/sys_darwin.cpp"
413 fi
414 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
415 EXTFSSRC=../MacOSX/extfs_macosx.mm
416 fi
417 ;;
418 cygwin*)
419 SERIALSRC="../dummy/serial_dummy.cpp"
420 ;;
421 esac
422
423 dnl SDL overrides
424 if [[ "x$WANT_SDL" = "xyes" ]]; then
425 AC_DEFINE(USE_SDL, 1, [Define to enble SDL support.])
426 fi
427 if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
428 AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support.])
429 VIDEOSRCS="../SDL/video_sdl.cpp"
430 KEYCODES="../SDL/keycodes"
431 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
432 EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/clip_macosx.cpp"
433 else
434 case "$target_os" in
435 cygwin*)
436 EXTRASYSSRCS="$EXTRASYSSRCS ../Windows/clip_windows.cpp"
437 ;;
438 *)
439 EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp"
440 ;;
441 esac
442 fi
443 else
444 VIDEOSRCS="video_x.cpp"
445 KEYCODES="keycodes"
446 EXTRASYSSRCS="$EXTRASYSSRCS clip_unix.cpp"
447 fi
448 if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
449 AC_DEFINE(USE_SDL_AUDIO, 1, [Define to enable SDL audio support])
450 AUDIOSRC="../SDL/audio_sdl.cpp"
451 fi
452
453 SYSSRCS="$VIDEOSRCS $EXTFSSRC $SERIALSRC $ETHERSRC $SCSISRC $AUDIOSRC $SEMSRC $UISRCS $EXTRASYSSRCS"
454
455 dnl Define a macro that translates a yesno-variable into a C macro definition
456 dnl to be put into the config.h file
457 dnl $1 -- the macro to define
458 dnl $2 -- the value to translate
459 dnl $3 -- template name
460 AC_DEFUN(AC_TRANSLATE_DEFINE, [
461 if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
462 AC_DEFINE($1, 1, $3)
463 fi
464 ])
465
466 dnl Check that the host supports TUN/TAP devices
467 AC_CACHE_CHECK([whether TUN/TAP is supported],
468 ac_cv_tun_tap_support, [
469 AC_TRY_COMPILE([
470 #if defined(HAVE_LINUX_IF_H) && defined(HAVE_LINUX_IF_TUN_H)
471 #include <linux/if.h>
472 #include <linux/if_tun.h>
473 #endif
474 #if defined(HAVE_NET_IF_H) && defined(HAVE_NET_IF_TUN_H)
475 #include <net/if.h>
476 #include <net/if_tun.h>
477 #endif
478 ], [
479 struct ifreq ifr;
480 memset(&ifr, 0, sizeof(ifr));
481 ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
482 ],
483 ac_cv_tun_tap_support=yes, ac_cv_tun_tap_support=no
484 )
485 ])
486 AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support",
487 [Define if your system supports TUN/TAP devices.])
488
489 dnl Various checks if the system supports vm_allocate() and the like functions.
490 have_mach_vm=no
491 if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \
492 "x$ac_cv_func_vm_protect" = "xyes" ]]; then
493 have_mach_vm=yes
494 fi
495 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
496 [Define if your system has a working vm_allocate()-based memory allocator.])
497
498 dnl Check that vm_allocate(), vm_protect() work
499 if [[ "x$have_mach_vm" = "xyes" ]]; then
500
501 AC_CACHE_CHECK([whether vm_protect works],
502 ac_cv_vm_protect_works, [
503 AC_LANG_SAVE
504 AC_LANG_CPLUSPLUS
505 ac_cv_vm_protect_works=yes
506 dnl First the tests that should segfault
507 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
508 AC_TRY_RUN([
509 #define CONFIGURE_TEST_VM_MAP
510 #define TEST_VM_PROT_$test_def
511 #include "vm_alloc.cpp"
512 ], ac_cv_vm_protect_works=no, rm -f core,
513 dnl When cross-compiling, do not assume anything
514 ac_cv_vm_protect_works="guessing no"
515 )
516 done
517 AC_TRY_RUN([
518 #define CONFIGURE_TEST_VM_MAP
519 #define TEST_VM_PROT_RDWR_WRITE
520 #include "vm_alloc.cpp"
521 ], , ac_cv_vm_protect_works=no,
522 dnl When cross-compiling, do not assume anything
523 ac_cv_vm_protect_works="guessing no"
524 )
525 AC_LANG_RESTORE
526 ]
527 )
528
529 dnl Remove support for vm_allocate() if vm_protect() does not work
530 if [[ "x$have_mach_vm" = "xyes" ]]; then
531 case $ac_cv_vm_protect_works in
532 *yes) have_mach_vm=yes;;
533 *no) have_mach_vm=no;;
534 esac
535 fi
536 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
537 [Define if your system has a working vm_allocate()-based memory allocator.])
538
539 fi dnl HAVE_MACH_VM
540
541 dnl Various checks if the system supports mmap() and the like functions.
542 dnl ... and Mach memory allocators are not supported
543 have_mmap_vm=no
544 if [[ "x$ac_cv_func_mmap" = "xyes" -a "x$ac_cv_func_munmap" = "xyes" -a \
545 "x$ac_cv_func_mprotect" = "xyes" ]]; then
546 if [[ "x$have_mach_vm" = "xno" ]]; then
547 have_mmap_vm=yes
548 fi
549 fi
550 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
551 [Define if your system has a working mmap()-based memory allocator.])
552
553 dnl Check that mmap() and associated functions work.
554 if [[ "x$have_mmap_vm" = "xyes" ]]; then
555
556 dnl Check if we have a working anonymous mmap()
557 AC_CACHE_CHECK([whether mmap supports MAP_ANON],
558 ac_cv_mmap_anon, [
559 AC_LANG_SAVE
560 AC_LANG_CPLUSPLUS
561 AC_TRY_RUN([
562 #define HAVE_MMAP_ANON
563 #define CONFIGURE_TEST_VM_MAP
564 #define TEST_VM_MMAP_ANON
565 #include "vm_alloc.cpp"
566 ], ac_cv_mmap_anon=yes, ac_cv_mmap_anon=no,
567 dnl When cross-compiling, do not assume anything.
568 ac_cv_mmap_anon="guessing no"
569 )
570 AC_LANG_RESTORE
571 ]
572 )
573 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANON, "$ac_cv_mmap_anon",
574 [Define if <sys/mman.h> defines MAP_ANON and mmap()'ing with MAP_ANON works.])
575
576 AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
577 ac_cv_mmap_anonymous, [
578 AC_LANG_SAVE
579 AC_LANG_CPLUSPLUS
580 AC_TRY_RUN([
581 #define HAVE_MMAP_ANONYMOUS
582 #define CONFIGURE_TEST_VM_MAP
583 #define TEST_VM_MMAP_ANON
584 #include "vm_alloc.cpp"
585 ], ac_cv_mmap_anonymous=yes, ac_cv_mmap_anonymous=no,
586 dnl When cross-compiling, do not assume anything.
587 ac_cv_mmap_anonymous="guessing no"
588 )
589 AC_LANG_RESTORE
590 ]
591 )
592 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANONYMOUS, "$ac_cv_mmap_anonymous",
593 [Define if <sys/mman.h> defines MAP_ANONYMOUS and mmap()'ing with MAP_ANONYMOUS works.])
594
595 AC_CACHE_CHECK([whether mprotect works],
596 ac_cv_mprotect_works, [
597 AC_LANG_SAVE
598 AC_LANG_CPLUSPLUS
599 ac_cv_mprotect_works=yes
600 dnl First the tests that should segfault
601 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
602 AC_TRY_RUN([
603 #define CONFIGURE_TEST_VM_MAP
604 #define TEST_VM_PROT_$test_def
605 #include "vm_alloc.cpp"
606 ], ac_cv_mprotect_works=no, rm -f core,
607 dnl When cross-compiling, do not assume anything
608 ac_cv_mprotect_works="guessing no"
609 )
610 done
611 AC_TRY_RUN([
612 #define CONFIGURE_TEST_VM_MAP
613 #define TEST_VM_PROT_RDWR_WRITE
614 #include "vm_alloc.cpp"
615 ], , ac_cv_mprotect_works=no,
616 dnl When cross-compiling, do not assume anything
617 ac_cv_mprotect_works="guessing no"
618 )
619 AC_LANG_RESTORE
620 ]
621 )
622
623 dnl Remove support for mmap() if mprotect() does not work
624 if [[ "x$have_mmap_vm" = "xyes" ]]; then
625 case $ac_cv_mprotect_works in
626 *yes) have_mmap_vm=yes;;
627 *no) have_mmap_vm=no;;
628 esac
629 fi
630 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
631 [Define if your system has a working mmap()-based memory allocator.])
632
633 fi dnl HAVE_MMAP_VM
634
635 dnl Check if we can modify the __PAGEZERO segment for use as Low Memory
636 AC_CACHE_CHECK([whether __PAGEZERO can be Low Memory area 0x0000-0x3000],
637 ac_cv_pagezero_hack, [
638 ac_cv_pagezero_hack=no
639 if AC_TRY_COMMAND([Darwin/testlmem.sh 0x3000]); then
640 ac_cv_pagezero_hack=yes
641 dnl might as well skip the test for mmap-able low memory
642 ac_cv_can_map_lm=no
643 fi
644 ])
645 AC_TRANSLATE_DEFINE(PAGEZERO_HACK, "$ac_cv_pagezero_hack",
646 [Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this system.])
647
648 dnl Check if we can mmap 0x3000 bytes from 0x0000
649 AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x3000],
650 ac_cv_can_map_lm, [
651 AC_LANG_SAVE
652 AC_LANG_CPLUSPLUS
653 AC_TRY_RUN([
654 #include "vm_alloc.cpp"
655 int main(void) { /* returns 0 if we could map the lowmem globals */
656 volatile char * lm = 0;
657 if (vm_init() < 0) exit(1);
658 if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
659 lm[0] = 'z';
660 if (vm_release((char *)lm, 0x2000) < 0) exit(1);
661 vm_exit(); exit(0);
662 }
663 ], ac_cv_can_map_lm=yes, ac_cv_can_map_lm=no,
664 dnl When cross-compiling, do not assume anything.
665 ac_cv_can_map_lm="guessing no"
666 )
667 AC_LANG_RESTORE
668 ]
669 )
670
671 dnl Check signal handlers need to be reinstalled
672 AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
673 ac_cv_signal_need_reinstall, [
674 AC_LANG_SAVE
675 AC_LANG_CPLUSPLUS
676 AC_TRY_RUN([
677 #include <stdlib.h>
678 #ifdef HAVE_UNISTD_H
679 #include <unistd.h>
680 #endif
681 #include <signal.h>
682 static int handled_signal = 0;
683 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
684 int main(void) { /* returns 0 if signals need not to be reinstalled */
685 signal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
686 exit(handled_signal == 2);
687 }
688 ], ac_cv_signal_need_reinstall=yes, ac_cv_signal_need_reinstall=no,
689 dnl When cross-compiling, do not assume anything.
690 ac_cv_signal_need_reinstall="guessing yes"
691 )
692 AC_LANG_RESTORE
693 ]
694 )
695 AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
696 [Define if your system requires signals to be reinstalled.])
697
698 dnl Check if sigaction handlers need to be reinstalled
699 AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
700 ac_cv_sigaction_need_reinstall, [
701 AC_LANG_SAVE
702 AC_LANG_CPLUSPLUS
703 AC_TRY_RUN([
704 #include <stdlib.h>
705 #ifdef HAVE_UNISTD_H
706 #include <unistd.h>
707 #endif
708 #include <signal.h>
709 static int handled_signal = 0;
710 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
711 typedef RETSIGTYPE (*signal_handler)(int);
712 static signal_handler mysignal(int sig, signal_handler handler) {
713 struct sigaction old_sa;
714 struct sigaction new_sa;
715 new_sa.sa_handler = handler;
716 return ((sigaction(sig,&new_sa,&old_sa) < 0) ? SIG_IGN : old_sa.sa_handler);
717 }
718 int main(void) { /* returns 0 if signals need not to be reinstalled */
719 mysignal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
720 exit(handled_signal == 2);
721 }
722 ], ac_cv_sigaction_need_reinstall=yes, ac_cv_sigaction_need_reinstall=no,
723 dnl When cross-compiling, do not assume anything.
724 ac_cv_sigaction_need_reinstall="guessing yes"
725 )
726 AC_LANG_RESTORE
727 ]
728 )
729 AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
730 [Define if your system requires sigactions to be reinstalled.])
731
732 dnl Check if Mach exceptions supported.
733 AC_CACHE_CHECK([whether your system supports Mach exceptions],
734 ac_cv_have_mach_exceptions, [
735 AC_LANG_SAVE
736 AC_LANG_CPLUSPLUS
737 AC_TRY_RUN([
738 #define HAVE_MACH_EXCEPTIONS 1
739 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
740 #include "vm_alloc.cpp"
741 #include "sigsegv.cpp"
742 ],
743 ac_cv_have_mach_exceptions=yes,
744 ac_cv_have_mach_exceptions=no,
745 dnl When cross-compiling, do not assume anything.
746 ac_cv_have_mach_exceptions=no
747 )
748 AC_LANG_RESTORE
749 ]
750 )
751 if [[ "$ac_cv_have_mach_exceptions" = "yes" ]]; then
752 sigsegv_recovery=mach
753 fi
754 AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions",
755 [Define if your system supports Mach exceptions.])
756
757 dnl Check if Windows exceptions are supported.
758 AC_CACHE_CHECK([whether your system supports Windows exceptions],
759 ac_cv_have_win32_exceptions, [
760 AC_LANG_SAVE
761 AC_LANG_CPLUSPLUS
762 AC_TRY_RUN([
763 #define HAVE_WIN32_EXCEPTIONS 1
764 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
765 #include "vm_alloc.cpp"
766 #include "sigsegv.cpp"
767 ], [
768 sigsegv_recovery=win32
769 ac_cv_have_win32_exceptions=yes
770 ],
771 ac_cv_have_win32_exceptions=no,
772 dnl When cross-compiling, do not assume anything.
773 ac_cv_have_win32_exceptions=no
774 )
775 AC_LANG_RESTORE
776 ]
777 )
778 AC_TRANSLATE_DEFINE(HAVE_WIN32_EXCEPTIONS, "$ac_cv_have_win32_exceptions",
779 [Define if your system supports Windows exceptions.])
780
781 dnl Otherwise, check if extended signals are supported.
782 if [[ -z "$sigsegv_recovery" ]]; then
783 AC_CACHE_CHECK([whether your system supports extended signal handlers],
784 ac_cv_have_extended_signals, [
785 AC_LANG_SAVE
786 AC_LANG_CPLUSPLUS
787 AC_TRY_RUN([
788 #define HAVE_SIGINFO_T 1
789 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
790 #include "vm_alloc.cpp"
791 #include "sigsegv.cpp"
792 ],
793 ac_cv_have_extended_signals=yes,
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 if [[ "$ac_cv_have_extended_signals" = "yes" ]]; then
802 sigsegv_recovery=siginfo
803 fi
804 AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals",
805 [Define if your system support extended signals.])
806 fi
807
808 dnl Otherwise, check for subterfuges.
809 if [[ -z "$sigsegv_recovery" ]]; then
810 AC_CACHE_CHECK([whether we then have a subterfuge for your system],
811 ac_cv_have_sigcontext_hack, [
812 AC_LANG_SAVE
813 AC_LANG_CPLUSPLUS
814 AC_TRY_RUN([
815 #define HAVE_SIGCONTEXT_SUBTERFUGE 1
816 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
817 #include "vm_alloc.cpp"
818 #include "sigsegv.cpp"
819 ],
820 ac_cv_have_sigcontext_hack=yes,
821 ac_cv_have_sigcontext_hack=no,
822 dnl When cross-compiling, do not assume anything.
823 ac_cv_have_sigcontext_hack=no
824 )
825 AC_LANG_RESTORE
826 ])
827 if [[ "$ac_cv_have_sigcontext_hack" = "yes" ]]; then
828 sigsegv_recovery=sigcontext
829 fi
830 AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack",
831 [Define if we know a hack to replace siginfo_t->si_addr member.])
832 fi
833
834 dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
835 AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
836 ac_cv_have_skip_instruction, [
837 AC_LANG_SAVE
838 AC_LANG_CPLUSPLUS
839 AC_TRY_RUN([
840 #define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
841 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
842 #include "vm_alloc.cpp"
843 #include "sigsegv.cpp"
844 ], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
845 dnl When cross-compiling, do not assume anything.
846 ac_cv_have_skip_instruction=no
847 )
848 AC_LANG_RESTORE
849 ]
850 )
851 AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
852 [Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
853
854 dnl Can we do Video on SEGV Signals ?
855 CAN_VOSF=no
856 if [[ -n "$sigsegv_recovery" ]]; then
857 CAN_VOSF=yes
858 fi
859
860 dnl Enable VOSF screen updates with this feature is requested and feasible
861 if [[ "x$WANT_VOSF" = "xyes" -a "x$CAN_VOSF" = "xyes" ]]; then
862 AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
863 else
864 WANT_VOSF=no
865 fi
866
867 dnl Check addressing mode to use
868 AC_MSG_CHECKING([for addressing mode to use])
869 case "$os_target" in
870 cygwin*)
871 WANT_ADDRESSING_MODE="direct,cygwin-hack"
872 NATMEM_OFFSET=
873 ;;
874 esac
875 if [[ "$EMULATED_PPC" != "yes" ]]; then
876 if [[ "$WANT_ADDRESSING_MODE" != "real" ]]; then
877 AC_MSG_WARN([Running in native PowerPC mode, force use of Real Addressing.])
878 WANT_ADDRESSING_MODE="real"
879 fi
880 fi
881 if [[ "$WANT_ADDRESSING_MODE" = "direct" ]]; then
882 if [[ -n "$NATMEM_OFFSET" ]]; then
883 NATMEM_OFFSET_DEF="-DNATMEM_OFFSET=$NATMEM_OFFSET"
884 fi
885 AC_LANG_SAVE
886 AC_LANG_CPLUSPLUS
887 cat confdefs.h > conftest.$ac_ext
888 cat >> conftest.$ac_ext << EOF
889 #include <stdio.h>
890 #include <string.h>
891 #include "vm_alloc.cpp"
892
893 int main(void)
894 {
895 if (vm_init() < 0)
896 return 1;
897
898 static const struct {
899 unsigned long base;
900 unsigned int size;
901 } ranges[[]] = {
902 { 0x00000000, 0x0003000 },
903 { 0x10000000, 0x2000000 },
904 { 0x40800000, 0x0400000 },
905 { 0x68070000, 0x0010000 },
906 { 0x69000000, 0x0080000 },
907 { 0x68ffe000, 0x0002000 },
908 { 0x5fffe000, 0x0002000 },
909 { 0x60000000, 0x0040000 },
910 };
911 const int n_ranges = sizeof(ranges)/ sizeof(ranges[[0]]);
912
913 #ifdef NATMEM_OFFSET
914 unsigned long ofs = NATMEM_OFFSET;
915 #else
916 for (unsigned long ofs = 0x10000000; ofs <= 0x90000000; ofs += 0x10000000)
917 #endif
918 for (int i = 0; i < n_ranges; i++) {
919 char *m = (char *)(ranges[[i]].base + ofs);
920 if (vm_acquire_fixed(m, ranges[[i]].size) != 0)
921 break;
922 memset(m, 0, ranges[[i]].size);
923 vm_release(m, ranges[[i]].size);
924 if (i == n_ranges - 1) {
925 if (sizeof(void *) == 8 && ofs > 0xffffffff)
926 printf("0x%lxul\n", ofs);
927 else
928 printf("0x%08x\n", ofs);
929 return 0;
930 }
931 }
932
933 vm_exit();
934 return 1;
935 }
936 EOF
937 doit='$CXX conftest.$ac_ext -o conftest.$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS $LIBS $NATMEM_OFFSET_DEF >& AS_MESSAGE_LOG_FD'
938 if AC_TRY_EVAL(doit); then
939 NATMEM_OFFSET=`./conftest.$ac_exeext`
940 else
941 NATMEM_OFFSET=
942 fi
943 rm -f conftest*
944 AC_LANG_RESTORE
945
946 if [[ -z "$NATMEM_OFFSET" ]]; then
947 AC_MSG_ERROR([could not determine a sensible NATMEM_OFFSET value])
948 else
949 WANT_ADDRESSING_MODE="direct,$NATMEM_OFFSET"
950 AC_DEFINE_UNQUOTED(NATMEM_OFFSET, $NATMEM_OFFSET,
951 [Define constant offset for Mac address translation])
952 fi
953 fi
954 AC_MSG_RESULT($WANT_ADDRESSING_MODE)
955
956 dnl Platform specific binary postprocessor
957 AC_PATH_PROG(BLESS, "true")
958 if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then
959 BLESS=Darwin/lowmem
960 LDFLAGS="$LDFLAGS -pagezero_size 0x3000"
961 fi
962
963 dnl Check for GCC 2.7 or higher.
964 HAVE_GCC27=no
965 AC_MSG_CHECKING(for GCC 2.7 or higher)
966 AC_EGREP_CPP(xyes,
967 [#if __GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5
968 xyes
969 #endif
970 ], [AC_MSG_RESULT(yes); HAVE_GCC27=yes], AC_MSG_RESULT(no))
971
972 dnl Check for GCC 3.0 or higher.
973 HAVE_GCC30=no
974 AC_MSG_CHECKING(for GCC 3.0 or higher)
975 AC_EGREP_CPP(xyes,
976 [#if __GNUC__ >= 3
977 xyes
978 #endif
979 ], [AC_MSG_RESULT(yes); HAVE_GCC30=yes], AC_MSG_RESULT(no))
980
981 dnl Check for ICC.
982 AC_MSG_CHECKING(for ICC)
983 HAVE_ICC=no
984 if $CXX -V -v 2>&1 | grep -q "Intel(R) C++ Compiler"; then
985 HAVE_ICC=yes
986 fi
987 AC_MSG_RESULT($HAVE_ICC)
988
989 dnl Determine the generated object format
990 AC_CACHE_CHECK([whether the compiler can generate ELF objects],
991 ac_cv_object_format, [
992 echo 'int i;' > conftest.$ac_ext
993 ac_cv_object_format=no
994 if AC_TRY_EVAL(ac_compile); then
995 case `/usr/bin/file conftest.$ac_objext` in
996 *"ELF"*)
997 ac_cv_object_format=elf
998 ;;
999 *)
1000 ac_cv_object_format=unknown
1001 ;;
1002 esac
1003 fi
1004 rm -rf conftest*
1005 ])
1006
1007 dnl CPU emulator sources
1008 if [[ "x$EMULATED_PPC" = "xyes" ]]; then
1009 CPUSRCS="\
1010 ../kpx_cpu/src/mathlib/ieeefp.cpp \
1011 ../kpx_cpu/src/cpu/ppc/ppc-cpu.cpp \
1012 ../kpx_cpu/src/cpu/ppc/ppc-decode.cpp \
1013 ../kpx_cpu/src/cpu/ppc/ppc-execute.cpp \
1014 ../kpx_cpu/src/cpu/ppc/ppc-translate.cpp"
1015 CPPFLAGS="$CPPFLAGS -I../kpx_cpu/include -I../kpx_cpu/src"
1016
1017 dnl Enable JIT compiler, if possible
1018 if [[ "x$WANT_JIT" = "xyes" ]]; then
1019 AC_CACHE_CHECK([whether dyngen can be used],
1020 ac_cv_use_dyngen, [
1021 case $host_cpu:$ac_cv_object_format in
1022 powerpc:elf)
1023 ac_cv_use_dyngen=yes
1024 ;;
1025 x86_64:elf)
1026 ac_cv_use_dyngen=yes
1027 ;;
1028 i?86:elf)
1029 ac_cv_use_dyngen=yes
1030 ;;
1031 *:*)
1032 ac_cv_use_dyngen=no
1033 ;;
1034 esac
1035 dnl Check for a suitable synthetic opcodes compiler (icc is faking itself as gcc 3.2.2)
1036 if [[ -z "$DYNGEN_CC" ]]; then
1037 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1038 DYNGEN_CC=$CXX
1039 else
1040 for p in /usr/bin /usr/local/bin; do
1041 gxx="$p/g++"
1042 if [[ -x "$gxx" ]]; then
1043 DYNGEN_CC="$gxx"
1044 fi
1045 done
1046 fi
1047 fi
1048 if [[ -z "$DYNGEN_CC" ]] || ! { echo '#include <limits>' | $DYNGEN_CC -xc++ -c -o /dev/null - >& /dev/null; }; then
1049 ac_cv_use_dyngen=no
1050 fi
1051 ])
1052 if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
1053 case $host_cpu in
1054 i?86)
1055 DYNGEN_OP_FLAGS="-fomit-frame-pointer -mpreferred-stack-boundary=2"
1056 if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1057 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -falign-functions=0"
1058 else
1059 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -malign-functions=0"
1060 fi
1061 saved_CPPFLAGS=$CPPFLAGS
1062 CPPFLAGS="$CPPFLAGS -mmmx"
1063 AC_CHECK_HEADERS(mmintrin.h, [DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -mmmx"])
1064 CPPFLAGS="$CPPFLAGS -msse"
1065 AC_CHECK_HEADERS(xmmintrin.h, [DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -msse"])
1066 CPPFLAGS="$CPPFLAGS -msse2"
1067 AC_CHECK_HEADERS(emmintrin.h, [DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -msse2"])
1068 CPPFLAGS=$saved_CPPFLAGS
1069 ;;
1070 x86_64)
1071 AC_CHECK_HEADERS(mmintrin.h xmmintrin.h emmintrin.h)
1072 ;;
1073 esac
1074 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -finline-limit=10000 -g0"
1075 if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1076 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -fno-reorder-blocks -fno-optimize-sibling-calls"
1077 fi
1078 else
1079 WANT_JIT=no
1080 fi
1081 AC_TRANSLATE_DEFINE(ENABLE_DYNGEN, $ac_cv_use_dyngen, [Define to enable dyngen engine])
1082 if [[ "x$WANT_JIT" = "xyes" ]]; then
1083 DYNGENSRCS="\
1084 ../kpx_cpu/src/cpu/jit/dyngen.c \
1085 ../kpx_cpu/src/cpu/jit/cxxdemangle.cpp"
1086 CPUSRCS="\
1087 ../kpx_cpu/src/cpu/jit/jit-cache.cpp \
1088 ../kpx_cpu/src/cpu/jit/basic-dyngen.cpp \
1089 ../kpx_cpu/src/cpu/ppc/ppc-dyngen.cpp $CPUSRCS"
1090 fi
1091 fi
1092 CPUSRCS="$CPUSRCS ../kpx_cpu/sheepshaver_glue.cpp"
1093 else
1094 WANT_JIT=no
1095 fi
1096 if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
1097 AC_CACHE_CHECK([whether static data regions are executable],
1098 ac_cv_have_static_data_exec, [
1099 AC_TRY_RUN([int main(void) {
1100 #if defined(__powerpc__)
1101 static unsigned int p[8] = {0x4e800020,};
1102 asm volatile("dcbst 0,%0" : : "r" (p) : "memory");
1103 asm volatile("sync" : : : "memory");
1104 asm volatile("icbi 0,%0" : : "r" (p) : "memory");
1105 asm volatile("sync" : : : "memory");
1106 asm volatile("isync" : : : "memory");
1107 ((void (*)(void))p)();
1108 return 0;
1109 #endif
1110 return 1;
1111 }], ac_cv_have_static_data_exec=yes, ac_cv_have_static_data_exec=no,
1112 dnl When cross-compiling, do not assume anything.
1113 ac_cv_have_static_data_exec=no
1114 )
1115 ])
1116 else
1117 ac_cv_use_dyngen=no
1118 fi
1119 AC_TRANSLATE_DEFINE(HAVE_STATIC_DATA_EXEC, "$ac_cv_have_static_data_exec",
1120 [Define if your system marks static data pages as executable.])
1121
1122 if [[ "x$WANT_JIT" = "xyes" ]]; then
1123 CPPFLAGS="$CPPFLAGS -DUSE_JIT"
1124 fi
1125
1126 dnl Generate Makefile.
1127 AC_SUBST(PERL)
1128 AC_SUBST(USE_DYNGEN, [$ac_cv_use_dyngen])
1129 AC_SUBST(DYNGENSRCS)
1130 AC_SUBST(DYNGEN_CC)
1131 AC_SUBST(DYNGEN_OP_FLAGS)
1132 AC_SUBST(SYSSRCS)
1133 AC_SUBST(CPUSRCS)
1134 AC_SUBST(BLESS)
1135 AC_SUBST(KEYCODES)
1136 AC_OUTPUT([
1137 Makefile
1138 ../MacOSX/Info.plist
1139 ])
1140
1141 dnl Print summary.
1142 echo
1143 echo SheepShaver configuration summary:
1144 echo
1145 echo SDL support ...................... : $SDL_SUPPORT
1146 echo XFree86 DGA support .............. : $WANT_XF86_DGA
1147 echo XFree86 VidMode support .......... : $WANT_XF86_VIDMODE
1148 echo Using PowerPC emulator ........... : $EMULATED_PPC
1149 echo Enable JIT compiler .............. : $WANT_JIT
1150 echo Enable video on SEGV signals ..... : $WANT_VOSF
1151 echo ESD sound support ................ : $WANT_ESD
1152 echo GTK user interface ............... : $WANT_GTK
1153 echo mon debugger support ............. : $WANT_MON
1154 echo Addressing mode .................. : $WANT_ADDRESSING_MODE
1155 echo Bad memory access recovery type .. : $sigsegv_recovery
1156 echo
1157 echo "Configuration done. Now type \"make\"."