413
408
AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support",
414
409
[Define if your system supports TUN/TAP devices.])
416
dnl Various checks if the system supports vm_allocate() and the like functions.
418
if [[ "x$ac_cv_func_vm_allocate" = "xyes" -a "x$ac_cv_func_vm_deallocate" = "xyes" -a \
419
"x$ac_cv_func_vm_protect" = "xyes" ]]; then
422
AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
423
[Define if your system has a working vm_allocate()-based memory allocator.])
425
dnl Check that vm_allocate(), vm_protect() work
426
if [[ "x$have_mach_vm" = "xyes" ]]; then
428
AC_CACHE_CHECK([whether vm_protect works],
429
ac_cv_vm_protect_works, [
432
ac_cv_vm_protect_works=yes
433
dnl First the tests that should segfault
434
for test_def in NONE_READ NONE_WRITE READ_WRITE; do
436
#define CONFIGURE_TEST_VM_MAP
437
#define TEST_VM_PROT_$test_def
438
#include "../Unix/vm_alloc.cpp"
439
], ac_cv_vm_protect_works=no, rm -f core,
440
dnl When cross-compiling, do not assume anything
441
ac_cv_vm_protect_works="guessing no"
445
#define CONFIGURE_TEST_VM_MAP
446
#define TEST_VM_PROT_RDWR_WRITE
447
#include "../Unix/vm_alloc.cpp"
448
], , ac_cv_vm_protect_works=no,
449
dnl When cross-compiling, do not assume anything
450
ac_cv_vm_protect_works="guessing no"
456
dnl Remove support for vm_allocate() if vm_protect() does not work
457
if [[ "x$have_mach_vm" = "xyes" ]]; then
458
case $ac_cv_vm_protect_works in
459
*yes) have_mach_vm=yes;;
460
*no) have_mach_vm=no;;
463
AC_TRANSLATE_DEFINE(HAVE_MACH_VM, "$have_mach_vm",
464
[Define if your system has a working vm_allocate()-based memory allocator.])
468
dnl Various checks if the system supports mmap() and the like functions.
469
dnl ... and Mach memory allocators are not supported
471
if [[ "x$ac_cv_func_mmap" = "xyes" -a "x$ac_cv_func_munmap" = "xyes" -a \
472
"x$ac_cv_func_mprotect" = "xyes" ]]; then
473
if [[ "x$have_mach_vm" = "xno" ]]; then
477
AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, "$have_mmap_vm",
478
[Define if your system has a working mmap()-based memory allocator.])
480
dnl Check that mmap() and associated functions work.
481
if [[ "x$have_mmap_vm" = "xyes" ]]; then
483
dnl Check if we have a working anonymous mmap()
484
AC_CACHE_CHECK([whether mmap supports MAP_ANON],
489
#define HAVE_MMAP_ANON
490
#define CONFIGURE_TEST_VM_MAP
491
#define TEST_VM_MMAP_ANON
492
#include "../Unix/vm_alloc.cpp"
493
], ac_cv_mmap_anon=yes, ac_cv_mmap_anon=no,
494
dnl When cross-compiling, do not assume anything.
495
ac_cv_mmap_anon="guessing no"
500
AC_TRANSLATE_DEFINE(HAVE_MMAP_ANON, "$ac_cv_mmap_anon",
501
[Define if <sys/mman.h> defines MAP_ANON and mmap()'ing with MAP_ANON works.])
503
AC_CACHE_CHECK([whether mmap supports MAP_ANONYMOUS],
504
ac_cv_mmap_anonymous, [
508
#define HAVE_MMAP_ANONYMOUS
509
#define CONFIGURE_TEST_VM_MAP
510
#define TEST_VM_MMAP_ANON
511
#include "../Unix/vm_alloc.cpp"
512
], ac_cv_mmap_anonymous=yes, ac_cv_mmap_anonymous=no,
513
dnl When cross-compiling, do not assume anything.
514
ac_cv_mmap_anonymous="guessing no"
519
AC_TRANSLATE_DEFINE(HAVE_MMAP_ANONYMOUS, "$ac_cv_mmap_anonymous",
520
[Define if <sys/mman.h> defines MAP_ANONYMOUS and mmap()'ing with MAP_ANONYMOUS works.])
522
AC_CACHE_CHECK([whether mprotect works],
523
ac_cv_mprotect_works, [
526
ac_cv_mprotect_works=yes
527
dnl First the tests that should segfault
528
for test_def in NONE_READ NONE_WRITE READ_WRITE; do
530
#define CONFIGURE_TEST_VM_MAP
531
#define TEST_VM_PROT_$test_def
532
#include "../Unix/vm_alloc.cpp"
533
], ac_cv_mprotect_works=no, rm -f core,
534
dnl When cross-compiling, do not assume anything
535
ac_cv_mprotect_works="guessing no"
539
#define CONFIGURE_TEST_VM_MAP
540
#define TEST_VM_PROT_RDWR_WRITE
541
#include "../Unix/vm_alloc.cpp"
542
], , ac_cv_mprotect_works=no,
543
dnl When cross-compiling, do not assume anything
544
ac_cv_mprotect_works="guessing no"
550
dnl Remove support for mmap() if mprotect() does not work
551
if [[ "x$have_mmap_vm" = "xyes" ]]; then
552
case $ac_cv_mprotect_works in
553
*yes) have_mmap_vm=yes;;
554
*no) have_mmap_vm=no;;
557
AC_TRANSLATE_DEFINE(HAVE_MMAP_VM, $have_mmap_vm,
558
[Define if your system has a working mmap()-based memory allocator.])
562
dnl Check if we can modify the __PAGEZERO segment for use as Low Memory
563
AC_CACHE_CHECK([whether __PAGEZERO can be Low Memory area 0x0000-0x2000],
564
ac_cv_pagezero_hack, [
565
ac_cv_pagezero_hack=no
566
if AC_TRY_COMMAND([Darwin/testlmem.sh 0x2000]); then
567
ac_cv_pagezero_hack=yes
568
dnl might as well skip the test for mmap-able low memory
572
AC_TRANSLATE_DEFINE(PAGEZERO_HACK, "$ac_cv_pagezero_hack",
573
[Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this system.])
575
dnl Check if we can mmap 0x2000 bytes from 0x0000
576
AC_CACHE_CHECK([whether we can map Low Memory area 0x0000-0x2000],
581
#include "../Unix/vm_alloc.cpp"
582
int main(void) { /* returns 0 if we could map the lowmem globals */
583
volatile char * lm = 0;
584
if (vm_init() < 0) exit(1);
585
if (vm_acquire_fixed(0, 0x2000) < 0) exit(1);
587
if (vm_release((char *)lm, 0x2000) < 0) exit(1);
590
], ac_cv_can_map_lm=yes, ac_cv_can_map_lm=no,
591
dnl When cross-compiling, do not assume anything.
592
ac_cv_can_map_lm="guessing no"
598
411
dnl Check signal handlers need to be reinstalled
599
412
AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
600
413
ac_cv_signal_need_reinstall, [
656
469
AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
657
470
[Define if your system requires sigactions to be reinstalled.])
659
dnl Check if Mach exceptions supported.
660
AC_CACHE_CHECK([whether your system supports Mach exceptions],
661
ac_cv_have_mach_exceptions, [
665
#define HAVE_MACH_EXCEPTIONS 1
666
#define CONFIGURE_TEST_SIGSEGV_RECOVERY
667
#include "../Unix/vm_alloc.cpp"
668
#include "../Unix/sigsegv.cpp"
670
sigsegv_recovery=mach
671
ac_cv_have_mach_exceptions=yes
673
ac_cv_have_mach_exceptions=no,
674
dnl When cross-compiling, do not assume anything.
675
ac_cv_have_mach_exceptions=no
680
AC_TRANSLATE_DEFINE(HAVE_MACH_EXCEPTIONS, "$ac_cv_have_mach_exceptions",
681
[Define if your system supports Mach exceptions.])
683
dnl Otherwise, check if extended signals are supported.
684
if [[ -z "$sigsegv_recovery" ]]; then
685
AC_CACHE_CHECK([whether your system supports extended signal handlers],
686
ac_cv_have_extended_signals, [
690
#define HAVE_SIGINFO_T 1
691
#define CONFIGURE_TEST_SIGSEGV_RECOVERY
692
#include "../Unix/vm_alloc.cpp"
693
#include "../Unix/sigsegv.cpp"
695
sigsegv_recovery=siginfo
696
ac_cv_have_extended_signals=yes
698
ac_cv_have_extended_signals=no,
699
dnl When cross-compiling, do not assume anything.
700
ac_cv_have_extended_signals=no
705
AC_TRANSLATE_DEFINE(HAVE_SIGINFO_T, "$ac_cv_have_extended_signals",
706
[Define if your system support extended signals.])
709
dnl Otherwise, check for subterfuges.
710
if [[ -z "$sigsegv_recovery" ]]; then
711
AC_CACHE_CHECK([whether we then have a subterfuge for your system],
712
ac_cv_have_sigcontext_hack, [
716
#define HAVE_SIGCONTEXT_SUBTERFUGE 1
717
#define CONFIGURE_TEST_SIGSEGV_RECOVERY
718
#include "../Unix/vm_alloc.cpp"
719
#include "../Unix/sigsegv.cpp"
721
sigsegv_recovery=sigcontext
722
ac_cv_have_sigcontext_hack=yes
724
ac_cv_have_sigcontext_hack=no,
725
dnl When cross-compiling, do not assume anything.
726
ac_cv_have_sigcontext_hack=no
730
AC_TRANSLATE_DEFINE(HAVE_SIGCONTEXT_SUBTERFUGE, "$ac_cv_have_sigcontext_hack",
731
[Define if we know a hack to replace siginfo_t->si_addr member.])
734
472
dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
735
473
AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
736
474
ac_cv_have_skip_instruction, [
738
476
AC_LANG_CPLUSPLUS
478
#include "config_macosx.h"
740
479
#define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
741
480
#define CONFIGURE_TEST_SIGSEGV_RECOVERY
742
481
#include "../Unix/vm_alloc.cpp"
971
dnl Select appropriate CPU source and REGPARAM define.
972
ASM_OPTIMIZATIONS=none
973
CPUSRCS="cpuemu1.cpp cpuemu2.cpp cpuemu3.cpp cpuemu4.cpp cpuemu5.cpp cpuemu6.cpp cpuemu7.cpp cpuemu8.cpp"
975
dnl (gb) JITSRCS will be emptied later if the JIT is not available
976
dnl Other platforms should define their own set of noflags file variants
978
JITSRCS="compemu1.cpp compemu2.cpp compemu3.cpp compemu4.cpp compemu5.cpp compemu6.cpp compemu7.cpp compemu8.cpp"
980
if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
982
DEFINES="$DEFINES -DUNALIGNED_PROFITABLE -DREGPARAM=\"__attribute__((regparm(3)))\""
983
if [[ "x$HAVE_GAS" = "xyes" ]]; then
984
ASM_OPTIMIZATIONS=i386
985
DEFINES="$DEFINES -DX86_ASSEMBLY -DOPTIMIZED_FLAGS -DSAHF_SETO_PROFITABLE"
986
JITSRCS="cpuemu1_nf.cpp cpuemu2_nf.cpp cpuemu3_nf.cpp cpuemu4_nf.cpp cpuemu5_nf.cpp cpuemu6_nf.cpp cpuemu7_nf.cpp cpuemu8_nf.cpp $JITSRCS"
989
elif [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_X86_64" = "xyes" ]]; then
991
DEFINES="$DEFINES -DUNALIGNED_PROFITABLE"
992
if [[ "x$HAVE_GAS" = "xyes" ]]; then
993
ASM_OPTIMIZATIONS="x86-64"
994
DEFINES="$DEFINES -DX86_64_ASSEMBLY -DOPTIMIZED_FLAGS"
995
JITSRCS="cpuemu1_nf.cpp cpuemu2_nf.cpp cpuemu3_nf.cpp cpuemu4_nf.cpp cpuemu5_nf.cpp cpuemu6_nf.cpp cpuemu7_nf.cpp cpuemu8_nf.cpp $JITSRCS"
998
elif [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_SPARC" = "xyes" -a "x$HAVE_GAS" = "xyes" ]]; then
1000
case "$target_os" in
1002
AC_MSG_CHECKING(SPARC CPU architecture)
1003
SPARC_TYPE=`Solaris/which_sparc`
1004
AC_MSG_RESULT($SPARC_TYPE)
1005
case "$SPARC_TYPE" in
1007
ASM_OPTIMIZATIONS="SPARC V8 architecture"
1008
DEFINES="$DEFINES -DSPARC_V8_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
1009
CFLAGS="$CFLAGS -Wa,-Av8"
1010
CXXFLAGS="$CXXFLAGS -Wa,-Av8"
1013
ASM_OPTIMIZATIONS="SPARC V9 architecture"
1014
DEFINES="$DEFINES -DSPARC_V9_ASSEMBLY" dnl -DOPTIMIZED_FLAGS"
1015
CFLAGS="$CFLAGS -Wa,-Av9"
1016
CXXFLAGS="$CXXFLAGS -Wa,-Av9"
1021
elif [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then
1022
dnl Native m68k, no emulation
1023
CPUINCLUDES="-I../native_cpu"
1024
CPUSRCS="asm_support.s"
1027
dnl Enable JIT compiler, if possible.
1028
if [[ "x$WANT_JIT" = "xyes" -a "x$CAN_JIT" ]]; then
1029
JITSRCS="$JITSRCS ../uae_cpu/compiler/compemu_support.cpp ../uae_cpu/compiler/compemu_fpp.cpp compstbl.o cpustbl_nf.o"
1030
DEFINES="$DEFINES -DUSE_JIT -DUSE_JIT_FPU"
1032
if [[ "x$WANT_JIT_DEBUG" = "xyes" ]]; then
1033
if [[ "x$WANT_MON" = "xyes" ]]; then
1034
DEFINES="$DEFINES -DJIT_DEBUG=1"
1036
AC_MSG_WARN([cxmon not found, ignoring --enable-jit-debug])
1041
dnl IEEE core is the only FPU emulator to use with the JIT compiler
1042
case $FPE_CORE_TEST_ORDER in
1044
*) AC_MSG_WARN([Forcing use of the IEEE FPU core, as the JIT compiler supports only this one.]) ;;
1046
FPE_CORE_TEST_ORDER="ieee"
1053
dnl Utility macro used by next two tests.
1054
dnl AC_EXAMINE_OBJECT(C source code,
1055
dnl commands examining object file,
1056
dnl [commands to run if compile failed]):
1058
dnl Compile the source code to an object file; then convert it into a
1059
dnl printable representation. All unprintable characters and
1060
dnl asterisks (*) are replaced by dots (.). All white space is
1061
dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the
1062
dnl output, but runs of newlines are compressed to a single newline.
1063
dnl Finally, line breaks are forcibly inserted so that no line is
1064
dnl longer than 80 columns and the file ends with a newline. The
1065
dnl result of all this processing is in the file conftest.dmp, which
1066
dnl may be examined by the commands in the second argument.
1068
AC_DEFUN([gcc_AC_EXAMINE_OBJECT],
1071
dnl Next bit cribbed from AC_TRY_COMPILE.
1072
cat > conftest.$ac_ext <<EOF
1073
[#line __oline__ "configure"
1074
#include "confdefs.h"
1077
if AC_TRY_EVAL(ac_compile); then
1079
sed ['s/^[0-7]*[ ]*/ /
1082
s/ [0-9][0-9][0-9]/./g
1096
dnl Floating point format probe.
1097
dnl The basic concept is the same as the above: grep the object
1098
dnl file for an interesting string. We have to watch out for
1099
dnl rounding changing the values in the object, however; this is
1100
dnl handled by ignoring the least significant byte of the float.
1102
dnl Does not know about VAX G-float or C4x idiosyncratic format.
1103
dnl It does know about PDP-10 idiosyncratic format, but this is
1104
dnl not presently supported by GCC. S/390 "binary floating point"
1105
dnl is in fact IEEE (but maybe we should have that in EBCDIC as well
1108
AC_DEFUN([gcc_AC_C_FLOAT_FORMAT],
1109
[AC_CACHE_CHECK(floating point format, ac_cv_c_float_format,
1110
[gcc_AC_EXAMINE_OBJECT(
1111
[/* This will not work unless sizeof(double) == 8. */
1112
extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
1114
/* This structure must have no internal padding. */
1115
struct possibility {
1121
#define C(cand) { "\nformat:", cand, ":tamrof\n" }
1122
struct possibility table [] =
1124
C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
1125
C( 3.53802595280598432000e+18), /* D__float - VAX */
1126
C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
1127
C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
1128
C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
1130
[if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1131
ac_cv_c_float_format='IEEE (big-endian)'
1132
elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
1133
ac_cv_c_float_format='IEEE (big-endian)'
1134
elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
1135
ac_cv_c_float_format='IEEE (little-endian)'
1136
elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
1137
ac_cv_c_float_format='IEEE (little-endian)'
1138
elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
1139
ac_cv_c_float_format='VAX D-float'
1140
elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
1141
ac_cv_c_float_format='PDP-10'
1142
elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
1143
ac_cv_c_float_format='IBM 370 hex'
1145
AC_MSG_ERROR(Unknown floating point format)
1147
[AC_MSG_ERROR(compile failed)])
1149
# IEEE is the default format. If the float endianness isn't the same
1150
# as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
1151
# (which is a tristate: yes, no, default). This is only an issue with
1152
# IEEE; the other formats are only supported by a few machines each,
1153
# all with the same endianness.
1154
format=IEEE_FLOAT_FORMAT
1156
case $ac_cv_c_float_format in
1157
'IEEE (big-endian)' )
1158
if test $ac_cv_c_bigendian = no; then
1162
'IEEE (little-endian)' )
1163
if test $ac_cv_c_bigendian = yes; then
1168
format=VAX_FLOAT_FORMAT
1171
format=PDP10_FLOAT_FORMAT
1174
format=IBM_FLOAT_FORMAT
1177
AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format,
1178
[Define to the floating point format of the host machine.])
1179
if test -n "$fbigend"; then
1180
AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend,
1181
[Define to 1 if the host machine stores floating point numbers in
1182
memory with the word containing the sign bit at the lowest address,
1183
or to 0 if it does it the other way around.
1185
This macro should not be defined if the ordering is the same as for
1186
multi-word integers.])
1190
dnl Select appropriate FPU source.
1191
gcc_AC_C_FLOAT_FORMAT
697
dnl Make sure we can enable JIT debug mode.
698
if [[ "x$WANT_JIT_DEBUG" = "xyes" ]]; then
699
if [[ ":$WANT_JIT:$WANT_MON:" != ":yes:yes:" ]]; then
700
AC_MSG_WARN([cxmon not found, ignoring --enable-jit-debug])
705
dnl Additionnal checks for the IEEE FPU emulation code.
1192
706
AC_CHECK_HEADERS(ieee754.h ieeefp.h floatingpoint.h nan.h)
1194
for fpe in $FPE_CORE_TEST_ORDER; do
1197
case $ac_cv_c_float_format in
1199
FPE_CORE="IEEE fpu core"
1200
DEFINES="$DEFINES -DFPU_IEEE"
1201
AC_DEFINE(FPU_IEEE, 1, [Floating Point Core emulation method is IEEE.])
1202
FPUSRCS="../uae_cpu/fpu/fpu_ieee.cpp"
1203
dnl Math functions not mandated by C99 standard
1204
AC_CHECK_FUNCS(isnanl isinfl)
1205
dnl Math functions required by C99 standard, but probably not
1206
dnl implemented everywhere. In that case, we fall back to the
1207
dnl regular variant for doubles.
1208
AC_CHECK_FUNCS(logl log10l expl powl fabsl sqrtl)
1209
AC_CHECK_FUNCS(sinl cosl tanl sinhl coshl tanhl)
1210
AC_CHECK_FUNCS(asinl acosl atanl asinhl acoshl atanhl)
1211
AC_CHECK_FUNCS(floorl ceill)
1217
if [[ ":$HAVE_GCC27:$HAVE_I386:$HAVE_GAS:" = ":yes:yes:yes:" ]]; then
1218
FPE_CORE="i387 fpu core"
1219
DEFINES="$DEFINES -DFPU_X86"
1220
FPUSRCS="../uae_cpu/fpu/fpu_x86.cpp"
1225
FPE_CORE="uae fpu core"
1226
DEFINES="$DEFINES -DFPU_UAE"
1227
AC_DEFINE(FPU_UAE, 1, [Floating Point Core emulation is standard UAE.])
1228
FPUSRCS="../uae_cpu/fpu/fpu_uae.cpp"
1232
AC_MSG_ERROR([Internal configure.in script error for $fpe fpu core])
1236
if [[ "x$FPE_CORE" = "x" ]]; then
1237
AC_MSG_ERROR([Sorry, no suitable FPU core found in $FPE_CORE_TEST_ORDER])
1240
dnl Check for certain math functions
1241
707
AC_CHECK_FUNCS(atanh)
1242
708
AC_CHECK_FUNCS(isnan isinf finite isnormal signbit)
1244
dnl UAE CPU sources for all non-m68k-native architectures.
1245
if [[ "x$WANT_NATIVE_M68K" = "xno" ]]; then
1246
CPUINCLUDES="-I../uae_cpu"
1247
CPUSRCS="../uae_cpu/basilisk_glue.cpp ../uae_cpu/memory.cpp ../uae_cpu/newcpu.cpp ../uae_cpu/readcpu.cpp $FPUSRCS cpustbl.cpp cpudefs.cpp $CPUSRCS $JITSRCS"
709
dnl Math functions not mandated by C99 standard
710
AC_CHECK_FUNCS(isnanl isinfl)
711
dnl Math functions required by C99 standard, but probably not
712
dnl implemented everywhere. In that case, we fall back to the
713
dnl regular variant for doubles.
714
AC_CHECK_FUNCS(logl log10l expl powl fabsl sqrtl)
715
AC_CHECK_FUNCS(sinl cosl tanl sinhl coshl tanhl)
716
AC_CHECK_FUNCS(asinl acosl atanl asinhl acoshl atanhl)
717
AC_CHECK_FUNCS(floorl ceill)
1250
719
dnl Remove the "-g" option if set for GCC.
1251
720
if [[ "x$HAVE_GCC27" = "xyes" ]]; then