Files
postgres/config/llvm.m4
Thomas Munro 1a28b4b455 jit: Drop redundant LLVM configure probes.
We currently require LLVM 14, so these probes for LLVM 9 functions
always succeeded.  Even when the features aren't enabled in an LLVM
build, dummy functions are defined (a problem for a later commit).

The whole PGAC_CHECK_LLVM_FUNCTIONS macro and Meson equivalent are
removed, because we switched to testing LLVM_VERSION_MAJOR at compile
time in subsequent work and these were the last holdouts.  That suits
the nature of LLVM API evolution better, and also allows for strictly
mechanical pruning in future commits like 820b5af7 and 972c2cd2.  They
advanced the minimum LLVM version but failed to spot these.

Reviewed-by: Matheus Alcantara <matheusssilv97@gmail.com>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/CA%2BhUKGJgB6gvrdDohgwLfCwzVQm%3DVMtb9m0vzQn%3DCwWn-kwG9w%40mail.gmail.com
2025-12-30 20:24:42 +13:00

104 lines
3.6 KiB
Plaintext

# config/llvm.m4
# PGAC_LLVM_SUPPORT
# -----------------
#
# Look for the LLVM installation, check that it's new enough, set the
# corresponding LLVM_{CFLAGS,CXXFLAGS,BINPATH,LIBS}
# variables. Also verify that CLANG is available, to transform C
# into bitcode.
#
AC_DEFUN([PGAC_LLVM_SUPPORT],
[
AC_REQUIRE([AC_PROG_AWK])
AC_ARG_VAR(LLVM_CONFIG, [path to llvm-config command])
PGAC_PATH_PROGS(LLVM_CONFIG, llvm-config)
# no point continuing if llvm wasn't found
if test -z "$LLVM_CONFIG"; then
AC_MSG_ERROR([llvm-config not found, but required when compiling --with-llvm, specify with LLVM_CONFIG=])
fi
# check if detected $LLVM_CONFIG is executable
pgac_llvm_version="$($LLVM_CONFIG --version 2> /dev/null || echo no)"
if test "x$pgac_llvm_version" = "xno"; then
AC_MSG_ERROR([$LLVM_CONFIG does not work])
fi
# and whether the version is supported
if echo $pgac_llvm_version | $AWK -F '.' '{ if ([$]1 >= 14) exit 1; else exit 0;}';then
AC_MSG_ERROR([$LLVM_CONFIG version is $pgac_llvm_version but at least 14 is required])
fi
AC_MSG_NOTICE([using llvm $pgac_llvm_version])
# need clang to create some bitcode files
AC_ARG_VAR(CLANG, [path to clang compiler to generate bitcode])
PGAC_PATH_PROGS(CLANG, clang)
if test -z "$CLANG"; then
AC_MSG_ERROR([clang not found, but required when compiling --with-llvm, specify with CLANG=])
fi
# make sure clang is executable
if test "x$($CLANG --version 2> /dev/null || echo no)" = "xno"; then
AC_MSG_ERROR([$CLANG does not work])
fi
# Could check clang version, but it doesn't seem that
# important. Systems with a new enough LLVM version are usually
# going to have a decent clang version too. It's also not entirely
# clear what the minimum version is.
# Collect compiler flags necessary to build the LLVM dependent
# shared library.
for pgac_option in `$LLVM_CONFIG --cppflags`; do
case $pgac_option in
-I*|-D*) LLVM_CPPFLAGS="$pgac_option $LLVM_CPPFLAGS";;
esac
done
for pgac_option in `$LLVM_CONFIG --ldflags`; do
case $pgac_option in
-L*) LLVM_LIBS="$LLVM_LIBS $pgac_option";;
esac
done
# ABI influencing options, standard influencing options
for pgac_option in `$LLVM_CONFIG --cxxflags`; do
case $pgac_option in
-fno-rtti*) LLVM_CXXFLAGS="$LLVM_CXXFLAGS $pgac_option";;
-std=*) LLVM_CXXFLAGS="$LLVM_CXXFLAGS $pgac_option";;
esac
done
# Look for components we're interested in, collect necessary
# libs. As some components are optional, we can't just list all of
# them as it'd raise an error.
pgac_components='';
for pgac_component in `$LLVM_CONFIG --components`; do
case $pgac_component in
engine) pgac_components="$pgac_components $pgac_component";;
debuginfodwarf) pgac_components="$pgac_components $pgac_component";;
orcjit) pgac_components="$pgac_components $pgac_component";;
passes) pgac_components="$pgac_components $pgac_component";;
native) pgac_components="$pgac_components $pgac_component";;
perfjitevents) pgac_components="$pgac_components $pgac_component";;
esac
done;
# And then get the libraries that need to be linked in for the
# selected components. They're large libraries, we only want to
# link them into the LLVM using shared library.
for pgac_option in `$LLVM_CONFIG --libs --system-libs $pgac_components`; do
case $pgac_option in
-l*) LLVM_LIBS="$LLVM_LIBS $pgac_option";;
esac
done
LLVM_BINPATH=`$LLVM_CONFIG --bindir`
dnl LLVM_CONFIG, CLANG are already output via AC_ARG_VAR
AC_SUBST(LLVM_LIBS)
AC_SUBST(LLVM_CPPFLAGS)
AC_SUBST(LLVM_CFLAGS)
AC_SUBST(LLVM_CXXFLAGS)
AC_SUBST(LLVM_BINPATH)
])# PGAC_LLVM_SUPPORT