ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/Unix/configure.ac
Revision: 1.38
Committed: 2005-07-25T19:46:24Z (18 years, 11 months ago) by gbeauche
Branch: MAIN
Changes since 1.37: +1 -1 lines
Log Message:
force -finline-functions to get inlining really operating with gcc < 3.3.6
on x86 or you may get a _ZN9bit_fieldILi0ELi0EE7extractEj undefined symbol

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 Invite Cygwin users to build within the Windows/ directory
18 case $target_os in
19 *cygwin* | *mingw32*)
20 AC_MSG_ERROR([You can only build the Windows version from its directory, Cygwin/X11 is not supported.])
21 ;;
22 esac
23
24 dnl Options.
25 AC_ARG_ENABLE(jit, [ --enable-jit enable JIT compiler [default=yes]], [WANT_JIT=$enableval], [WANT_JIT=yes])
26 AC_ARG_ENABLE(ppc-emulator, [ --enable-ppc-emulator use the selected PowerPC emulator [default=auto]], [WANT_EMULATED_PPC=$enableval], [WANT_EMULATED_PPC=auto])
27 AC_ARG_ENABLE(fbdev-dga, [ --enable-fbdev-dga use direct frame buffer access via /dev/fb0 [default=yes]], [WANT_FBDEV_DGA=$enableval], [WANT_FBDEV_DGA=yes])
28 AC_ARG_ENABLE(xf86-dga, [ --enable-xf86-dga use the XFree86 DGA extension [default=yes]], [WANT_XF86_DGA=$enableval], [WANT_XF86_DGA=yes])
29 AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=yes]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=yes])
30 AC_ARG_ENABLE(vosf, [ --enable-vosf enable video on SEGV signals [default=yes]], [WANT_VOSF=$enableval], [WANT_VOSF=yes])
31 AC_ARG_WITH(esd, [ --with-esd support ESD for sound under Linux/FreeBSD [default=yes]], [WANT_ESD=$withval], [WANT_ESD=yes])
32 AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]],
33 [case "$withval" in
34 gtk1) WANT_GTK="gtk";;
35 gtk|gtk2) WANT_GTK="$withval";;
36 yes) WANT_GTK="gtk2 gtk";;
37 *) WANT_GTK="no";;
38 esac],
39 [WANT_GTK="gtk2 gtk"])
40 AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes])
41 AC_ARG_WITH(dgcc, [ --with-dgcc=COMPILER use C++ COMPILER to compile synthetic opcodes], [DYNGEN_CC=$withval])
42
43 dnl Addressing mode
44 AC_ARG_ENABLE(addressing,
45 [ --enable-addressing=AM set the addressing mode to use [default=real]],
46 [case "$enableval" in
47 real) WANT_ADDRESSING_MODE="real";;
48 direct) WANT_ADDRESSING_MODE="direct";;
49 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'`;;
50 esac],
51 [WANT_ADDRESSING_MODE="real"]
52 )
53
54 dnl SDL options.
55 AC_ARG_ENABLE(sdl-static, [ --enable-sdl-static use SDL static libraries for linking [default=no]], [WANT_SDL_STATIC=$enableval], [WANT_SDL_STATIC=no])
56 AC_ARG_ENABLE(sdl-video, [ --enable-sdl-video use SDL for video graphics [default=no]], [WANT_SDL_VIDEO=$enableval], [WANT_SDL_VIDEO=no])
57 AC_ARG_ENABLE(sdl-audio, [ --enable-sdl-audio use SDL for audio [default=no]], [WANT_SDL_AUDIO=$enableval], [WANT_SDL_AUDIO=no])
58
59 dnl Checks for programs.
60 AC_PROG_CC
61 AC_PROG_CPP
62 AC_PROG_CXX
63 AC_PROG_MAKE_SET
64 AC_PROG_INSTALL
65 AC_PROG_EGREP
66 AC_PATH_PROGS(FILE, [file false])
67 AC_PATH_PROG(PERL, [perl])
68
69 dnl Check for PowerPC target CPU.
70 HAVE_PPC=no
71 AC_MSG_CHECKING(for PowerPC target CPU)
72 AC_EGREP_CPP(yes,
73 [
74 #ifdef __powerpc__
75 yes
76 #endif
77 #ifdef __ppc__
78 yes
79 #endif
80 ], [AC_MSG_RESULT(yes); HAVE_PPC=yes], AC_MSG_RESULT(no))
81
82 dnl We use native CPU if possible.
83 EMULATED_PPC=yes
84 case $WANT_EMULATED_PPC in
85 auto) [[ "x$HAVE_PPC" = "xyes" ]] && EMULATED_PPC=no;;
86 no) EMULATED_PPC=no;;
87 esac
88 if [[ "x$EMULATED_PPC" = "xyes" ]]; then
89 AC_DEFINE(EMULATED_PPC, 1, [Define if using a PowerPC CPU emulator.])
90 fi
91
92 dnl We use mon if possible.
93 MONSRCS=
94 case "x$WANT_MON" in
95 x/* | x.*)
96 mon_srcdir=$WANT_MON
97 WANT_MON=yes
98 ;;
99 xyes)
100 mon_srcdir=../../../mon/src
101 ;;
102 esac
103 if [[ "x$WANT_MON" = "xyes" ]]; then
104 AC_MSG_CHECKING(for mon)
105 if grep mon_init $mon_srcdir/mon.h >/dev/null 2>/dev/null; then
106 AC_MSG_RESULT(yes)
107 AC_DEFINE(ENABLE_MON, 1, [Define if using "mon".])
108 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"
109 CXXFLAGS="$CXXFLAGS -I$mon_srcdir -I$mon_srcdir/disass"
110 AC_CHECK_LIB(ncurses, tgetent, ,
111 AC_CHECK_LIB(termcap, tgetent, ,
112 AC_CHECK_LIB(termlib, tgetent, ,
113 AC_CHECK_LIB(terminfo, tgetent, ,
114 AC_CHECK_LIB(Hcurses, tgetent, ,
115 AC_CHECK_LIB(curses, tgetent))))))
116 AC_CHECK_LIB(readline, readline)
117 AC_CHECK_HEADERS(readline.h history.h readline/readline.h readline/history.h)
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 AC_SUBST(MONSRCS)
125
126 dnl Checks for libraries.
127 AC_CHECK_LIB(posix4, sem_init)
128
129 dnl Do we need SDL?
130 WANT_SDL=no
131 if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
132 WANT_SDL=yes
133 WANT_XF86_DGA=no
134 WANT_XF86_VIDMODE=no
135 WANT_FBDEV_DGA=no
136 SDL_SUPPORT="$SDL_SUPPORT video"
137 fi
138 if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
139 WANT_SDL=yes
140 SDL_SUPPORT="$SDL_SUPPORT audio"
141 fi
142 if [[ "x$WANT_SDL" = "xyes" ]]; then
143 AC_PATH_PROG(sdl_config, "sdl-config")
144 if [[ -n "$sdl_config" ]]; then
145 sdl_cflags=`$sdl_config --cflags`
146 if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then
147 sdl_libs=`$sdl_config --static-libs`
148 else
149 sdl_libs=`$sdl_config --libs`
150 fi
151 CFLAGS="$CFLAGS $sdl_cflags"
152 CXXFLAGS="$CXXFLAGS $sdl_cflags"
153 LIBS="$LIBS $sdl_libs"
154 else
155 WANT_SDL=no
156 WANT_SDL_VIDEO=no
157 WANT_SDL_AUDIO=no
158 fi
159 SDL_SUPPORT=`echo "$SDL_SUPPORT" | sed -e "s/^ //"`
160 else
161 SDL_SUPPORT="none"
162 fi
163
164 dnl We need X11, if not using SDL.
165 if [[ "x$WANT_SDL_VIDEO" != "xyes" ]]; then
166 AC_PATH_XTRA
167 if [[ "x$no_x" = "xyes" ]]; then
168 AC_MSG_ERROR([You need X11 to run SheepShaver.])
169 fi
170 CFLAGS="$CFLAGS $X_CFLAGS"
171 CXXFLAGS="$CXXFLAGS $X_CFLAGS"
172 LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS"
173 fi
174
175 dnl We need pthreads on non-PowerPC systems. Try libpthread first, then libc_r (FreeBSD), then PTL.
176 HAVE_PTHREADS=yes
177 case $EMULATED_PPC:$target_os in
178 no:linux*|no:netbsd*)
179 dnl We do have our own pthread_cancel() implementation
180 AC_DEFINE(HAVE_PTHREAD_CANCEL, 1, [Define if you have the pthread_cancel function.])
181 ;;
182 *:*)
183 AC_CHECK_LIB(pthread, pthread_create, , [
184 AC_CHECK_LIB(c_r, pthread_create, , [
185 AC_CHECK_LIB(PTL, pthread_create, , [
186 dnl XXX remove when no pthreads case is merged
187 AC_MSG_ERROR([You need pthreads to run SheepShaver.])
188 HAVE_PTHREADS=no
189 ])
190 ])
191 ])
192 AC_CHECK_FUNCS(pthread_cancel)
193 AC_CHECK_FUNCS(pthread_cond_init pthread_testcancel)
194 AC_CHECK_FUNCS(pthread_mutexattr_setprotocol)
195 AC_CHECK_FUNCS(pthread_mutexattr_settype)
196 AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
197 dnl If POSIX.4 semaphores are not available, we emulate them with pthread mutexes.
198 SEMSRC=
199 AC_CHECK_FUNCS(sem_init, , [
200 if test "x$HAVE_PTHREADS" = "xyes"; then
201 SEMSRC=posix_sem.cpp
202 fi
203 ])
204 ;;
205 esac
206 if [[ "x$HAVE_PTHREADS" = "xyes" ]]; then
207 AC_DEFINE(HAVE_PTHREADS, 1, [Define if pthreads are available.])
208 fi
209
210 dnl We use FBDev DGA if possible.
211 if [[ "x$WANT_FBDEV_DGA" = "xyes" ]]; then
212 AC_CHECK_HEADER(linux/fb.h, [
213 AC_DEFINE(ENABLE_FBDEV_DGA, 1, [Define if using Linux fbdev extension.])
214 ], [
215 AC_MSG_WARN([Could not find Linux FBDev extension, ignoring --enable-fbdev-dga.])
216 WANT_FBDEV_DGA=no
217 ])
218 fi
219
220 dnl We use XFree86 DGA if possible.
221 if [[ "x$WANT_XF86_DGA" = "xyes" ]]; then
222 AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension, [
223 AC_DEFINE(ENABLE_XF86_DGA, 1, [Define if using XFree86 DGA extension.])
224 LIBS="$LIBS -lXxf86dga"
225 ], [
226 AC_MSG_WARN([Could not find XFree86 DGA extension, ignoring --enable-xf86-dga.])
227 WANT_XF86_DGA=no
228 ])
229 fi
230
231 dnl We use XFree86 VidMode if possible.
232 if [[ "x$WANT_XF86_VIDMODE" = "xyes" ]]; then
233 AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension, [
234 AC_DEFINE(ENABLE_XF86_VIDMODE, 1, [Define if using XFree86 DGA extension.])
235 LIBS="$LIBS -lXxf86vm"
236 ], [
237 AC_MSG_WARN([Could not find XFree86 VidMode extension, ignoring --enable-xf86-vidmode.])
238 WANT_XF86_VIDMODE=no
239 ])
240 fi
241
242 dnl We use GTK+ if possible.
243 UISRCS=../dummy/prefs_editor_dummy.cpp
244 case "x$WANT_GTK" in
245 xgtk2*)
246 AM_PATH_GTK_2_0(1.3.15, [
247 AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
248 CFLAGS="$CFLAGS $GTK_CFLAGS"
249 CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
250 LIBS="$LIBS $GTK_LIBS"
251 UISRCS=prefs_editor_gtk.cpp
252 WANT_GTK=gtk2
253 ], [
254 case "x${WANT_GTK}x" in
255 *gtkx)
256 AC_MSG_WARN([Could not find GTK+ 2.0, trying with GTK+ 1.2.])
257 WANT_GTK=gtk
258 ;;
259 *)
260 AC_MSG_WARN([Could not find GTK+, disabling user interface.])
261 WANT_GTK=no
262 ;;
263 esac
264 ])
265 ;;
266 esac
267 if [[ "x$WANT_GTK" = "xgtk" ]]; then
268 AM_PATH_GTK(1.2.0, [
269 AC_DEFINE(ENABLE_GTK, 1, [Define if using GTK.])
270 CFLAGS="$CFLAGS $GTK_CFLAGS"
271 CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
272 LIBS="$LIBS $GTK_LIBS"
273 UISRCS=prefs_editor_gtk.cpp
274 ], [
275 AC_MSG_WARN([Could not find GTK+, disabling user interface.])
276 WANT_GTK=no
277 ])
278 fi
279
280 dnl We use ESD if possible.
281 if [[ "x$WANT_ESD" = "xyes" ]]; then
282 AM_PATH_ESD(0.2.8, [
283 AC_DEFINE(ENABLE_ESD, 1, [Define is using ESD.])
284 CFLAGS="$CFLAGS $ESD_CFLAGS"
285 CXXFLAGS="$CXXFLAGS $ESD_CFLAGS"
286 LIBS="$LIBS $ESD_LIBS"
287 ], [
288 AC_MSG_WARN([Could not find ESD, disabling ESD support.])
289 WANT_ESD=no
290 ])
291 fi
292
293 dnl We use 64-bit file size support if possible.
294 AC_SYS_LARGEFILE
295
296 dnl Checks for header files.
297 AC_HEADER_STDC
298 AC_HEADER_SYS_WAIT
299 AC_CHECK_HEADERS(malloc.h stdint.h)
300 AC_CHECK_HEADERS(mach/vm_map.h mach/mach_init.h sys/mman.h)
301 AC_CHECK_HEADERS(unistd.h fcntl.h byteswap.h dirent.h)
302 AC_CHECK_HEADERS(sys/socket.h sys/ioctl.h sys/filio.h sys/bitypes.h sys/wait.h)
303 AC_CHECK_HEADERS(sys/time.h sys/poll.h sys/select.h arpa/inet.h)
304 AC_CHECK_HEADERS(linux/if.h linux/if_tun.h net/if.h net/if_tun.h, [], [], [
305 #ifdef HAVE_SYS_TYPES_H
306 #include <sys/types.h>
307 #endif
308 #ifdef HAVE_SYS_SOCKET_H
309 #include <sys/socket.h>
310 #endif
311 ])
312 AC_CHECK_HEADERS(AvailabilityMacros.h)
313 AC_CHECK_HEADERS(IOKit/storage/IOBlockStorageDevice.h)
314 AC_CHECK_HEADERS(fenv.h)
315
316 dnl Checks for typedefs, structures, and compiler characteristics.
317 AC_C_BIGENDIAN
318 AC_C_CONST
319 AC_C_INLINE
320 AC_CHECK_SIZEOF(short, 2)
321 AC_CHECK_SIZEOF(int, 4)
322 AC_CHECK_SIZEOF(long, 4)
323 AC_CHECK_SIZEOF(long long, 8)
324 AC_CHECK_SIZEOF(float, 4)
325 AC_CHECK_SIZEOF(double, 8)
326 AC_CHECK_SIZEOF(void *, 4)
327 AC_TYPE_OFF_T
328 AC_CHECK_TYPE(loff_t, off_t)
329 AC_TYPE_SIZE_T
330 AC_TYPE_SIGNAL
331 AC_HEADER_TIME
332 AC_STRUCT_TM
333
334 dnl Check whether sys/socket.h defines type socklen_t.
335 dnl (extracted from ac-archive/Miscellaneous)
336 AC_CACHE_CHECK([for socklen_t],
337 ac_cv_type_socklen_t, [
338 AC_TRY_COMPILE([
339 #include <sys/types.h>
340 #include <sys/socket.h>
341 ], [socklen_t len = 42; return 0;],
342 ac_cv_type_socklen_t=yes, ac_cv_type_socklen_t=no,
343 dnl When cross-compiling, do not assume anything.
344 ac_cv_type_socklen_t="guessing no"
345 )
346 ])
347 if [[ "x$ac_cv_type_socklen_t" != "xyes" ]]; then
348 AC_DEFINE(socklen_t, int, [Define to 'int' if <sys/types.h> doesn't define.])
349 fi
350
351 dnl Check whether struct sigaction has sa_restorer member.
352 AC_CACHE_CHECK([whether struct sigaction has sa_restorer],
353 ac_cv_signal_sa_restorer, [
354 AC_TRY_COMPILE([
355 #include <signal.h>
356 ], [struct sigaction sa; sa.sa_restorer = 0;],
357 ac_cv_signal_sa_restorer=yes, ac_cv_signal_sa_restorer=no,
358 dnl When cross-compiling, do not assume anything.
359 ac_cv_signal_sa_restorer=no
360 )
361 ])
362 if [[ "x$ac_cv_signal_sa_restorer" = "xyes" ]]; then
363 AC_DEFINE(HAVE_SIGNAL_SA_RESTORER, 1, [Define if sa_restorer is available in struct sigaction.])
364 fi
365
366 dnl Checks for library functions.
367 AC_CHECK_FUNCS(strdup strerror strlcpy cfmakeraw)
368 AC_CHECK_FUNCS(nanosleep)
369 AC_CHECK_FUNCS(sigaction signal)
370 AC_CHECK_FUNCS(mmap mprotect munmap)
371 AC_CHECK_FUNCS(vm_allocate vm_deallocate vm_protect)
372 AC_CHECK_FUNCS(exp2f log2f exp2 log2)
373 AC_CHECK_FUNCS(floorf roundf ceilf truncf floor round ceil trunc)
374 AC_CHECK_FUNCS(poll inet_aton)
375
376 dnl Darwin seems to define mach_task_self() instead of task_self().
377 AC_CHECK_FUNCS(mach_task_self task_self)
378
379 dnl We need clock_gettime() for better performance but it may drag
380 dnl libpthread in, which we don't want for native ppc mode
381 case $EMULATED_PPC:$target_os in
382 no:linux*)
383 ;;
384 *:*)
385 AC_SEARCH_LIBS(clock_gettime, [rt posix4])
386 AC_CHECK_FUNCS(clock_gettime clock_nanosleep)
387 ;;
388 esac
389
390 dnl Check for headers and functions related to pty support (sshpty.c)
391 dnl From openssh-3.2.2p1 configure.ac
392 AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h)
393 AC_CHECK_FUNCS(_getpty vhangup strlcpy)
394
395 case "$host" in
396 *-*-hpux10.26)
397 disable_ptmx_check=yes
398 ;;
399 *-*-linux*)
400 no_dev_ptmx=1
401 ;;
402 mips-sony-bsd|mips-sony-newsos4)
403 AC_DEFINE(HAVE_NEWS4, 1, [Define if you are on NEWS-OS (additions from openssh-3.2.2p1, for sshpty.c).])
404 ;;
405 *-*-sco3.2v4*)
406 no_dev_ptmx=1
407 ;;
408 *-*-sco3.2v5*)
409 no_dev_ptmx=1
410 ;;
411 *-*-cygwin*)
412 no_dev_ptmx=1
413 ;;
414 esac
415
416 if test -z "$no_dev_ptmx" ; then
417 if test "x$disable_ptmx_check" != "xyes" ; then
418 AC_CHECK_FILE([/dev/ptmx],
419 [
420 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1, [Define if you have /dev/ptmx.])
421 have_dev_ptmx=1
422 ]
423 )
424 fi
425 fi
426 AC_CHECK_FILE([/dev/ptc],
427 [
428 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1, [Define if you have /dev/ptc.])
429 have_dev_ptc=1
430 ]
431 )
432 dnl (end of code from openssh-3.2.2p1 configure.ac)
433
434 dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES)
435 AC_DEFUN(AC_CHECK_FRAMEWORK, [
436 AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl
437 AC_CACHE_CHECK([whether compiler supports framework $1],
438 ac_Framework, [
439 saved_LIBS="$LIBS"
440 LIBS="$LIBS -framework $1"
441 AC_TRY_LINK(
442 [$2], [int main(void) { return 0; }],
443 [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"]
444 )
445 ])
446 AS_IF([test AS_VAR_GET(ac_Framework) = yes],
447 [AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])]
448 )
449 AS_VAR_POPDEF([ac_Framework])dnl
450 ])
451
452 dnl Check for some MacOS X frameworks
453 AC_CHECK_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>])
454 AC_CHECK_FRAMEWORK(IOKit, [#include <IOKit/IOKitLib.h>])
455 AC_CHECK_FRAMEWORK(CoreFoundation, [#include <CoreFoundation/CoreFoundation.h>])
456
457 dnl Select system-dependant sources.
458 SERIALSRC=serial_unix.cpp
459 ETHERSRC=../dummy/ether_dummy.cpp
460 SCSISRC=../dummy/scsi_dummy.cpp
461 AUDIOSRC=../dummy/audio_dummy.cpp
462 EXTFSSRC=extfs_unix.cpp
463 EXTRASYSSRCS=
464 case "$target_os" in
465 linux*)
466 ETHERSRC=ether_unix.cpp
467 AUDIOSRC=audio_oss_esd.cpp
468 SCSISRC=Linux/scsi_linux.cpp
469 if [[ "x$EMULATED_PPC" = "xno" ]]; then
470 EXTRASYSSRCS="paranoia.cpp Linux/sheepthreads.c ppc_asm.S"
471 fi
472 ;;
473 freebsd*)
474 ETHERSRC=ether_unix.cpp
475 ;;
476 netbsd*)
477 ETHERSRC=ether_unix.cpp
478 if [[ "x$EMULATED_PPC" = "xno" ]]; then
479 EXTRASYSSRCS="paranoia.cpp NetBSD/sheepthreads.c ppc_asm.S"
480 fi
481 ;;
482 darwin*)
483 ETHERSRC=ether_unix.cpp
484 if [[ "x$EMULATED_PPC" = "xno" ]]; then
485 EXTRASYSSRCS="paranoia.cpp ppc_asm.S"
486 fi
487 if [[ "x$ac_cv_framework_IOKit" = "xyes" -a "x$ac_cv_framework_CoreFoundation" = "xyes" ]]; then
488 EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/sys_darwin.cpp"
489 fi
490 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
491 EXTFSSRC=../MacOSX/extfs_macosx.mm
492 fi
493 ;;
494 esac
495
496 dnl Is the slirp library supported?
497 if [[ "x$ETHERSRC" = "xether_unix.cpp" ]]; then
498 AC_DEFINE(HAVE_SLIRP, 1, [Define if slirp library is supported])
499 SLIRP_SRCS="\
500 ../slirp/bootp.c ../slirp/ip_output.c ../slirp/tcp_input.c \
501 ../slirp/cksum.c ../slirp/mbuf.c ../slirp/tcp_output.c \
502 ../slirp/debug.c ../slirp/misc.c ../slirp/tcp_subr.c \
503 ../slirp/if.c ../slirp/sbuf.c ../slirp/tcp_timer.c \
504 ../slirp/ip_icmp.c ../slirp/slirp.c ../slirp/tftp.c \
505 ../slirp/ip_input.c ../slirp/socket.c ../slirp/udp.c"
506 fi
507 AC_SUBST(SLIRP_SRCS)
508
509 dnl SDL overrides
510 if [[ "x$WANT_SDL" = "xyes" ]]; then
511 AC_DEFINE(USE_SDL, 1, [Define to enble SDL support.])
512 fi
513 if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then
514 AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support.])
515 VIDEOSRCS="../SDL/video_sdl.cpp"
516 KEYCODES="../SDL/keycodes"
517 if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then
518 EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/clip_macosx.cpp"
519 else
520 EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp"
521 fi
522 else
523 VIDEOSRCS="video_x.cpp"
524 KEYCODES="keycodes"
525 EXTRASYSSRCS="$EXTRASYSSRCS clip_unix.cpp"
526 fi
527 if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then
528 AC_DEFINE(USE_SDL_AUDIO, 1, [Define to enable SDL audio support])
529 AUDIOSRC="../SDL/audio_sdl.cpp"
530 fi
531
532 SYSSRCS="$VIDEOSRCS $EXTFSSRC $SERIALSRC $ETHERSRC $SCSISRC $AUDIOSRC $SEMSRC $UISRCS $EXTRASYSSRCS"
533
534 dnl Define a macro that translates a yesno-variable into a C macro definition
535 dnl to be put into the config.h file
536 dnl $1 -- the macro to define
537 dnl $2 -- the value to translate
538 dnl $3 -- template name
539 AC_DEFUN(AC_TRANSLATE_DEFINE, [
540 if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
541 AC_DEFINE($1, 1, $3)
542 fi
543 ])
544
545 dnl Check that the host supports TUN/TAP devices
546 AC_CACHE_CHECK([whether TUN/TAP is supported],
547 ac_cv_tun_tap_support, [
548 AC_TRY_COMPILE([
549 #if defined(HAVE_LINUX_IF_H) && defined(HAVE_LINUX_IF_TUN_H)
550 #include <linux/if.h>
551 #include <linux/if_tun.h>
552 #endif
553 #if defined(HAVE_NET_IF_H) && defined(HAVE_NET_IF_TUN_H)
554 #include <net/if.h>
555 #include <net/if_tun.h>
556 #endif
557 ], [
558 struct ifreq ifr;
559 memset(&ifr, 0, sizeof(ifr));
560 ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
561 ],
562 ac_cv_tun_tap_support=yes, ac_cv_tun_tap_support=no
563 )
564 ])
565 AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support",
566 [Define if your system supports TUN/TAP devices.])
567
568 dnl Various checks if the system supports vm_allocate() and the like functions.
569 have_mach_vm=no
570 if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \
571 "x$ac_cv_func_vm_protect" = "xyes" ]]; then
572 have_mach_vm=yes
573 fi
574 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
575 [Define if your system has a working vm_allocate()-based memory allocator.])
576
577 dnl Check that vm_allocate(), vm_protect() work
578 if [[ "x$have_mach_vm" = "xyes" ]]; then
579
580 AC_CACHE_CHECK([whether vm_protect works],
581 ac_cv_vm_protect_works, [
582 AC_LANG_SAVE
583 AC_LANG_CPLUSPLUS
584 ac_cv_vm_protect_works=yes
585 dnl First the tests that should segfault
586 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
587 AC_TRY_RUN([
588 #define CONFIGURE_TEST_VM_MAP
589 #define TEST_VM_PROT_$test_def
590 #include "vm_alloc.cpp"
591 ], ac_cv_vm_protect_works=no, rm -f core,
592 dnl When cross-compiling, do not assume anything
593 ac_cv_vm_protect_works="guessing no"
594 )
595 done
596 AC_TRY_RUN([
597 #define CONFIGURE_TEST_VM_MAP
598 #define TEST_VM_PROT_RDWR_WRITE
599 #include "vm_alloc.cpp"
600 ], , ac_cv_vm_protect_works=no,
601 dnl When cross-compiling, do not assume anything
602 ac_cv_vm_protect_works="guessing no"
603 )
604 AC_LANG_RESTORE
605 ]
606 )
607
608 dnl Remove support for vm_allocate() if vm_protect() does not work
609 if [[ "x$have_mach_vm" = "xyes" ]]; then
610 case $ac_cv_vm_protect_works in
611 *yes) have_mach_vm=yes;;
612 *no) have_mach_vm=no;;
613 esac
614 fi
615 AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
616 [Define if your system has a working vm_allocate()-based memory allocator.])
617
618 fi dnl HAVE_MACH_VM
619
620 dnl Various checks if the system supports mmap() and the like functions.
621 dnl ... and Mach memory allocators are not supported
622 have_mmap_vm=no
623 if [[ "x$ac_cv_func_mmap" = "xyes" -a "x$ac_cv_func_munmap" = "xyes" -a \
624 "x$ac_cv_func_mprotect" = "xyes" ]]; then
625 if [[ "x$have_mach_vm" = "xno" ]]; then
626 have_mmap_vm=yes
627 fi
628 fi
629 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
630 [Define if your system has a working mmap()-based memory allocator.])
631
632 dnl Check that mmap() and associated functions work.
633 if [[ "x$have_mmap_vm" = "xyes" ]]; then
634
635 dnl Check if we have a working anonymous mmap()
636 AC_CACHE_CHECK([whether mmap supports MAP_ANON],
637 ac_cv_mmap_anon, [
638 AC_LANG_SAVE
639 AC_LANG_CPLUSPLUS
640 AC_TRY_RUN([
641 #define HAVE_MMAP_ANON
642 #define CONFIGURE_TEST_VM_MAP
643 #define TEST_VM_MMAP_ANON
644 #include "vm_alloc.cpp"
645 ], ac_cv_mmap_anon=yes, ac_cv_mmap_anon=no,
646 dnl When cross-compiling, do not assume anything.
647 ac_cv_mmap_anon="guessing no"
648 )
649 AC_LANG_RESTORE
650 ]
651 )
652 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANON, "$ac_cv_mmap_anon",
653 [Define if <sys/mman.h> defines MAP_ANON and mmap()'ing with MAP_ANON works.])
654
655 AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
656 ac_cv_mmap_anonymous, [
657 AC_LANG_SAVE
658 AC_LANG_CPLUSPLUS
659 AC_TRY_RUN([
660 #define HAVE_MMAP_ANONYMOUS
661 #define CONFIGURE_TEST_VM_MAP
662 #define TEST_VM_MMAP_ANON
663 #include "vm_alloc.cpp"
664 ], ac_cv_mmap_anonymous=yes, ac_cv_mmap_anonymous=no,
665 dnl When cross-compiling, do not assume anything.
666 ac_cv_mmap_anonymous="guessing no"
667 )
668 AC_LANG_RESTORE
669 ]
670 )
671 AC_TRANSLATE_DEFINE(HAVE_MMAP_ANONYMOUS, "$ac_cv_mmap_anonymous",
672 [Define if <sys/mman.h> defines MAP_ANONYMOUS and mmap()'ing with MAP_ANONYMOUS works.])
673
674 AC_CACHE_CHECK([whether mprotect works],
675 ac_cv_mprotect_works, [
676 AC_LANG_SAVE
677 AC_LANG_CPLUSPLUS
678 ac_cv_mprotect_works=yes
679 dnl First the tests that should segfault
680 for test_def in NONE_READ NONE_WRITE READ_WRITE; do
681 AC_TRY_RUN([
682 #define CONFIGURE_TEST_VM_MAP
683 #define TEST_VM_PROT_$test_def
684 #include "vm_alloc.cpp"
685 ], ac_cv_mprotect_works=no, rm -f core,
686 dnl When cross-compiling, do not assume anything
687 ac_cv_mprotect_works="guessing no"
688 )
689 done
690 AC_TRY_RUN([
691 #define CONFIGURE_TEST_VM_MAP
692 #define TEST_VM_PROT_RDWR_WRITE
693 #include "vm_alloc.cpp"
694 ], , ac_cv_mprotect_works=no,
695 dnl When cross-compiling, do not assume anything
696 ac_cv_mprotect_works="guessing no"
697 )
698 AC_LANG_RESTORE
699 ]
700 )
701
702 dnl Remove support for mmap() if mprotect() does not work
703 if [[ "x$have_mmap_vm" = "xyes" ]]; then
704 case $ac_cv_mprotect_works in
705 *yes) have_mmap_vm=yes;;
706 *no) have_mmap_vm=no;;
707 esac
708 fi
709 AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
710 [Define if your system has a working mmap()-based memory allocator.])
711
712 fi dnl HAVE_MMAP_VM
713
714 dnl Check if we can modify the __PAGEZERO segment for use as Low Memory
715 AC_CACHE_CHECK([whether __PAGEZERO can be Low Memory area 0x0000-0x3000],
716 ac_cv_pagezero_hack, [
717 ac_cv_pagezero_hack=no
718 if AC_TRY_COMMAND([Darwin/testlmem.sh 0x3000]); then
719 ac_cv_pagezero_hack=yes
720 dnl might as well skip the test for mmap-able low memory
721 ac_cv_can_map_lm=no
722 fi
723 ])
724 AC_TRANSLATE_DEFINE(PAGEZERO_HACK, "$ac_cv_pagezero_hack",
725 [Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this system.])
726
727 dnl Check if we can mmap 0x3000 bytes from 0x0000
728 AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x3000],
729 ac_cv_can_map_lm, [
730 AC_LANG_SAVE
731 AC_LANG_CPLUSPLUS
732 AC_TRY_RUN([
733 #include "vm_alloc.cpp"
734 int main(void) { /* returns 0 if we could map the lowmem globals */
735 volatile char * lm = 0;
736 if (vm_init() < 0) exit(1);
737 if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
738 lm[0] = 'z';
739 if (vm_release((char *)lm, 0x2000) < 0) exit(1);
740 vm_exit(); exit(0);
741 }
742 ], ac_cv_can_map_lm=yes, ac_cv_can_map_lm=no,
743 dnl When cross-compiling, do not assume anything.
744 ac_cv_can_map_lm="guessing no"
745 )
746 AC_LANG_RESTORE
747 ]
748 )
749
750 dnl Check signal handlers need to be reinstalled
751 AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
752 ac_cv_signal_need_reinstall, [
753 AC_LANG_SAVE
754 AC_LANG_CPLUSPLUS
755 AC_TRY_RUN([
756 #include <stdlib.h>
757 #ifdef HAVE_UNISTD_H
758 #include <unistd.h>
759 #endif
760 #include <signal.h>
761 static int handled_signal = 0;
762 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
763 int main(void) { /* returns 0 if signals need not to be reinstalled */
764 signal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
765 exit(handled_signal == 2);
766 }
767 ], ac_cv_signal_need_reinstall=yes, ac_cv_signal_need_reinstall=no,
768 dnl When cross-compiling, do not assume anything.
769 ac_cv_signal_need_reinstall="guessing yes"
770 )
771 AC_LANG_RESTORE
772 ]
773 )
774 AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
775 [Define if your system requires signals to be reinstalled.])
776
777 dnl Check if sigaction handlers need to be reinstalled
778 AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
779 ac_cv_sigaction_need_reinstall, [
780 AC_LANG_SAVE
781 AC_LANG_CPLUSPLUS
782 AC_TRY_RUN([
783 #include <stdlib.h>
784 #ifdef HAVE_UNISTD_H
785 #include <unistd.h>
786 #endif
787 #include <signal.h>
788 static int handled_signal = 0;
789 RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
790 typedef RETSIGTYPE (*signal_handler)(int);
791 static signal_handler mysignal(int sig, signal_handler handler) {
792 struct sigaction old_sa;
793 struct sigaction new_sa;
794 new_sa.sa_handler = handler;
795 return ((sigaction(sig,&new_sa,&old_sa) < 0) ? SIG_IGN : old_sa.sa_handler);
796 }
797 int main(void) { /* returns 0 if signals need not to be reinstalled */
798 mysignal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
799 exit(handled_signal == 2);
800 }
801 ], ac_cv_sigaction_need_reinstall=yes, ac_cv_sigaction_need_reinstall=no,
802 dnl When cross-compiling, do not assume anything.
803 ac_cv_sigaction_need_reinstall="guessing yes"
804 )
805 AC_LANG_RESTORE
806 ]
807 )
808 AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
809 [Define if your system requires sigactions to be reinstalled.])
810
811 dnl Check if Mach exceptions supported.
812 AC_CACHE_CHECK([whether your system supports Mach exceptions],
813 ac_cv_have_mach_exceptions, [
814 AC_LANG_SAVE
815 AC_LANG_CPLUSPLUS
816 AC_TRY_RUN([
817 #define HAVE_MACH_EXCEPTIONS 1
818 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
819 #include "vm_alloc.cpp"
820 #include "sigsegv.cpp"
821 ],
822 ac_cv_have_mach_exceptions=yes,
823 ac_cv_have_mach_exceptions=no,
824 dnl When cross-compiling, do not assume anything.
825 ac_cv_have_mach_exceptions=no
826 )
827 AC_LANG_RESTORE
828 ]
829 )
830 if [[ "$ac_cv_have_mach_exceptions" = "yes" ]]; then
831 sigsegv_recovery=mach
832 fi
833 AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions",
834 [Define if your system supports Mach exceptions.])
835
836 dnl Check if Windows exceptions are supported.
837 AC_CACHE_CHECK([whether your system supports Windows exceptions],
838 ac_cv_have_win32_exceptions, [
839 AC_LANG_SAVE
840 AC_LANG_CPLUSPLUS
841 AC_TRY_RUN([
842 #define HAVE_WIN32_EXCEPTIONS 1
843 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
844 #include "vm_alloc.cpp"
845 #include "sigsegv.cpp"
846 ], [
847 sigsegv_recovery=win32
848 ac_cv_have_win32_exceptions=yes
849 ],
850 ac_cv_have_win32_exceptions=no,
851 dnl When cross-compiling, do not assume anything.
852 ac_cv_have_win32_exceptions=no
853 )
854 AC_LANG_RESTORE
855 ]
856 )
857 AC_TRANSLATE_DEFINE(HAVE_WIN32_EXCEPTIONS, "$ac_cv_have_win32_exceptions",
858 [Define if your system supports Windows exceptions.])
859
860 dnl Otherwise, check if extended signals are supported.
861 if [[ -z "$sigsegv_recovery" ]]; then
862 AC_CACHE_CHECK([whether your system supports extended signal handlers],
863 ac_cv_have_extended_signals, [
864 AC_LANG_SAVE
865 AC_LANG_CPLUSPLUS
866 AC_TRY_RUN([
867 #define HAVE_SIGINFO_T 1
868 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
869 #include "vm_alloc.cpp"
870 #include "sigsegv.cpp"
871 ],
872 ac_cv_have_extended_signals=yes,
873 ac_cv_have_extended_signals=no,
874 dnl When cross-compiling, do not assume anything.
875 ac_cv_have_extended_signals=no
876 )
877 AC_LANG_RESTORE
878 ]
879 )
880 if [[ "$ac_cv_have_extended_signals" = "yes" ]]; then
881 sigsegv_recovery=siginfo
882 fi
883 AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals",
884 [Define if your system support extended signals.])
885 fi
886
887 dnl Otherwise, check for subterfuges.
888 if [[ -z "$sigsegv_recovery" ]]; then
889 AC_CACHE_CHECK([whether we then have a subterfuge for your system],
890 ac_cv_have_sigcontext_hack, [
891 AC_LANG_SAVE
892 AC_LANG_CPLUSPLUS
893 AC_TRY_RUN([
894 #define HAVE_SIGCONTEXT_SUBTERFUGE 1
895 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
896 #include "vm_alloc.cpp"
897 #include "sigsegv.cpp"
898 ],
899 ac_cv_have_sigcontext_hack=yes,
900 ac_cv_have_sigcontext_hack=no,
901 dnl When cross-compiling, do not assume anything.
902 ac_cv_have_sigcontext_hack=no
903 )
904 AC_LANG_RESTORE
905 ])
906 if [[ "$ac_cv_have_sigcontext_hack" = "yes" ]]; then
907 sigsegv_recovery=sigcontext
908 fi
909 AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack",
910 [Define if we know a hack to replace siginfo_t->si_addr member.])
911 fi
912
913 dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
914 AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
915 ac_cv_have_skip_instruction, [
916 AC_LANG_SAVE
917 AC_LANG_CPLUSPLUS
918 AC_TRY_RUN([
919 #define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
920 #define CONFIGURE_TEST_SIGSEGV_RECOVERY
921 #include "vm_alloc.cpp"
922 #include "sigsegv.cpp"
923 ], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
924 dnl When cross-compiling, do not assume anything.
925 ac_cv_have_skip_instruction=no
926 )
927 AC_LANG_RESTORE
928 ]
929 )
930 AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
931 [Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
932
933 dnl Can we do Video on SEGV Signals ?
934 CAN_VOSF=no
935 if [[ -n "$sigsegv_recovery" ]]; then
936 CAN_VOSF=yes
937 fi
938
939 dnl Enable VOSF screen updates with this feature is requested and feasible
940 if [[ "x$WANT_VOSF" = "xyes" -a "x$CAN_VOSF" = "xyes" ]]; then
941 AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
942 else
943 WANT_VOSF=no
944 fi
945
946 dnl Check addressing mode to use
947 AC_MSG_CHECKING([for addressing mode to use])
948 if [[ "$EMULATED_PPC" != "yes" ]]; then
949 if [[ "$WANT_ADDRESSING_MODE" != "real" ]]; then
950 AC_MSG_WARN([Running in native PowerPC mode, force use of Real Addressing.])
951 WANT_ADDRESSING_MODE="real"
952 fi
953 fi
954 if [[ "$WANT_ADDRESSING_MODE" = "direct" ]]; then
955 if [[ -n "$NATMEM_OFFSET" ]]; then
956 NATMEM_OFFSET_DEF="-DNATMEM_OFFSET=$NATMEM_OFFSET"
957 fi
958 AC_LANG_SAVE
959 AC_LANG_CPLUSPLUS
960 cat confdefs.h > conftest.$ac_ext
961 cat >> conftest.$ac_ext << EOF
962 #include <stdio.h>
963 #include <string.h>
964 #include "vm_alloc.cpp"
965
966 int main(void)
967 {
968 if (vm_init() < 0)
969 return 1;
970
971 static const struct {
972 unsigned long base;
973 unsigned int size;
974 } ranges[[]] = {
975 { 0x00000000, 0x0003000 },
976 { 0x10000000, 0x2000000 },
977 { 0x40800000, 0x0400000 },
978 { 0x68070000, 0x0010000 },
979 { 0x69000000, 0x0080000 },
980 { 0x68ffe000, 0x0002000 },
981 { 0x5fffe000, 0x0002000 },
982 { 0x60000000, 0x0040000 },
983 };
984 const int n_ranges = sizeof(ranges)/ sizeof(ranges[[0]]);
985
986 #ifdef NATMEM_OFFSET
987 unsigned long ofs = NATMEM_OFFSET;
988 #else
989 for (unsigned long ofs = 0x10000000; ofs <= 0x90000000; ofs += 0x10000000)
990 #endif
991 for (int i = 0; i < n_ranges; i++) {
992 char *m = (char *)(ranges[[i]].base + ofs);
993 if (vm_acquire_fixed(m, ranges[[i]].size) != 0)
994 break;
995 memset(m, 0, ranges[[i]].size);
996 vm_release(m, ranges[[i]].size);
997 if (i == n_ranges - 1) {
998 if (sizeof(void *) == 8 && ofs > 0xffffffff)
999 printf("0x%lxul\n", ofs);
1000 else
1001 printf("0x%08x\n", ofs);
1002 return 0;
1003 }
1004 }
1005
1006 vm_exit();
1007 return 1;
1008 }
1009 EOF
1010 doit='$CXX conftest.$ac_ext -o conftest.$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS $LIBS $NATMEM_OFFSET_DEF >& AS_MESSAGE_LOG_FD'
1011 if AC_TRY_EVAL(doit); then
1012 NATMEM_OFFSET=`./conftest.$ac_exeext`
1013 else
1014 NATMEM_OFFSET=
1015 fi
1016 rm -f conftest*
1017 AC_LANG_RESTORE
1018
1019 if [[ -z "$NATMEM_OFFSET" ]]; then
1020 AC_MSG_ERROR([could not determine a sensible NATMEM_OFFSET value])
1021 else
1022 WANT_ADDRESSING_MODE="direct,$NATMEM_OFFSET"
1023 AC_DEFINE_UNQUOTED(NATMEM_OFFSET, $NATMEM_OFFSET,
1024 [Define constant offset for Mac address translation])
1025 fi
1026 fi
1027 AC_MSG_RESULT($WANT_ADDRESSING_MODE)
1028
1029 dnl Utility macro used by next two tests.
1030 dnl AC_EXAMINE_OBJECT(C source code,
1031 dnl commands examining object file,
1032 dnl [commands to run if compile failed]):
1033 dnl
1034 dnl Compile the source code to an object file; then convert it into a
1035 dnl printable representation. All unprintable characters and
1036 dnl asterisks (*) are replaced by dots (.). All white space is
1037 dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the
1038 dnl output, but runs of newlines are compressed to a single newline.
1039 dnl Finally, line breaks are forcibly inserted so that no line is
1040 dnl longer than 80 columns and the file ends with a newline. The
1041 dnl result of all this processing is in the file conftest.dmp, which
1042 dnl may be examined by the commands in the second argument.
1043 dnl
1044 AC_DEFUN([gcc_AC_EXAMINE_OBJECT],
1045 [AC_LANG_SAVE
1046 AC_LANG_C
1047 dnl Next bit cribbed from AC_TRY_COMPILE.
1048 cat > conftest.$ac_ext <<EOF
1049 [#line __oline__ "configure"
1050 #include "confdefs.h"
1051 $1
1052 ]EOF
1053 if AC_TRY_EVAL(ac_compile); then
1054 od -c conftest.o |
1055 sed ['s/^[0-7]*[ ]*/ /
1056 s/\*/./g
1057 s/ \\n/*/g
1058 s/ [0-9][0-9][0-9]/./g
1059 s/ \\[^ ]/./g'] |
1060 tr -d '
1061 ' | tr -s '*' '
1062 ' | fold | sed '$a\
1063 ' > conftest.dmp
1064 $2
1065 ifelse($3, , , else
1066 $3
1067 )dnl
1068 fi
1069 rm -rf conftest*
1070 AC_LANG_RESTORE])
1071
1072 dnl Floating point format probe.
1073 dnl The basic concept is the same as the above: grep the object
1074 dnl file for an interesting string. We have to watch out for
1075 dnl rounding changing the values in the object, however; this is
1076 dnl handled by ignoring the least significant byte of the float.
1077 dnl
1078 dnl Does not know about VAX G-float or C4x idiosyncratic format.
1079 dnl It does know about PDP-10 idiosyncratic format, but this is
1080 dnl not presently supported by GCC. S/390 "binary floating point"
1081 dnl is in fact IEEE (but maybe we should have that in EBCDIC as well
1082 dnl as ASCII?)
1083 dnl
1084 AC_DEFUN([gcc_AC_C_FLOAT_FORMAT],
1085 [AC_CACHE_CHECK(floating point format, ac_cv_c_float_format,
1086 [gcc_AC_EXAMINE_OBJECT(
1087 [/* This will not work unless sizeof(double) == 8. */
1088 extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
1089
1090 /* This structure must have no internal padding. */
1091 struct possibility {
1092 char prefix[8];
1093 double candidate;
1094 char postfix[8];
1095 };
1096
1097 #define C(cand) { "\nformat:", cand, ":tamrof\n" }
1098 struct possibility table [] =
1099 {
1100 C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
1101 C( 3.53802595280598432000e+18), /* D__float - VAX */
1102 C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
1103 C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
1104 C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
1105 };],
1106 [if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1107 ac_cv_c_float_format='IEEE (big-endian)'
1108 elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
1109 ac_cv_c_float_format='IEEE (big-endian)'
1110 elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
1111 ac_cv_c_float_format='IEEE (little-endian)'
1112 elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
1113 ac_cv_c_float_format='IEEE (little-endian)'
1114 elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
1115 ac_cv_c_float_format='VAX D-float'
1116 elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
1117 ac_cv_c_float_format='PDP-10'
1118 elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1119 ac_cv_c_float_format='IBM 370 hex'
1120 else
1121 AC_MSG_ERROR(Unknown floating point format)
1122 fi],
1123 [AC_MSG_ERROR(compile failed)])
1124 ])
1125 # IEEE is the default format. If the float endianness isn't the same
1126 # as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
1127 # (which is a tristate: yes, no, default). This is only an issue with
1128 # IEEE; the other formats are only supported by a few machines each,
1129 # all with the same endianness.
1130 format=IEEE_FLOAT_FORMAT
1131 fbigend=
1132 case $ac_cv_c_float_format in
1133 'IEEE (big-endian)' )
1134 if test $ac_cv_c_bigendian = no; then
1135 fbigend=1
1136 fi
1137 ;;
1138 'IEEE (little-endian)' )
1139 if test $ac_cv_c_bigendian = yes; then
1140 fbigend=0
1141 fi
1142 ;;
1143 'VAX D-float' )
1144 format=VAX_FLOAT_FORMAT
1145 ;;
1146 'PDP-10' )
1147 format=PDP10_FLOAT_FORMAT
1148 ;;
1149 'IBM 370 hex' )
1150 format=IBM_FLOAT_FORMAT
1151 ;;
1152 esac
1153 AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format,
1154 [Define to the floating point format of the host machine.])
1155 if test -n "$fbigend"; then
1156 AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend,
1157 [Define to 1 if the host machine stores floating point numbers in
1158 memory with the word containing the sign bit at the lowest address,
1159 or to 0 if it does it the other way around.
1160
1161 This macro should not be defined if the ordering is the same as for
1162 multi-word integers.])
1163 fi
1164 ])
1165
1166 dnl Check for host float format
1167 gcc_AC_C_FLOAT_FORMAT
1168
1169 dnl Platform specific binary postprocessor
1170 AC_PATH_PROG(BLESS, "true")
1171 if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then
1172 BLESS=Darwin/lowmem
1173 LDFLAGS="$LDFLAGS -pagezero_size 0x3000"
1174 fi
1175
1176 dnl Check for GCC 2.7 or higher.
1177 HAVE_GCC27=no
1178 AC_MSG_CHECKING(for GCC 2.7 or higher)
1179 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5)
1180 # error gcc < 2.7
1181 #endif
1182 ]])],
1183 [AC_MSG_RESULT(yes); HAVE_GCC27=yes],
1184 [AC_MSG_RESULT(no)])
1185
1186 dnl Check for GCC 3.0 or higher.
1187 HAVE_GCC30=no
1188 AC_MSG_CHECKING(for GCC 3.0 or higher)
1189 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ >= 3)
1190 # error gcc < 3
1191 #endif
1192 ]])],
1193 [AC_MSG_RESULT(yes); HAVE_GCC30=yes],
1194 [AC_MSG_RESULT(no)])
1195
1196 dnl Check for ICC.
1197 AC_MSG_CHECKING(for ICC)
1198 HAVE_ICC=no
1199 if $CXX -V -v 2>&1 | grep -q "Intel(R) C++ Compiler"; then
1200 HAVE_ICC=yes
1201 fi
1202 AC_MSG_RESULT($HAVE_ICC)
1203
1204 dnl Determine the generated object format
1205 AC_CACHE_CHECK([the format of compiler generated objects],
1206 ac_cv_object_format, [
1207 echo 'int i;' > conftest.$ac_ext
1208 ac_cv_object_format=no
1209 if AC_TRY_EVAL(ac_compile); then
1210 case `/usr/bin/file conftest.$ac_objext` in
1211 *"ELF"*)
1212 ac_cv_object_format=elf
1213 ;;
1214 *"Mach-O"*)
1215 ac_cv_object_format=mach
1216 ;;
1217 *)
1218 ac_cv_object_format=unknown
1219 ;;
1220 esac
1221 fi
1222 rm -rf conftest*
1223 ])
1224
1225 dnl Add -fno-strict-aliasing for slirp sources
1226 if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1227 SAVED_CFLAGS="$CFLAGS"
1228 CFLAGS="$CFLAGS -fno-strict-aliasing"
1229 AC_CACHE_CHECK([whether the compiler supports -fno-strict-aliasing],
1230 ac_cv_gcc_no_strict_aliasing, [
1231 AC_TRY_COMPILE([],[],
1232 [ac_cv_gcc_no_strict_aliasing=yes; AC_SUBST(SLIRP_CFLAGS, "-fno-strict-aliasing")],
1233 [ac_cv_gcc_no_strict_aliasing=no])
1234 ])
1235 CFLAGS="$SAVED_CFLAGS"
1236 fi
1237
1238 dnl Add -mdynamic-no-pic for MacOS X
1239 if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1240 SAVED_CFLAGS="$CFLAGS"
1241 CFLAGS="$CFLAGS -mdynamic-no-pic"
1242 AC_CACHE_CHECK([whether the compiler supports -mdynamic-no-pic],
1243 ac_cv_gcc_mdynamic_no_pic, [
1244 AC_TRY_COMPILE([],[],[ac_cv_gcc_mdynamic_no_pic=yes],[ac_cv_gcc_mdynamic_no_pic=no])
1245 ])
1246 if [[ "x$ac_cv_gcc_mdynamic_no_pic" = "xyes" ]]; then
1247 CXXFLAGS="$CXXFLAGS -mdynamic-no-pic"
1248 else
1249 CFLAGS="$SAVED_CFLAGS"
1250 fi
1251 fi
1252
1253 dnl CPU emulator sources
1254 if [[ "x$EMULATED_PPC" = "xyes" ]]; then
1255 CPUSRCS="\
1256 ../kpx_cpu/src/mathlib/ieeefp.cpp \
1257 ../kpx_cpu/src/mathlib/mathlib.cpp \
1258 ../kpx_cpu/src/cpu/ppc/ppc-cpu.cpp \
1259 ../kpx_cpu/src/cpu/ppc/ppc-decode.cpp \
1260 ../kpx_cpu/src/cpu/ppc/ppc-execute.cpp \
1261 ../kpx_cpu/src/cpu/ppc/ppc-translate.cpp"
1262 CPPFLAGS="$CPPFLAGS -I../kpx_cpu/include -I../kpx_cpu/src"
1263
1264 dnl Enable JIT compiler, if possible
1265 if [[ "x$WANT_JIT" = "xyes" ]]; then
1266 AC_CACHE_CHECK([whether dyngen can be used],
1267 ac_cv_use_dyngen, [
1268 case $host_cpu:$ac_cv_object_format in
1269 powerpc:elf)
1270 ac_cv_use_dyngen=yes
1271 ;;
1272 x86_64:elf)
1273 ac_cv_use_dyngen=yes
1274 ;;
1275 i?86:elf)
1276 ac_cv_use_dyngen=yes
1277 ;;
1278 powerpc:mach)
1279 ac_cv_use_dyngen=yes
1280 ;;
1281 *:*)
1282 ac_cv_use_dyngen=no
1283 ;;
1284 esac
1285 dnl Check for a suitable synthetic opcodes compiler (icc is faking itself as gcc 3.2.2)
1286 if [[ -z "$DYNGEN_CC" ]]; then
1287 if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
1288 DYNGEN_CC=$CXX
1289 else
1290 for p in /usr/bin /usr/local/bin; do
1291 gxx="$p/g++"
1292 if [[ -x "$gxx" ]]; then
1293 DYNGEN_CC="$gxx"
1294 fi
1295 done
1296 fi
1297 fi
1298 if [[ -z "$DYNGEN_CC" ]]; then
1299 ac_cv_use_dyngen=no
1300 fi
1301 ])
1302 if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
1303 case $host_cpu in
1304 i?86)
1305 DYNGEN_OP_FLAGS="-fomit-frame-pointer -mpreferred-stack-boundary=2"
1306 ;;
1307 powerpc)
1308 if [[ "x$ac_cv_object_format" = "xmach" ]]; then
1309 DYNGEN_OP_FLAGS="-mdynamic-no-pic"
1310 fi
1311 ;;
1312 esac
1313 if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1314 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -falign-functions=0"
1315 else
1316 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -malign-functions=0"
1317 fi
1318 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -finline-functions -finline-limit=10000 -fno-exceptions -g0"
1319 if [[ "x$HAVE_GCC30" = "xyes" ]]; then
1320 DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -fno-reorder-blocks -fno-optimize-sibling-calls"
1321 fi
1322 else
1323 WANT_JIT=no
1324 fi
1325 AC_TRANSLATE_DEFINE(ENABLE_DYNGEN, $ac_cv_use_dyngen, [Define to enable dyngen engine])
1326 if [[ "x$WANT_JIT" = "xyes" ]]; then
1327 DYNGENSRCS="\
1328 ../kpx_cpu/src/cpu/jit/dyngen.c \
1329 ../kpx_cpu/src/cpu/jit/cxxdemangle.cpp"
1330 CPUSRCS="\
1331 ../kpx_cpu/src/cpu/jit/jit-cache.cpp \
1332 ../kpx_cpu/src/cpu/jit/basic-dyngen.cpp \
1333 ../kpx_cpu/src/cpu/ppc/ppc-dyngen.cpp $CPUSRCS"
1334 fi
1335 fi
1336 CPUSRCS="$CPUSRCS ../kpx_cpu/sheepshaver_glue.cpp"
1337 else
1338 WANT_JIT=no
1339 fi
1340 if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
1341 AC_CACHE_CHECK([whether static data regions are executable],
1342 ac_cv_have_static_data_exec, [
1343 AC_TRY_RUN([int main(void) {
1344 #if defined(__powerpc__) || defined(__ppc__)
1345 static unsigned int p[8] = {0x4e800020,};
1346 asm volatile("dcbst 0,%0" : : "r" (p) : "memory");
1347 asm volatile("sync" : : : "memory");
1348 asm volatile("icbi 0,%0" : : "r" (p) : "memory");
1349 asm volatile("sync" : : : "memory");
1350 asm volatile("isync" : : : "memory");
1351 ((void (*)(void))p)();
1352 return 0;
1353 #endif
1354 return 1;
1355 }], ac_cv_have_static_data_exec=yes, ac_cv_have_static_data_exec=no,
1356 dnl When cross-compiling, do not assume anything.
1357 ac_cv_have_static_data_exec=no
1358 )
1359 ])
1360 else
1361 ac_cv_use_dyngen=no
1362 fi
1363 AC_TRANSLATE_DEFINE(HAVE_STATIC_DATA_EXEC, "$ac_cv_have_static_data_exec",
1364 [Define if your system marks static data pages as executable.])
1365
1366 if [[ "x$WANT_JIT" = "xyes" ]]; then
1367 CPPFLAGS="$CPPFLAGS -DUSE_JIT"
1368 fi
1369
1370 dnl Generate Makefile.
1371 AC_SUBST(PERL)
1372 AC_SUBST(USE_DYNGEN, [$ac_cv_use_dyngen])
1373 AC_SUBST(DYNGENSRCS)
1374 AC_SUBST(DYNGEN_CC)
1375 AC_SUBST(DYNGEN_OP_FLAGS)
1376 AC_SUBST(SYSSRCS)
1377 AC_SUBST(CPUSRCS)
1378 AC_SUBST(BLESS)
1379 AC_SUBST(KEYCODES)
1380 AC_OUTPUT([
1381 Makefile
1382 ../MacOSX/Info.plist
1383 ])
1384
1385 dnl Print summary.
1386 echo
1387 echo SheepShaver configuration summary:
1388 echo
1389 echo SDL support ...................... : $SDL_SUPPORT
1390 echo FBDev DGA support ................ : $WANT_FBDEV_DGA
1391 echo XFree86 DGA support .............. : $WANT_XF86_DGA
1392 echo XFree86 VidMode support .......... : $WANT_XF86_VIDMODE
1393 echo Using PowerPC emulator ........... : $EMULATED_PPC
1394 echo Enable JIT compiler .............. : $WANT_JIT
1395 echo Enable video on SEGV signals ..... : $WANT_VOSF
1396 echo ESD sound support ................ : $WANT_ESD
1397 echo GTK user interface ............... : $WANT_GTK
1398 echo mon debugger support ............. : $WANT_MON
1399 echo Addressing mode .................. : $WANT_ADDRESSING_MODE
1400 echo Bad memory access recovery type .. : $sigsegv_recovery
1401 echo
1402 echo "Configuration done. Now type \"make\"."