5 |
|
AC_PREREQ(2.12) |
6 |
|
AC_CONFIG_HEADER(config.h) |
7 |
|
|
8 |
+ |
dnl Canonical system information. |
9 |
+ |
AC_CANONICAL_HOST |
10 |
+ |
AC_CANONICAL_TARGET |
11 |
+ |
|
12 |
|
dnl Options. |
13 |
+ |
AC_ARG_ENABLE(jit, [ --enable-jit enable JIT compiler [default=yes]], [WANT_JIT=$enableval], [WANT_JIT=yes]) |
14 |
|
AC_ARG_ENABLE(ppc-emulator, [ --enable-ppc-emulator use the selected PowerPC emulator [default=auto]], [WANT_EMULATED_PPC=$enableval], [WANT_EMULATED_PPC=auto]) |
15 |
|
AC_ARG_ENABLE(xf86-dga, [ --enable-xf86-dga use the XFree86 DGA extension [default=yes]], [WANT_XF86_DGA=$enableval], [WANT_XF86_DGA=yes]) |
16 |
|
AC_ARG_ENABLE(xf86-vidmode, [ --enable-xf86-vidmode use the XFree86 VidMode extension [default=yes]], [WANT_XF86_VIDMODE=$enableval], [WANT_XF86_VIDMODE=yes]) |
48 |
|
|
49 |
|
dnl We use mon if possible. |
50 |
|
MONSRCS= |
51 |
+ |
case "x$WANT_MON" in |
52 |
+ |
x/* | x.*) |
53 |
+ |
mon_srcdir=$WANT_MON |
54 |
+ |
WANT_MON=yes |
55 |
+ |
;; |
56 |
+ |
xyes) |
57 |
+ |
mon_srcdir=../../../mon/src |
58 |
+ |
;; |
59 |
+ |
esac |
60 |
|
if [[ "x$WANT_MON" = "xyes" ]]; then |
61 |
|
AC_MSG_CHECKING(for mon) |
48 |
– |
mon_srcdir=../../../mon/src |
62 |
|
if grep mon_init $mon_srcdir/mon.h >/dev/null 2>/dev/null; then |
63 |
|
AC_MSG_RESULT(yes) |
64 |
|
AC_DEFINE(ENABLE_MON) |
102 |
|
]) |
103 |
|
]) |
104 |
|
AC_CHECK_FUNCS(pthread_cancel) |
105 |
+ |
if [[ "x$HAVE_PTHREADS" = "xyes" ]]; then |
106 |
+ |
AC_DEFINE(HAVE_PTHREADS, 1, [Define if pthreads are available.]) |
107 |
+ |
fi |
108 |
+ |
else |
109 |
+ |
dnl We do have our own pthread_cancel() implementation |
110 |
+ |
AC_DEFINE(HAVE_PTHREAD_CANCEL, 1, [Define if you have the pthread_cancel function.]) |
111 |
|
fi |
112 |
|
|
113 |
|
dnl If POSIX.4 semaphores are not available, we emulate them with pthread mutexes. |
203 |
|
dnl Select system-dependant sources. |
204 |
|
if [[ "x$EMULATED_PPC" = "xno" ]]; then |
205 |
|
SYSSRCS="Linux/paranoia.cpp Linux/sheepthreads.c Linux/asm_linux.S" |
187 |
– |
else |
188 |
– |
SYSSRCS="../kpx_cpu/sheepshaver_glue.cpp \ |
189 |
– |
../kpx_cpu/src/cpu/ppc/ppc-cpu.cpp \ |
190 |
– |
../kpx_cpu/src/cpu/ppc/ppc-decode.cpp \ |
191 |
– |
../kpx_cpu/src/cpu/ppc/ppc-execute.cpp" |
192 |
– |
CPPFLAGS="$CPPFLAGS -I../kpx_cpu -I../kpx_cpu/include -I../kpx_cpu/src -I../kpx_cpu/src/cpu" |
206 |
|
fi |
207 |
|
SYSSRCS="$SYSSRCS $SEMSRCS $UISRCS $MONSRCS" |
208 |
|
|
521 |
|
WANT_VOSF=no |
522 |
|
fi |
523 |
|
|
524 |
+ |
dnl Check for GCC 2.7 or higher. |
525 |
+ |
HAVE_GCC27=no |
526 |
+ |
AC_MSG_CHECKING(for GCC 2.7 or higher) |
527 |
+ |
AC_EGREP_CPP(xyes, |
528 |
+ |
[#if __GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5 |
529 |
+ |
xyes |
530 |
+ |
#endif |
531 |
+ |
], [AC_MSG_RESULT(yes); HAVE_GCC27=yes], AC_MSG_RESULT(no)) |
532 |
+ |
|
533 |
+ |
dnl Check for GCC 3.0 or higher. |
534 |
+ |
HAVE_GCC30=no |
535 |
+ |
AC_MSG_CHECKING(for GCC 3.0 or higher) |
536 |
+ |
AC_EGREP_CPP(xyes, |
537 |
+ |
[#if __GNUC__ >= 3 |
538 |
+ |
xyes |
539 |
+ |
#endif |
540 |
+ |
], [AC_MSG_RESULT(yes); HAVE_GCC30=yes], AC_MSG_RESULT(no)) |
541 |
+ |
|
542 |
+ |
# Test if the compiler can generate ELF objects |
543 |
+ |
AC_CACHE_CHECK([whether the compiler can generate ELF objects], |
544 |
+ |
ac_cv_elf_objects, [ |
545 |
+ |
echo 'int i;' > conftest.$ac_ext |
546 |
+ |
ac_cv_elf_objects=no |
547 |
+ |
if AC_TRY_EVAL(ac_compile); then |
548 |
+ |
case `/usr/bin/file conftest.$ac_objext` in |
549 |
+ |
*"ELF"*) |
550 |
+ |
ac_cv_elf_objects=yes |
551 |
+ |
;; |
552 |
+ |
esac |
553 |
+ |
fi |
554 |
+ |
rm -rf conftest* |
555 |
+ |
]) |
556 |
+ |
ELF_OBJECTS=$ac_cv_elf_objects |
557 |
+ |
|
558 |
+ |
dnl CPU emulator sources |
559 |
+ |
if [[ "x$EMULATED_PPC" = "xyes" ]]; then |
560 |
+ |
CPUSRCS="\ |
561 |
+ |
../kpx_cpu/src/cpu/ppc/ppc-cpu.cpp \ |
562 |
+ |
../kpx_cpu/src/cpu/ppc/ppc-decode.cpp \ |
563 |
+ |
../kpx_cpu/src/cpu/ppc/ppc-execute.cpp \ |
564 |
+ |
../kpx_cpu/src/cpu/ppc/ppc-translate.cpp" |
565 |
+ |
CPPFLAGS="$CPPFLAGS -I../kpx_cpu/include -I../kpx_cpu/src" |
566 |
+ |
|
567 |
+ |
dnl Enable JIT compiler, if possible |
568 |
+ |
if [[ "x$WANT_JIT" = "xyes" ]]; then |
569 |
+ |
AC_CACHE_CHECK([whether dyngen can be used], |
570 |
+ |
ac_cv_use_dyngen, [ |
571 |
+ |
case $host_cpu:$ELF_OBJECTS in |
572 |
+ |
powerpc:yes) |
573 |
+ |
ac_cv_use_dyngen=yes |
574 |
+ |
;; |
575 |
+ |
x86_64:yes) |
576 |
+ |
ac_cv_use_dyngen=yes |
577 |
+ |
;; |
578 |
+ |
i?86:yes) |
579 |
+ |
ac_cv_use_dyngen=yes |
580 |
+ |
;; |
581 |
+ |
*:*) |
582 |
+ |
ac_cv_use_dyngen=no |
583 |
+ |
;; |
584 |
+ |
esac |
585 |
+ |
]) |
586 |
+ |
if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then |
587 |
+ |
case $host_cpu in |
588 |
+ |
i?86) |
589 |
+ |
DYNGEN_OP_FLAGS="-fomit-frame-pointer -mpreferred-stack-boundary=2" |
590 |
+ |
if [[ "x$HAVE_GCC30" = "xyes" ]]; then |
591 |
+ |
DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -falign-functions=0" |
592 |
+ |
else |
593 |
+ |
DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -malign-functions=0" |
594 |
+ |
fi |
595 |
+ |
;; |
596 |
+ |
esac |
597 |
+ |
DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -finline-limit=10000" |
598 |
+ |
if [[ "x$HAVE_GCC30" = "xyes" ]]; then |
599 |
+ |
DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -fno-reorder-blocks -fno-optimize-sibling-calls" |
600 |
+ |
fi |
601 |
+ |
else |
602 |
+ |
WANT_JIT=no |
603 |
+ |
fi |
604 |
+ |
AC_TRANSLATE_DEFINE(ENABLE_DYNGEN, $ac_cv_use_dyngen, [Define to enable dyngen engine]) |
605 |
+ |
if [[ "x$WANT_JIT" = "xyes" ]]; then |
606 |
+ |
DYNGENSRCS="\ |
607 |
+ |
../kpx_cpu/src/cpu/jit/dyngen.c \ |
608 |
+ |
../kpx_cpu/src/cpu/jit/cxxdemangle.cpp" |
609 |
+ |
CPUSRCS="\ |
610 |
+ |
../kpx_cpu/src/cpu/jit/jit-cache.cpp \ |
611 |
+ |
../kpx_cpu/src/cpu/jit/basic-dyngen.cpp \ |
612 |
+ |
../kpx_cpu/src/cpu/ppc/ppc-dyngen.cpp $CPUSRCS" |
613 |
+ |
fi |
614 |
+ |
fi |
615 |
+ |
CPUSRCS="$CPUSRCS ../kpx_cpu/sheepshaver_glue.cpp" |
616 |
+ |
else |
617 |
+ |
WANT_JIT=no |
618 |
+ |
fi |
619 |
+ |
if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then |
620 |
+ |
AC_CACHE_CHECK([whether static data regions are executable], |
621 |
+ |
ac_cv_have_static_data_exec, [ |
622 |
+ |
AC_TRY_RUN([int main(void) { |
623 |
+ |
#if defined(__powerpc__) |
624 |
+ |
static unsigned int p[8] = {0x4e800020,}; |
625 |
+ |
asm volatile("dcbst 0,%0" : : "r" (p) : "memory"); |
626 |
+ |
asm volatile("sync" : : : "memory"); |
627 |
+ |
asm volatile("icbi 0,%0" : : "r" (p) : "memory"); |
628 |
+ |
asm volatile("sync" : : : "memory"); |
629 |
+ |
asm volatile("isync" : : : "memory"); |
630 |
+ |
((void (*)(void))p)(); |
631 |
+ |
return 0; |
632 |
+ |
#endif |
633 |
+ |
return 1; |
634 |
+ |
}], ac_cv_have_static_data_exec=yes, ac_cv_have_static_data_exec=no, |
635 |
+ |
dnl When cross-compiling, do not assume anything. |
636 |
+ |
ac_cv_have_static_data_exec=no |
637 |
+ |
) |
638 |
+ |
]) |
639 |
+ |
fi |
640 |
+ |
AC_TRANSLATE_DEFINE(HAVE_STATIC_DATA_EXEC, "$ac_cv_have_static_data_exec", |
641 |
+ |
[Define if your system marks static data pages as executable.]) |
642 |
+ |
|
643 |
+ |
if [[ "x$WANT_JIT" = "xyes" ]]; then |
644 |
+ |
CPPFLAGS="$CPPFLAGS -DUSE_JIT" |
645 |
+ |
fi |
646 |
+ |
|
647 |
|
dnl Generate Makefile. |
648 |
+ |
AC_SUBST(DYNGENSRCS) |
649 |
+ |
AC_SUBST(DYNGEN_OP_FLAGS) |
650 |
|
AC_SUBST(SYSSRCS) |
651 |
+ |
AC_SUBST(CPUSRCS) |
652 |
|
AC_OUTPUT(Makefile) |
653 |
|
|
654 |
|
dnl Print summary. |
658 |
|
echo XFree86 DGA support .............. : $WANT_XF86_DGA |
659 |
|
echo XFree86 VidMode support .......... : $WANT_XF86_VIDMODE |
660 |
|
echo Using PowerPC emulator ........... : $EMULATED_PPC |
661 |
+ |
echo Enable JIT compiler .............. : $WANT_JIT |
662 |
|
echo Enable video on SEGV signals ..... : $WANT_VOSF |
663 |
|
echo ESD sound support ................ : $WANT_ESD |
664 |
|
echo GTK user interface ............... : $WANT_GTK |