summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2019-03-21 19:33:34 +0100
committerStephan Bergmann <sbergman@redhat.com>2019-03-22 11:38:51 +0100
commitad7e2af4ed0c11f8571374fbb40d38b38c27959c (patch)
tree47f0224153db5891566be9dd84713482f4c2da0a
parentcb54bb89494218589227246f1923d8a24ab1676a (diff)
Allow to pass additional options into generator's clang::tooling
In my macOS build, that clang::tooling::runToolOnCodeWithArgs invocation failed to find headers like cassert and assert.h, which works now with COMPILER_PLUGINS_TOOLING_ARGS=-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -isystem /Users/stephan/Software/llvm/inst/include/c++/v1 added to my autogen.input (I build against my Clang trunk libc++ whose headers are at /Users/stephan/Software/llvm/inst/include/c++/v1). Change-Id: Idbffa39c9fd4a88743fd498b8f7b6c9c56d7630d Reviewed-on: https://gerrit.libreoffice.org/69538 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r--compilerplugins/Makefile-clang.mk4
-rw-r--r--compilerplugins/clang/sharedvisitor/generator.cxx26
-rw-r--r--config_host.mk.in1
-rw-r--r--configure.ac1
4 files changed, 25 insertions, 7 deletions
diff --git a/compilerplugins/Makefile-clang.mk b/compilerplugins/Makefile-clang.mk
index 0d73bebb8daf..f342ec01b5f9 100644
--- a/compilerplugins/Makefile-clang.mk
+++ b/compilerplugins/Makefile-clang.mk
@@ -175,7 +175,9 @@ ifdef LO_CLANG_SHARED_PLUGINS
$(CLANGINDIR)/sharedvisitor/sharedvisitor.cxx: $(shell grep -l "LO_CLANG_SHARED_PLUGINS" $(CLANGINDIR)/*.cxx)
$(CLANGINDIR)/sharedvisitor/sharedvisitor.cxx: $(CLANGOUTDIR)/sharedvisitor/generator$(CLANG_EXE_EXT)
$(call gb_Output_announce,$(subst $(SRCDIR)/,,$@),$(true),GEN,1)
- $(CLANGOUTDIR)/sharedvisitor/generator$(CLANG_EXE_EXT) $(shell grep -l "LO_CLANG_SHARED_PLUGINS" $(CLANGINDIR)/*.cxx) \
+ $(CLANGOUTDIR)/sharedvisitor/generator$(CLANG_EXE_EXT) \
+ $(COMPILER_PLUGINS_TOOLING_ARGS:%=-arg=%) \
+ $(shell grep -l "LO_CLANG_SHARED_PLUGINS" $(CLANGINDIR)/*.cxx) \
> $(CLANGINDIR)/sharedvisitor/sharedvisitor.cxx
CLANGTOOLLIBS = -lclangTooling -lclangDriver -lclangFrontend -lclangParse -lclangSema -lclangEdit -lclangAnalysis \
diff --git a/compilerplugins/clang/sharedvisitor/generator.cxx b/compilerplugins/clang/sharedvisitor/generator.cxx
index bd957a903ee6..b12939516d16 100644
--- a/compilerplugins/clang/sharedvisitor/generator.cxx
+++ b/compilerplugins/clang/sharedvisitor/generator.cxx
@@ -56,6 +56,8 @@ TODO:
#include "clang/Frontend/FrontendAction.h"
#include "clang/Tooling/Tooling.h"
+#include <cstddef>
+#include <cstring>
#include <iostream>
#include <fstream>
#include <set>
@@ -534,14 +536,21 @@ string readSourceFile( const char* filename )
int main(int argc, char** argv)
{
- for( int i = 1; i < argc; ++ i )
+ vector< string > args;
+ int i = 1;
+ for( ; i < argc; ++ i )
{
- string contents = readSourceFile(argv[i]);
- if( contents.empty())
- continue;
+ constexpr std::size_t prefixlen = 5; // strlen("-arg=");
+ if (std::strncmp(argv[i], "-arg=", prefixlen) != 0)
+ {
+ break;
+ }
+ args.push_back(argv[i] + prefixlen);
+ }
#define STRINGIFY2(a) #a
#define STRINGIFY(a) STRINGIFY2(a)
- vector< string > args =
+ args.insert(
+ args.end(),
{
"-I" STRINGIFY(BUILDDIR) "/config_host", // plugin sources use e.g. config_global.h
"-I" STRINGIFY(CLANGDIR) "/include", // clang's headers
@@ -550,7 +559,12 @@ int main(int argc, char** argv)
"-D__STDC_CONSTANT_MACROS", // Clang headers require these.
"-D__STDC_FORMAT_MACROS",
"-D__STDC_LIMIT_MACROS",
- };
+ });
+ for( ; i < argc; ++ i )
+ {
+ string contents = readSourceFile(argv[i]);
+ if( contents.empty())
+ continue;
foundSomething = false;
if( !clang::tooling::runToolOnCodeWithArgs( new FindNamedClassAction, contents, args, argv[ i ] ))
{
diff --git a/config_host.mk.in b/config_host.mk.in
index 5b4a54a8e3ed..ef174b790939 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -75,6 +75,7 @@ export COMPILER_PLUGINS=@COMPILER_PLUGINS@
export COMPILER_PLUGINS_CXX=@COMPILER_PLUGINS_CXX@
export COMPILER_PLUGINS_CXX_LINKFLAGS=@COMPILER_PLUGINS_CXX_LINKFLAGS@
export COMPILER_PLUGINS_DEBUG=@COMPILER_PLUGINS_DEBUG@
+export COMPILER_PLUGINS_TOOLING_ARGS=@COMPILER_PLUGINS_TOOLING_ARGS@
export COM_IS_CLANG=@COM_IS_CLANG@
export CPPUNIT_CFLAGS=$(gb_SPACE)@CPPUNIT_CFLAGS@
export CPPUNIT_LIBS=$(gb_SPACE)@CPPUNIT_LIBS@
diff --git a/configure.ac b/configure.ac
index 40dac2f7fa0f..8a3f1e2cdfeb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6917,6 +6917,7 @@ AC_SUBST(COMPILER_PLUGINS)
AC_SUBST(COMPILER_PLUGINS_CXX)
AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
AC_SUBST(COMPILER_PLUGINS_DEBUG)
+AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
AC_SUBST(CLANGDIR)
AC_SUBST(CLANGLIBDIR)