--- SheepShaver/src/Unix/configure.ac 2004/07/19 19:42:21 1.7 +++ SheepShaver/src/Unix/configure.ac 2004/11/24 22:48:02 1.10 @@ -25,6 +25,17 @@ AC_ARG_WITH(gtk, [ --with-gt AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes]) AC_ARG_WITH(dgcc, [ --with-dgcc=COMPILER use C++ COMPILER to compile synthetic opcodes], [DYNGEN_CC=$withval]) +dnl Addressing mode +AC_ARG_ENABLE(addressing, + [ --enable-addressing=AM set the addressing mode to use [default=real]], + [case "$enableval" in + real) WANT_ADDRESSING_MODE="real";; + direct) WANT_ADDRESSING_MODE="direct";; + direct,0x*) WANT_ADDRESSING_MODE="direct"; NATMEM_OFFSET=`echo "$enableval" | sed -n '/direct,\(0[[xX]][[0-9A-Fa-f]]*\)/s//\1/p'`;; + esac], + [WANT_ADDRESSING_MODE="real"] +) + dnl SDL options. AC_ARG_ENABLE(sdl-static, [ --enable-sdl-static use SDL static libraries for linking [default=no]], [WANT_SDL_STATIC=$enableval], [WANT_SDL_STATIC=no]) AC_ARG_ENABLE(sdl-video, [ --enable-sdl-video use SDL for video graphics [default=no]], [WANT_SDL_VIDEO=$enableval], [WANT_SDL_VIDEO=no]) @@ -37,6 +48,7 @@ AC_PROG_CXX AC_PROG_MAKE_SET AC_PROG_INSTALL AC_PROG_EGREP +AC_CHECK_PROGS(FILE, [file false]) dnl Check for PowerPC target CPU. HAVE_PPC=no @@ -113,12 +125,21 @@ fi if [[ "x$WANT_SDL" = "xyes" ]]; then AC_PATH_PROG(sdl_config, "sdl-config") if [[ -n "$sdl_config" ]]; then - sdl_cflags=`$sdl_config --cflags` - if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then - sdl_libs=`$sdl_config --static-libs` - else - sdl_libs=`$sdl_config --libs` - fi + case $target_os in + # Special treatment for Cygwin so that we can still use the POSIX layer + *cygwin*) + sdl_cflags="-I`$sdl_config --prefix`/include/SDL" + sdl_libs="-L`$sdl_config --exec-prefix`/lib -lSDL" + ;; + *) + sdl_cflags=`$sdl_config --cflags` + if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then + sdl_libs=`$sdl_config --static-libs` + else + sdl_libs=`$sdl_config --libs` + fi + ;; + esac CFLAGS="$CFLAGS $sdl_cflags" CXXFLAGS="$CXXFLAGS $sdl_cflags" LIBS="$LIBS $sdl_libs" @@ -229,6 +250,7 @@ AC_SYS_LARGEFILE dnl Checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT +AC_CHECK_HEADERS(malloc.h) AC_CHECK_HEADERS(mach/vm_map.h mach/mach_init.h sys/mman.h) AC_CHECK_HEADERS(sys/time.h sys/times.h sys/socket.h) AC_CHECK_HEADERS(unistd.h fcntl.h byteswap.h dirent.h) @@ -238,6 +260,7 @@ AC_CHECK_HEADERS(linux/if.h, [], [], [ #endif ]) AC_CHECK_HEADERS(linux/if_tun.h net/if.h net/if_tun.h) +AC_CHECK_HEADERS(fenv.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_BIGENDIAN @@ -294,6 +317,50 @@ no:linux*) ;; esac +dnl Check for headers and functions related to pty support (sshpty.c) +dnl From openssh-3.2.2p1 configure.ac +AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h) +AC_CHECK_FUNCS(_getpty vhangup strlcpy) + +case "$host" in +*-*-hpux10.26) + disable_ptmx_check=yes + ;; +*-*-linux*) + no_dev_ptmx=1 + ;; +mips-sony-bsd|mips-sony-newsos4) + AC_DEFINE(HAVE_NEWS4, 1, [Define if you are on NEWS-OS (additions from openssh-3.2.2p1, for sshpty.c).]) + ;; +*-*-sco3.2v4*) + no_dev_ptmx=1 + ;; +*-*-sco3.2v5*) + no_dev_ptmx=1 + ;; +*-*-cygwin*) + no_dev_ptmx=1 + ;; +esac + +if test -z "$no_dev_ptmx" ; then + if test "x$disable_ptmx_check" != "xyes" ; then + AC_CHECK_FILE([/dev/ptmx], + [ + AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1, [Define if you have /dev/ptmx.]) + have_dev_ptmx=1 + ] + ) + fi +fi +AC_CHECK_FILE([/dev/ptc], + [ + AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1, [Define if you have /dev/ptc.]) + have_dev_ptc=1 + ] +) +dnl (end of code from openssh-3.2.2p1 configure.ac) + dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES) AC_DEFUN(AC_CHECK_FRAMEWORK, [ AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl @@ -343,6 +410,9 @@ darwin*) EXTFSSRC=../MacOSX/extfs_macosx.mm fi ;; +cygwin*) + SERIALSRC="../dummy/serial_dummy.cpp" + ;; esac dnl SDL overrides @@ -356,7 +426,14 @@ if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; th if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then EXTRASYSSRCS="$EXTRASYSSRCS ../MacOSX/clip_macosx.cpp" else - EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp" + case "$target_os" in + cygwin*) + EXTRASYSSRCS="$EXTRASYSSRCS ../Windows/clip_windows.cpp" + ;; + *) + EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp" + ;; + esac fi else VIDEOSRCS="video_x.cpp" @@ -672,6 +749,30 @@ fi AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions", [Define if your system supports Mach exceptions.]) +dnl Check if Windows exceptions are supported. +AC_CACHE_CHECK([whether your system supports Windows exceptions], + ac_cv_have_win32_exceptions, [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_RUN([ + #define HAVE_WIN32_EXCEPTIONS 1 + #define CONFIGURE_TEST_SIGSEGV_RECOVERY + #include "vm_alloc.cpp" + #include "sigsegv.cpp" + ], [ + sigsegv_recovery=win32 + ac_cv_have_win32_exceptions=yes + ], + ac_cv_have_win32_exceptions=no, + dnl When cross-compiling, do not assume anything. + ac_cv_have_win32_exceptions=no + ) + AC_LANG_RESTORE + ] +) +AC_TRANSLATE_DEFINE(HAVE_WIN32_EXCEPTIONS, "$ac_cv_have_win32_exceptions", + [Define if your system supports Windows exceptions.]) + dnl Otherwise, check if extended signals are supported. if [[ -z "$sigsegv_recovery" ]]; then AC_CACHE_CHECK([whether your system supports extended signal handlers], @@ -758,6 +859,92 @@ else WANT_VOSF=no fi +dnl Check addressing mode to use +AC_MSG_CHECKING([for addressing mode to use]) +case "$os_target" in +cygwin*) + WANT_ADDRESSING_MODE="direct,cygwin-hack" + NATMEM_OFFSET= + ;; +esac +if [[ "$EMULATED_PPC" != "yes" ]]; then + if [[ "$WANT_ADDRESSING_MODE" != "real" ]]; then + AC_MSG_WARN([Running in native PowerPC mode, force use of Real Addressing.]) + WANT_ADDRESSING_MODE="real" + fi +fi +if [[ "$WANT_ADDRESSING_MODE" = "direct" ]]; then + if [[ -n "$NATMEM_OFFSET" ]]; then + NATMEM_OFFSET_DEF="-DNATMEM_OFFSET=$NATMEM_OFFSET" + fi + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + cat confdefs.h > conftest.$ac_ext + cat >> conftest.$ac_ext << EOF +#include +#include +#include "vm_alloc.cpp" + +int main(void) +{ + if (vm_init() < 0) + return 1; + + static const struct { + unsigned long base; + unsigned int size; + } ranges[[]] = { + { 0x00000000, 0x0003000 }, + { 0x10000000, 0x2000000 }, + { 0x40800000, 0x0400000 }, + { 0x68070000, 0x0010000 }, + { 0x69000000, 0x0080000 }, + { 0x68ffe000, 0x0002000 }, + { 0x5fffe000, 0x0002000 }, + { 0x60000000, 0x0040000 }, + }; + const int n_ranges = sizeof(ranges)/ sizeof(ranges[[0]]); + +#ifdef NATMEM_OFFSET + unsigned long ofs = NATMEM_OFFSET; +#else + for (unsigned long ofs = 0x10000000; ofs <= 0x90000000; ofs += 0x10000000) +#endif + for (int i = 0; i < n_ranges; i++) { + char *m = (char *)(ranges[[i]].base + ofs); + if (vm_acquire_fixed(m, ranges[[i]].size) != 0) + break; + memset(m, 0, ranges[[i]].size); + vm_release(m, ranges[[i]].size); + if (i == n_ranges - 1) { + printf("0x%08x\n", ofs); + return 0; + } + } + + vm_exit(); + return 1; +} +EOF + doit='$CXX conftest.$ac_ext -o conftest.$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS $LIBS $NATMEM_OFFSET_DEF >& AS_MESSAGE_LOG_FD' + if AC_TRY_EVAL(doit); then + NATMEM_OFFSET=`./conftest.$ac_exeext` + else + NATMEM_OFFSET= + fi + rm -f conftest* + AC_LANG_RESTORE + + if [[ -z "$NATMEM_OFFSET" ]]; then + AC_MSG_ERROR([could not determine a sensible NATMEM_OFFSET value]) + else + WANT_ADDRESSING_MODE="direct,$NATMEM_OFFSET" + AC_DEFINE_UNQUOTED(NATMEM_OFFSET, $NATMEM_OFFSET, + [Define constant offset for Mac address translation]) + fi +fi +AC_MSG_RESULT($WANT_ADDRESSING_MODE) + dnl Platform specific binary postprocessor AC_PATH_PROG(BLESS, "true") if [[ "x$ac_cv_pagezero_hack" = "xyes" ]]; then @@ -791,25 +978,28 @@ if $CXX -V -v 2>&1 | grep -q "Intel(R) C fi AC_MSG_RESULT($HAVE_ICC) -# Test if the compiler can generate ELF objects +dnl Determine the generated object format AC_CACHE_CHECK([whether the compiler can generate ELF objects], - ac_cv_elf_objects, [ + ac_cv_object_format, [ echo 'int i;' > conftest.$ac_ext - ac_cv_elf_objects=no + ac_cv_object_format=no if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *"ELF"*) - ac_cv_elf_objects=yes + ac_cv_object_format=elf + ;; + *) + ac_cv_object_format=unknown ;; esac fi rm -rf conftest* ]) -ELF_OBJECTS=$ac_cv_elf_objects dnl CPU emulator sources if [[ "x$EMULATED_PPC" = "xyes" ]]; then CPUSRCS="\ + ../kpx_cpu/src/mathlib/ieeefp.cpp \ ../kpx_cpu/src/cpu/ppc/ppc-cpu.cpp \ ../kpx_cpu/src/cpu/ppc/ppc-decode.cpp \ ../kpx_cpu/src/cpu/ppc/ppc-execute.cpp \ @@ -820,14 +1010,14 @@ if [[ "x$EMULATED_PPC" = "xyes" ]]; then if [[ "x$WANT_JIT" = "xyes" ]]; then AC_CACHE_CHECK([whether dyngen can be used], ac_cv_use_dyngen, [ - case $host_cpu:$ELF_OBJECTS in - powerpc:yes) + case $host_cpu:$ac_cv_object_format in + powerpc:elf) ac_cv_use_dyngen=yes ;; - x86_64:yes) + x86_64:elf) ac_cv_use_dyngen=yes ;; - i?86:yes) + i?86:elf) ac_cv_use_dyngen=yes ;; *:*) @@ -949,6 +1139,7 @@ echo Enable video on SEGV signals ..... echo ESD sound support ................ : $WANT_ESD echo GTK user interface ............... : $WANT_GTK echo mon debugger support ............. : $WANT_MON +echo Addressing mode .................. : $WANT_ADDRESSING_MODE echo Bad memory access recovery type .. : $sigsegv_recovery echo echo "Configuration done. Now type \"make\"."