1
dnl Process this file with autoconf to produce a configure script.
2
dnl Written in 2002 by Christian Bauer et al.
4
AC_INIT([Basilisk II], 1.0, [Christian.Bauer@uni-mainz.de], BasiliskII)
5
AC_CONFIG_SRCDIR(main_windows.cpp)
6
AC_CONFIG_AUX_DIR(../Unix)
8
AC_CONFIG_HEADER(config.h)
10
dnl Aliases for PACKAGE and VERSION macros.
11
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE_NAME", [Define this program name.])
12
AC_DEFINE_UNQUOTED(VERSION, "$PACKAGE_VERSION", [Define this program version.])
15
AC_ARG_ENABLE(sdl-static, [ --enable-sdl-static use SDL static libraries for linking [default=no]], [WANT_SDL_STATIC=$enableval], [WANT_SDL_STATIC=no])
17
dnl JIT compiler options.
18
AC_ARG_ENABLE(jit-compiler, [ --enable-jit-compiler enable JIT compiler [default=yes]], [WANT_JIT=$enableval], [WANT_JIT=yes])
19
AC_ARG_ENABLE(jit-debug, [ --enable-jit-debug activate native code disassemblers [default=no]], [WANT_JIT_DEBUG=$enableval], [WANT_JIT_DEBUG=no])
21
dnl FPU emulation core.
23
[ --enable-fpe=FPE specify which fpu emulator to use [default=auto]],
24
[ case "$enableval" in
25
dnl default is always ieee, if architecture has this fp format
26
auto) FPE_CORE_TEST_ORDER="ieee uae";;
27
ieee) FPE_CORE_TEST_ORDER="ieee";;
28
uae) FPE_CORE_TEST_ORDER="uae";;
29
x86) FPE_CORE_TEST_ORDER="x86";;
30
*) AC_MSG_ERROR([--enable-fpe takes only one of the following values: auto, x86, ieee, uae]);;
33
[ FPE_CORE_TEST_ORDER="ieee uae"
36
dnl External packages.
37
AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]], [WANT_GTK=$withval], [WANT_GTK=yes])
40
AC_ARG_ENABLE(addressing,
41
[ --enable-addressing=AM specify the addressing mode to use [default=fastest]],
42
[ case "$enableval" in
43
direct) ADDRESSING_TEST_ORDER="direct";;
44
banks) ADDRESSING_TEST_ORDER="banks";;
45
fastest)ADDRESSING_TEST_ORDER="direct banks";;
46
*) AC_MSG_ERROR([--enable-addressing takes only one of the following values: fastest, direct, banks]);;
49
[ ADDRESSING_TEST_ORDER="direct banks"
52
dnl Canonical system information.
61
i386* | i486* | i586* | i686* | i786* ) HAVE_I386=yes;;
62
powerpc* ) HAVE_POWERPC=yes;;
63
x86_64* ) HAVE_X86_64=yes;;
66
dnl Checks for programs.
74
AC_CHECK_TOOL(WINDRES, windres)
76
dnl We use GTK+ if possible.
77
if [[ "x$WANT_GTK" = "xyes" ]]; then
78
AM_PATH_GTK_2_0(1.3.15, [], [
79
AC_MSG_WARN([Could not find GTK+ 2.0, disabling user interface.])
85
dnl We use 64-bit file size support if possible.
88
dnl Checks for header files.
91
dnl Checks for typedefs, structures, and compiler characteristics.
95
AC_CHECK_SIZEOF(short, 2)
96
AC_CHECK_SIZEOF(int, 4)
97
AC_CHECK_SIZEOF(long, 4)
98
AC_CHECK_SIZEOF(long long, 8)
99
AC_CHECK_SIZEOF(float, 4)
100
AC_CHECK_SIZEOF(double, 8)
101
AC_CHECK_SIZEOF(long double, 12)
102
AC_CHECK_SIZEOF(void *, 4)
104
AC_CHECK_TYPES(loff_t)
105
AC_CHECK_TYPES(caddr_t)
108
dnl Checks for library functions.
109
AC_CHECK_FUNCS(strdup strerror)
111
dnl Define a macro that translates a yesno-variable into a C macro definition
112
dnl to be put into the config.h file
113
dnl $1 -- the macro to define
114
dnl $2 -- the value to translate
115
dnl $3 -- template name
116
AC_DEFUN([AC_TRANSLATE_DEFINE], [
117
if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
122
dnl Check that VirtualAlloc(), VirtualProtect() work
123
AC_CACHE_CHECK([whether VirtualProtect works],
124
ac_cv_VirtualProtect_works, [
127
ac_cv_VirtualProtect_works=yes
128
dnl First the tests that should segfault
129
for test_def in NONE_READ NONE_WRITE READ_WRITE; do
131
#define HAVE_WIN32_VM 1
132
#define CONFIGURE_TEST_VM_MAP
133
#define TEST_VM_PROT_$test_def
134
#include "../Unix/vm_alloc.cpp"
135
], ac_cv_VirtualProtect_works=no, rm -f core,
136
dnl When cross-compiling, assume it works
137
ac_cv_VirtualProtect_works="yes"
141
#define HAVE_WIN32_VM 1
142
#define CONFIGURE_TEST_VM_MAP
143
#define TEST_VM_PROT_RDWR_WRITE
144
#include "../Unix/vm_alloc.cpp"
145
], , ac_cv_VirtualProtect_works=no,
146
dnl When cross-compiling, assume it works
147
ac_cv_VirtualProtect_works="yes"
152
if [[ "x$ac_cv_VirtualProtect_works" = "xyes" ]]; then
153
AC_DEFINE(HAVE_WIN32_VM, 1, [Define if your system has a working Win32-based memory allocator.])
155
AC_MSG_ERROR([Sorry, Windows VM functions don't work as expected on your system.])
158
dnl Check if Windows exceptions are supported.
159
AC_CACHE_CHECK([whether your system supports Windows exceptions],
160
ac_cv_have_win32_exceptions, [
164
#define HAVE_WIN32_EXCEPTIONS 1
165
#define CONFIGURE_TEST_SIGSEGV_RECOVERY
166
#include "../Unix/vm_alloc.cpp"
167
#include "../Unix/sigsegv.cpp"
169
ac_cv_have_win32_exceptions=yes,
170
ac_cv_have_win32_exceptions=no,
171
dnl When cross-compiling, assume it works
172
ac_cv_have_win32_exceptions="yes"
177
if [[ "x$ac_cv_have_win32_exceptions" = "xyes" ]]; then
178
AC_DEFINE(HAVE_WIN32_EXCEPTIONS, 1, [Define if your system supports Windows exceptions.])
180
AC_MSG_ERROR([Sorry, Windows exceptions don't work as expected on your system.])
183
dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
184
AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
185
ac_cv_have_skip_instruction, [
189
#define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
190
#define CONFIGURE_TEST_SIGSEGV_RECOVERY
191
#include "../Unix/vm_alloc.cpp"
192
#include "../Unix/sigsegv.cpp"
193
], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
194
dnl When cross-compiling, do not assume anything.
195
ac_cv_have_skip_instruction=no
200
AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
201
[Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
203
dnl We really want VOSF (Video on SEGV Signals) screen updates acceleration
204
AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
206
dnl Determine the addressing mode to use
208
AC_MSG_CHECKING([for the addressing mode to use])
209
for am in $ADDRESSING_TEST_ORDER; do
212
dnl Direct addressing mode (constant offset)
213
ADDRESSING_MODE="direct"
214
DEFINES="$DEFINES -DDIRECT_ADDRESSING"
218
dnl Default addressing mode
219
ADDRESSING_MODE="memory banks"
223
AC_MSG_ERROR([Internal configure.ac script error for $am addressing mode])
226
AC_MSG_RESULT($ADDRESSING_MODE)
227
if [[ "x$ADDRESSING_MODE" = "x" ]]; then
228
AC_MSG_WARN([Sorry, no suitable addressing mode in $ADDRESSING_TEST_ORDER])
229
ADDRESSING_MODE="memory banks"
232
dnl Banked Memory Addressing mode is not supported by the JIT compiler
233
if [[ "x$WANT_JIT" = "xyes" -a "x$ADDRESSING_MODE" = "xmemory banks" ]]; then
234
AC_MSG_ERROR([Sorry, the JIT Compiler requires Direct Addressing, at least])
239
AC_MSG_CHECKING(for GAS .p2align feature)
240
cat >conftest.S << EOF
244
if $CC conftest.S -c -o conftest.o >/dev/null 2>&1 ; then HAVE_GAS=yes; fi
245
AC_MSG_RESULT($HAVE_GAS)
247
dnl Check for GCC 2.7 or higher.
249
AC_MSG_CHECKING(for GCC 2.7 or higher)
251
[#if __GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5
254
], [AC_MSG_RESULT(yes); HAVE_GCC27=yes], AC_MSG_RESULT(no))
256
dnl Check for GCC 3.0 or higher.
258
AC_MSG_CHECKING(for GCC 3.0 or higher)
263
], [AC_MSG_RESULT(yes); HAVE_GCC30=yes], AC_MSG_RESULT(no))
265
dnl Add -fno-strict-aliasing for slirp sources
266
if [[ "x$HAVE_GCC30" = "xyes" ]]; then
267
SAVED_CFLAGS="$CFLAGS"
268
CFLAGS="$CFLAGS -fno-strict-aliasing"
269
AC_CACHE_CHECK([whether the compiler supports -fno-strict-aliasing],
270
ac_cv_gcc_no_strict_aliasing, [
271
AC_TRY_COMPILE([],[],
272
[ac_cv_gcc_no_strict_aliasing=yes; AC_SUBST(SLIRP_CFLAGS, "-fno-strict-aliasing")],
273
[ac_cv_gcc_no_strict_aliasing=no])
275
CFLAGS="$SAVED_CFLAGS"
278
dnl Select appropriate CPU source and REGPARAM define.
279
ASM_OPTIMIZATIONS=none
280
CPUSRCS="cpuemu1.cpp cpuemu2.cpp cpuemu3.cpp cpuemu4.cpp cpuemu5.cpp cpuemu6.cpp cpuemu7.cpp cpuemu8.cpp"
282
dnl JITSRCS will be emptied later if the JIT is not available
283
dnl Other platforms should define their own set of noflags file variants
285
JITSRCS="compemu1.cpp compemu2.cpp compemu3.cpp compemu4.cpp compemu5.cpp compemu6.cpp compemu7.cpp compemu8.cpp"
287
if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
289
DEFINES="$DEFINES -DUNALIGNED_PROFITABLE -DREGPARAM=\"__attribute__((regparm(3)))\""
290
if [[ "x$HAVE_GAS" = "xyes" ]]; then
291
ASM_OPTIMIZATIONS=i386
292
DEFINES="$DEFINES -DX86_ASSEMBLY -DOPTIMIZED_FLAGS -DSAHF_SETO_PROFITABLE"
293
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"
296
elif [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_X86_64" = "xyes" ]]; then
298
DEFINES="$DEFINES -DUNALIGNED_PROFITABLE"
299
if [[ "x$HAVE_GAS" = "xyes" ]]; then
300
ASM_OPTIMIZATIONS="x86-64"
301
DEFINES="$DEFINES -DX86_64_ASSEMBLY -DOPTIMIZED_FLAGS"
302
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"
307
dnl Enable JIT compiler, if possible.
308
if [[ "x$WANT_JIT" = "xyes" -a "x$CAN_JIT" ]]; then
309
JITSRCS="$JITSRCS ../uae_cpu/compiler/compemu_support.cpp ../uae_cpu/compiler/compemu_fpp.cpp compstbl.o cpustbl_nf.o"
310
DEFINES="$DEFINES -DUSE_JIT -DUSE_JIT_FPU"
312
if [[ "x$WANT_JIT_DEBUG" = "xyes" ]]; then
313
if [[ "x$WANT_MON" = "xyes" ]]; then
314
DEFINES="$DEFINES -DJIT_DEBUG=1"
316
AC_MSG_WARN([cxmon not found, ignoring --enable-jit-debug])
321
dnl IEEE core is the only FPU emulator to use with the JIT compiler
322
case $FPE_CORE_TEST_ORDER in
324
*) AC_MSG_WARN([Forcing use of the IEEE FPU core, as the JIT compiler supports only this one.]) ;;
326
FPE_CORE_TEST_ORDER="ieee"
333
dnl Utility macro used by next two tests.
334
dnl AC_EXAMINE_OBJECT(C source code,
335
dnl commands examining object file,
336
dnl [commands to run if compile failed]):
338
dnl Compile the source code to an object file; then convert it into a
339
dnl printable representation. All unprintable characters and
340
dnl asterisks (*) are replaced by dots (.). All white space is
341
dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the
342
dnl output, but runs of newlines are compressed to a single newline.
343
dnl Finally, line breaks are forcibly inserted so that no line is
344
dnl longer than 80 columns and the file ends with a newline. The
345
dnl result of all this processing is in the file conftest.dmp, which
346
dnl may be examined by the commands in the second argument.
348
AC_DEFUN([gcc_AC_EXAMINE_OBJECT],
351
dnl Next bit cribbed from AC_TRY_COMPILE.
352
cat > conftest.$ac_ext <<EOF
353
[#line __oline__ "configure"
354
#include "confdefs.h"
357
if AC_TRY_EVAL(ac_compile); then
359
sed ['s/^[0-7]*[ ]*/ /
362
s/ [0-9][0-9][0-9]/./g
376
dnl Floating point format probe.
377
dnl The basic concept is the same as the above: grep the object
378
dnl file for an interesting string. We have to watch out for
379
dnl rounding changing the values in the object, however; this is
380
dnl handled by ignoring the least significant byte of the float.
382
dnl Does not know about VAX G-float or C4x idiosyncratic format.
383
dnl It does know about PDP-10 idiosyncratic format, but this is
384
dnl not presently supported by GCC. S/390 "binary floating point"
385
dnl is in fact IEEE (but maybe we should have that in EBCDIC as well
388
AC_DEFUN([gcc_AC_C_FLOAT_FORMAT],
389
[AC_CACHE_CHECK(floating point format, ac_cv_c_float_format,
390
[gcc_AC_EXAMINE_OBJECT(
391
[/* This will not work unless sizeof(double) == 8. */
392
extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
394
/* This structure must have no internal padding. */
401
#define C(cand) { "\nformat:", cand, ":tamrof\n" }
402
struct possibility table [] =
404
C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
405
C( 3.53802595280598432000e+18), /* D__float - VAX */
406
C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
407
C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
408
C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
410
[if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
411
ac_cv_c_float_format='IEEE (big-endian)'
412
elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
413
ac_cv_c_float_format='IEEE (big-endian)'
414
elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
415
ac_cv_c_float_format='IEEE (little-endian)'
416
elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
417
ac_cv_c_float_format='IEEE (little-endian)'
418
elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
419
ac_cv_c_float_format='VAX D-float'
420
elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
421
ac_cv_c_float_format='PDP-10'
422
elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
423
ac_cv_c_float_format='IBM 370 hex'
425
AC_MSG_ERROR(Unknown floating point format)
427
[AC_MSG_ERROR(compile failed)])
429
# IEEE is the default format. If the float endianness isn't the same
430
# as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
431
# (which is a tristate: yes, no, default). This is only an issue with
432
# IEEE; the other formats are only supported by a few machines each,
433
# all with the same endianness.
434
format=IEEE_FLOAT_FORMAT
436
case $ac_cv_c_float_format in
437
'IEEE (big-endian)' )
438
if test $ac_cv_c_bigendian = no; then
442
'IEEE (little-endian)' )
443
if test $ac_cv_c_bigendian = yes; then
448
format=VAX_FLOAT_FORMAT
451
format=PDP10_FLOAT_FORMAT
454
format=IBM_FLOAT_FORMAT
457
AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format,
458
[Define to the floating point format of the host machine.])
459
if test -n "$fbigend"; then
460
AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend,
461
[Define to 1 if the host machine stores floating point numbers in
462
memory with the word containing the sign bit at the lowest address,
463
or to 0 if it does it the other way around.
465
This macro should not be defined if the ordering is the same as for
466
multi-word integers.])
470
dnl Select appropriate FPU source.
471
gcc_AC_C_FLOAT_FORMAT
472
AC_CHECK_HEADERS(ieee754.h ieeefp.h floatingpoint.h nan.h)
474
for fpe in $FPE_CORE_TEST_ORDER; do
477
case $ac_cv_c_float_format in
479
FPE_CORE="IEEE fpu core"
480
DEFINES="$DEFINES -DFPU_IEEE"
481
FPUSRCS="../uae_cpu/fpu/fpu_ieee.cpp"
482
dnl Math functions not mandated by C99 standard
483
AC_CHECK_FUNCS(isnanl isinfl)
484
dnl Math functions required by C99 standard, but probably not
485
dnl implemented everywhere. In that case, we fall back to the
486
dnl regular variant for doubles.
487
AC_CHECK_FUNCS(logl log10l expl powl fabsl sqrtl)
488
AC_CHECK_FUNCS(sinl cosl tanl sinhl coshl tanhl)
489
AC_CHECK_FUNCS(asinl acosl atanl asinhl acoshl atanhl)
490
AC_CHECK_FUNCS(floorl ceill)
496
if [[ ":$HAVE_GCC27:$HAVE_I386:$HAVE_GAS:" = ":yes:yes:yes:" ]]; then
497
FPE_CORE="i387 fpu core"
498
DEFINES="$DEFINES -DFPU_X86"
499
FPUSRCS="../uae_cpu/fpu/fpu_x86.cpp"
504
FPE_CORE="uae fpu core"
505
DEFINES="$DEFINES -DFPU_UAE"
506
FPUSRCS="../uae_cpu/fpu/fpu_uae.cpp"
510
AC_MSG_ERROR([Internal configure.in script error for $fpe fpu core])
514
if [[ "x$FPE_CORE" = "x" ]]; then
515
AC_MSG_ERROR([Sorry, no suitable FPU core found in $FPE_CORE_TEST_ORDER])
518
dnl Check for certain math functions
519
AC_CHECK_FUNCS(atanh)
520
AC_CHECK_FUNCS(isnan isinf finite isnormal signbit)
522
dnl UAE CPU sources for all non-m68k-native architectures.
523
CPUINCLUDES="-I../uae_cpu"
524
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"
526
dnl We really want SDL for now
527
AC_CHECK_TOOL(sdl_config, sdl-config, [AC_MSG_ERROR([Sorry, you currently need SDL for this port])])
528
SDL_CFLAGS=`$sdl_config --cflags`
530
if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then
531
SDL_LIBS=`$sdl_config --static-libs`
532
sdl_prefix=`$sdl_config --exec-prefix`
533
if [[ -n "$sdl_prefix" ]]; then
534
SDL_LIBS=`echo "$SDL_LIBS" | sed -e "s,-l\(SDLmain\|SDL\),$sdl_prefix/lib/lib\1.a,g"`
536
SDL_LIBS="$SDL_LIBS -lwinmm"
538
SDL_LIBS=`$sdl_config --libs`
541
AC_DEFINE(USE_SDL, 1, [Define to enble SDL support])
542
AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support])
543
AC_DEFINE(USE_SDL_AUDIO, 1, [Define to enable SDL audio support])
545
dnl Remove the "-g" option if set for GCC.
546
if [[ "x$HAVE_GCC27" = "xyes" ]]; then
547
CFLAGS=`echo $CFLAGS | sed -e 's/-g\b//g'`
548
CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-g\b//g'`
551
dnl Generate Makefile.
553
AC_SUBST(CPUINCLUDES)
555
AC_CONFIG_FILES([Makefile])
560
echo Basilisk II configuration summary:
562
echo Use JIT compiler ....................... : $WANT_JIT
563
echo JIT debug mode ......................... : $WANT_JIT_DEBUG
564
echo Floating-Point emulation core .......... : $FPE_CORE
565
echo Assembly optimizations ................. : $ASM_OPTIMIZATIONS
566
echo Addressing mode ........................ : $ADDRESSING_MODE
567
echo GTK user interface ..................... : $WANT_GTK
569
echo "Configuration done. Now type \"make\" (or \"gmake\")."