diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2019-03-21 19:33:34 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2019-03-22 11:38:51 +0100 |
commit | ad7e2af4ed0c11f8571374fbb40d38b38c27959c (patch) | |
tree | 47f0224153db5891566be9dd84713482f4c2da0a /compilerplugins | |
parent | cb54bb89494218589227246f1923d8a24ab1676a (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>
Diffstat (limited to 'compilerplugins')
-rw-r--r-- | compilerplugins/Makefile-clang.mk | 4 | ||||
-rw-r--r-- | compilerplugins/clang/sharedvisitor/generator.cxx | 26 |
2 files changed, 23 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 ] )) { |