summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2019-10-06 15:01:07 +0200
committerLuboš Luňák <l.lunak@collabora.com>2019-10-07 21:57:13 +0200
commitad5cbcf6ba0afdc1d8d7405c2641cce8de4a360b (patch)
tree4efe68b6b293d0d7b5b7d3125e030595b5ecb8f8 /configure.ac
parentb1c14c30ba99ede85e41934b565195b0cbc69703 (diff)
try to autodetect flags needed to build Clang plugins
Instead of having a lot of it hardcoded, which brings problems like: - Clang-to-be-10 has switched to -std=c++14, so our hardcoded c++11 makes the build fail - I cannot compile with my openSUSE-shipped clang, because it ships only libclang-cpp and not the other libClangSomething libs The possibility to explicitly set the necessary variables is still there. Change-Id: I58d401d4584fa064f1c1351a8a06ff4e29643063 Reviewed-on: https://gerrit.libreoffice.org/80300 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac67
1 files changed, 63 insertions, 4 deletions
diff --git a/configure.ac b/configure.ac
index ecb4c877b563..156dca7b1ed0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7012,15 +7012,30 @@ if test "$COM_IS_CLANG" = "TRUE"; then
if test -z "$CLANGDIR"; then
CLANGDIR=$(dirname $(dirname $($CXX -print-prog-name=$(basename $CXX))))
fi
+ # Assume Clang is self-built, but allow overriding COMPILER_PLUGINS_CXX to the compiler Clang was built with.
+ if test -z "$COMPILER_PLUGINS_CXX"; then
+ COMPILER_PLUGINS_CXX=$CXX
+ fi
+ AC_PATH_PROG(LLVM_CONFIG, llvm-config,[],$CLANGDIR/bin $PATH)
+ if test -n "$LLVM_CONFIG"; then
+ COMPILER_PLUGINS_CXXFLAGS=$($LLVM_CONFIG --cxxflags)
+ COMPILER_PLUGINS_CXX_LINKFLAGS=$($LLVM_CONFIG --ldflags --libs --system-libs | tr '\n' ' ')
+ if test -z "$CLANGLIBDIR"; then
+ CLANGLIBDIR=$($LLVM_CONFIG --libdir)
+ fi
+ fi
+ AC_MSG_NOTICE([compiler plugins compile flags: $COMPILER_PLUGINS_CXXFLAGS])
AC_LANG_PUSH([C++])
- save_CPPFLAGS=$CPPFLAGS
save_CXX=$CXX
save_CXXCPP=$CXXCPP
- # compiler plugins must be built with "native" compiler that was used to build Clang itself:
- : "${COMPILER_PLUGINS_CXX=g++ -std=c++11}"
+ save_CPPFLAGS=$CPPFLAGS
+ save_CXXFLAGS=$CXXFLAGS
+ save_LDFLAGS=$LDFLAGS
+ save_LIBS=$LIBS
CXX=$COMPILER_PLUGINS_CXX
CXXCPP="$COMPILER_PLUGINS_CXX -E"
- CPPFLAGS="$CPPFLAGS -I$CLANGDIR/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
+ CPPFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
+ CXXFLAGS="$COMPILER_PLUGINS_CXXFLAGS"
AC_CHECK_HEADER(clang/AST/RecursiveASTVisitor.h,
[COMPILER_PLUGINS=TRUE],
[
@@ -7031,9 +7046,50 @@ if test "$COM_IS_CLANG" = "TRUE"; then
add_warning "Cannot find Clang headers to build compiler plugins, plugins disabled."
fi
])
+ if test -n "$COMPILER_PLUGINS"; then
+ LDFLAGS=""
+ AC_MSG_CHECKING([for clang libraries to use])
+ if test -z "$CLANGTOOLLIBS"; then
+ LIBS="-lclangTooling -lclangDriver -lclangFrontend -lclangParse -lclangSema -lclangEdit \
+ -lclangAnalysis -lclangAST -lclangLex -lclangSerialization -lclangBasic $COMPILER_PLUGINS_CXX_LINKFLAGS"
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[#include "clang/Tooling/Tooling.h"]],
+ [[ clang::tooling::runToolOnCode( nullptr, "some code" ); ]])
+ ],[CLANGTOOLLIBS="$LIBS"],[])
+ fi
+ if test -z "$CLANGTOOLLIBS"; then
+ LIBS="-lclang-cpp $COMPILER_PLUGINS_CXX_LINKFLAGS"
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[#include "clang/Tooling/Tooling.h"]],
+ [[ clang::tooling::runToolOnCode( nullptr, "some code" ); ]])
+ ],[CLANGTOOLLIBS="$LIBS"],[])
+ fi
+ AC_MSG_RESULT([$CLANGTOOLLIBS])
+ if test -z "$CLANGTOOLLIBS"; then
+ if test "$compiler_plugins" = "yes"; then
+ cat config.log
+ AC_MSG_ERROR([Cannot find Clang libraries to build compiler plugins.])
+ else
+ AC_MSG_WARN([Cannot find Clang libraries to build compiler plugins, plugins disabled])
+ add_warning "Cannot find Clang libraries to build compiler plugins, plugins disabled."
+ fi
+ COMPILER_PLUGINS=
+ fi
+ if test -n "$COMPILER_PLUGINS"; then
+ if test -z "$CLANGSYSINCLUDE"; then
+ if test -n "$LLVM_CONFIG"; then
+ # Path to the clang system headers (no idea if there's a better way to get it).
+ CLANGSYSINCLUDE=$($LLVM_CONFIG --libdir)/clang/$($LLVM_CONFIG --version | sed 's/svn//')/include
+ fi
+ fi
+ fi
+ fi
CXX=$save_CXX
CXXCPP=$save_CXXCPP
CPPFLAGS=$save_CPPFLAGS
+ CXXFLAGS=$save_CXXFLAGS
+ LDFLAGS=$save_LDFLAGS
+ LIBS="$save_LIBS"
AC_LANG_POP([C++])
fi
else
@@ -7043,11 +7099,14 @@ else
fi
AC_SUBST(COMPILER_PLUGINS)
AC_SUBST(COMPILER_PLUGINS_CXX)
+AC_SUBST(COMPILER_PLUGINS_CXXFLAGS)
AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
AC_SUBST(COMPILER_PLUGINS_DEBUG)
AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
AC_SUBST(CLANGDIR)
AC_SUBST(CLANGLIBDIR)
+AC_SUBST(CLANGTOOLLIBS)
+AC_SUBST(CLANGSYSINCLUDE)
# Plugin to help linker.
# Add something like LD_PLUGIN=/usr/lib64/LLVMgold.so to your autogen.input.