From 766f4b96ee148adf8f4bbbf5fa4f1c47555d46de Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Mon, 4 May 2020 21:01:48 +0100 Subject: [PATCH] * configure.ac: Add a better libgccjit test plus some morw err message * configure.ac (libgccjit_smoke_test, libgccjit_not_found) (libgccjit_broken): New functions. --- configure.ac | 66 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 57 insertions(+), 9 deletions(-) diff --git a/configure.ac b/configure.ac index c4d19e0e287..af12f20500d 100644 --- a/configure.ac +++ b/configure.ac @@ -3729,22 +3729,70 @@ emacs_major_version="${PACKAGE_VERSION%%.*}" AC_SUBST(emacs_major_version) ### Emacs Lisp native compiler support + +AC_DEFUN([libgccjit_smoke_test], [ + AC_LANG_SOURCE( + [[#include + #include + #include + int + main (int argc, char **argv) + { + gcc_jit_context *ctxt; + gcc_jit_result *result; + ctxt = gcc_jit_context_acquire (); + if (!ctxt) + exit (1); + gcc_jit_type *int_type = + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT); + gcc_jit_function *func = + gcc_jit_context_new_function (ctxt, NULL, + GCC_JIT_FUNCTION_EXPORTED, + int_type, "foo", 0, NULL, 0); + gcc_jit_block *block = gcc_jit_function_new_block (func, "foo"); + gcc_jit_block_end_with_return ( + block, + NULL, + gcc_jit_context_new_rvalue_from_int (ctxt, int_type, 1)); + result = gcc_jit_context_compile (ctxt); + if (!result) + exit (1); + typedef int (*fn_type) (void); + fn_type foo = + (fn_type)gcc_jit_result_get_code (result, "foo"); + if (!foo) + exit (1); + if (foo () != 1) + exit (1); + gcc_jit_context_release (ctxt); + gcc_jit_result_release (result); + return 0; + }]])]) + +AC_DEFUN([libgccjit_not_found], [ + AC_MSG_ERROR([elisp native compiler requested but libgccjit not found. +If you are sure you want Emacs compiled without elisp native compiler, pass + --without-nativecomp +to configure.])]) + +AC_DEFUN([libgccjit_broken], [ + AC_MSG_ERROR([Installed libgccjit has failed passing the smoke test. +Please report the issue to your distribution. +Here instructions on how to compile from source: https://gcc.gnu.org/wiki/JIT.])]) + HAVE_NATIVE_COMP=no LIBGCCJIT_LIB= COMP_OBJ= if test "${with_nativecomp}" != "no"; then - AC_CHECK_HEADER(libgccjit.h, - AC_CHECK_LIB(gccjit, gcc_jit_context_acquire, HAVE_NATIVE_COMP=yes)) - if test "${HAVE_NATIVE_COMP}" = "yes"; then + emacs_save_LDFLAGS=$LDFLAGS + LDFLAGS="-lgccjit -ldl" + AC_RUN_IFELSE([libgccjit_smoke_test], [], [libgccjit_broken], + [AC_LINK_IFELSE([libgccjit_smoke_test], [], [libgccjit_not_found])]) + LDFLAGS=$emacs_save_LDFLAGS + HAVE_NATIVE_COMP=yes LIBGCCJIT_LIB="-lgccjit -ldl" COMP_OBJ="comp.o" AC_DEFINE(HAVE_NATIVE_COMP, 1, [Define to 1 if you have the libgccjit library (-lgccjit).]) - else - AC_MSG_ERROR([elisp native compiler requested but libgccjit not found. -If you are sure you want Emacs compiled without elisp native compiler, pass - --without-nativecomp -to configure.]) - fi fi if test "${HAVE_NATIVE_COMP}" = yes && test "${HAVE_PDUMPER}" = no; then AC_MSG_ERROR(['--with-nativecomp' requires '--with-dumping=pdumper']) -- 2.39.5