ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/Unix/configure.ac
Revision: 1.7
Committed: 2004-07-19T19:42:21Z (19 years, 11 months ago) by gbeauche
Branch: MAIN
Changes since 1.6: +14 -3 lines
Log Message:
SDL audio support

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