mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-03 05:20:16 +02:00
* check/lightning.c: Remove the ".cpu name value" syntax, as it was not able to do proper changes before the jit internal data structure was initialized. Now it supports several getopt options to force using different jit generation options, effectively replacing the previous syntax. * check/run-test: Add simple extra logic to handle differently named test scripts, used to test things like x87 coprocessor in ix86, and arm instruction set or software float in armv7l. * configure.ac: Add some AC_RUN_IFELSE calls to figure at compile time if can test different code generation options, and update Makefile generation accordingly. * check/Makefile.am, lib/jit_arm.c, lib/jit_x86.c: Update to properly work with the test tool updating the jit_cpu global information. * check/check.arm.sh, check/check.swf.sh, check/check.x87.sh: New wrapper files passing -mthumb=0, mvfp=0 and -mx87=1 to the test tool, if applicable, so that it can validate alternate code generation options on test hosts that support them.
177 lines
4.8 KiB
Text
177 lines
4.8 KiB
Text
dnl
|
|
dnl Copyright 2000, 2001, 2002, 2012 Free Software Foundation, Inc.
|
|
dnl
|
|
dnl This is free software; you can redistribute it and/or modify
|
|
dnl it under the terms of the GNU General Public License as published by
|
|
dnl the Free Software Foundation; either version 3 of the License, or
|
|
dnl (at your option) any later version.
|
|
dnl
|
|
dnl This software is distributed in the hope that it will be useful,
|
|
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
dnl GNU General Public License for more details.
|
|
dnl
|
|
|
|
AC_PREREQ(2.57)
|
|
AC_INIT([GNU lightning], 2.0, pcpa@gnu.org, lightning)
|
|
AC_CANONICAL_TARGET
|
|
AC_CONFIG_SRCDIR([Makefile.am])
|
|
AM_INIT_AUTOMAKE([dist-bzip2])
|
|
AC_CONFIG_MACRO_DIR(m4)
|
|
|
|
AM_CONFIG_HEADER(config.h)
|
|
|
|
AC_PROG_CC
|
|
AC_PROG_INSTALL
|
|
AC_PROG_LIBTOOL
|
|
|
|
AC_CHECK_LIB(gmp, __gmpz_init, ,
|
|
[AC_MSG_ERROR([GNU MP not found, see http://gmplib.org/])])
|
|
|
|
AC_ARG_ENABLE(disassembler,
|
|
AS_HELP_STRING([--enable-disassembler],
|
|
[Enable jit disassembler using binutils]),
|
|
[DISASSEMBLER=$enableval], [DISASSEMBLER=auto])
|
|
if test "x$DISASSEMBLER" != "xno"; then
|
|
# FIXME need to check for libiberty first or will fail to link
|
|
AC_CHECK_LIB(iberty, htab_try_create, ,
|
|
[HAVE_IBERTY="no"])
|
|
AC_CHECK_LIB(bfd, bfd_init, ,
|
|
[HAVE_BFD="no"])
|
|
AC_CHECK_LIB(opcodes, init_disassemble_info, ,
|
|
[HAVE_OPCODES="no"])
|
|
if test "x$HAVE_IBERTY" = "xno" -o \
|
|
"x$HAVE_BFD" = "xno" -o \
|
|
"x$HAVE_OPCODES" = "xno"; then
|
|
if test "x$DISASSEMBLER" != "xauto"; then
|
|
AC_MSG_ERROR([binutils not found, see http://www.gnu.org/software/binutils/])
|
|
else
|
|
AC_MSG_WARN([binutils not found, see http://www.gnu.org/software/binutils/])
|
|
DISASSEMBLER="no"
|
|
fi
|
|
fi
|
|
fi
|
|
AM_CONDITIONAL(with_disassembler, [test "x$DISASSEMBLER" != "xno"])
|
|
if test "x$DISASSEMBLER" != "xno"; then
|
|
case "$target_os" in
|
|
*linux*) LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DDISASSEMBLER=1" ;;
|
|
*) ;;
|
|
esac
|
|
fi
|
|
|
|
cpu=
|
|
case "$target_cpu" in
|
|
i?86|x86_64) cpu=x86 ;;
|
|
*arm*) cpu=arm ;;
|
|
*mips*) cpu=mips ;;
|
|
*powerpc*) cpu=ppc ;;
|
|
*) ;;
|
|
esac
|
|
AM_CONDITIONAL(cpu_arm, [test cpu-$cpu = cpu-arm])
|
|
AM_CONDITIONAL(cpu_mips, [test cpu-$cpu = cpu-mips])
|
|
AM_CONDITIONAL(cpu_ppc, [test cpu-$cpu = cpu-ppc])
|
|
AM_CONDITIONAL(cpu_x86, [test cpu-$cpu = cpu-x86])
|
|
|
|
# Test x87 if both, x87 and sse2 available
|
|
ac_cv_test_x86_x87=
|
|
# Test arm instruction set if thumb instruction set available
|
|
ac_cv_test_arm_arm=
|
|
# Test sofware float if vfp available and not using hard float abi
|
|
ac_cv_test_arm_swf=
|
|
|
|
save_CFLAGS=$CFLAGS
|
|
CFLAGS="-I$PWD/include -D_GNU_SOURCE"
|
|
if test x$cpu = x; then
|
|
AC_MSG_ERROR([cpu $target_cpu not supported])
|
|
elif test $cpu = x86; then
|
|
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
#include <lightning.h>
|
|
int main(void) {
|
|
int ac, flags;
|
|
unsigned int eax, ebx, ecx, edx;
|
|
if (__WORDSIZE == 64)
|
|
return 1;
|
|
__asm__ volatile ("pushfl;\n\t"
|
|
"popl %0;\n\t"
|
|
"movl \$0x240000, %1;\n\t"
|
|
"xorl %0, %1;\n\t"
|
|
"pushl %1;\n\t"
|
|
"popfl;\n\t"
|
|
"pushfl;\n\t"
|
|
"popl %1;\n\t"
|
|
"xorl %0, %1;\n\t"
|
|
"pushl %0;\n\t"
|
|
"popfl"
|
|
: "=r" (flags), "=r" (ac));
|
|
if ((ac & (1 << 21)) == 0)
|
|
return 1;
|
|
__asm__ volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1"
|
|
: "=a" (eax), "=r" (ebx),
|
|
"=c" (ecx), "=d" (edx)
|
|
: "0" (1));
|
|
return (edx & 1 << 26) ? 0 : 1;
|
|
}
|
|
]])],[ac_cv_test_x86_x87=yes],[][])
|
|
elif test $cpu = arm; then
|
|
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
#include <stdio.h>
|
|
int main(void) {
|
|
#if defined(__linux__)
|
|
FILE *fp;
|
|
char buf[128];
|
|
if ((fp = fopen("/proc/cpuinfo", "r")) == NULL)
|
|
return 1;
|
|
while (fgets(buf, sizeof(buf), fp)) {
|
|
if (strncmp(buf, "Features\t:", 10) == 0 &&
|
|
strstr(buf + 10, "thumb")) {
|
|
fclose(fp);
|
|
return 0;
|
|
}
|
|
}
|
|
fclose(fp);
|
|
#endif
|
|
return 1;
|
|
}
|
|
]])],[ac_cv_test_arm_arm=yes],[][])
|
|
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
#include <stdio.h>
|
|
int main(void) {
|
|
#if defined(__linux__)
|
|
FILE *fp;
|
|
char buf[128];
|
|
# if !defined(__ARM_PCS_VFP)
|
|
if ((fp = fopen("/proc/cpuinfo", "r")) == NULL)
|
|
return 1;
|
|
while (fgets(buf, sizeof(buf), fp)) {
|
|
if (strncmp(buf, "Features\t:", 10) == 0 &&
|
|
strstr(buf + 10, "vfp")) {
|
|
fclose(fp);
|
|
return 0;
|
|
}
|
|
}
|
|
fclose(fp);
|
|
# endif
|
|
#endif
|
|
return 1;
|
|
}
|
|
]])],[ac_cv_test_arm_swf=yes],[][])
|
|
fi
|
|
CFLAGS=$save_CFLAGS
|
|
|
|
AM_CONDITIONAL(test_x86_x87, [test x$ac_cv_test_x86_x87 = xyes])
|
|
AM_CONDITIONAL(test_arm_arm, [test x$ac_cv_test_arm_arm = xyes])
|
|
AM_CONDITIONAL(test_arm_swf, [test x$ac_cv_test_arm_swf = xyes])
|
|
|
|
if test $cpu=arm; then
|
|
AC_CHECK_LIB(m, sqrtf, ,
|
|
[AC_MSG_ERROR([sqrtf required but not available])])
|
|
fi
|
|
|
|
AC_SUBST([LIGHTNING_CFLAGS])
|
|
|
|
AC_OUTPUT([Makefile
|
|
doc/Makefile
|
|
include/Makefile
|
|
include/lightning/Makefile
|
|
lib/Makefile
|
|
check/Makefile])
|