diff options
author | Ben Langmuir <blangmuir@apple.com> | 2022-08-22 15:42:52 -0700 |
---|---|---|
committer | Ben Langmuir <blangmuir@apple.com> | 2022-08-23 08:18:14 -0700 |
commit | 3708a148421fd0449081b9a91fba28f51f1dfb12 (patch) | |
tree | 76a651ef3d22c609cb09dc46558a4a8be3f640b6 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 86bfab2723618772f5c4ffc2a68eedca592c6928 (diff) | |
download | llvm-3708a148421fd0449081b9a91fba28f51f1dfb12.zip llvm-3708a148421fd0449081b9a91fba28f51f1dfb12.tar.gz llvm-3708a148421fd0449081b9a91fba28f51f1dfb12.tar.bz2 |
[clang] Pull some utility functions into CompilerInvocation NFC
Move copying compiler arguments to a vector<string> and modifying
common module-related options into CompilerInvocation in preparation for
using some of them in more places and to avoid duplicating this code
accidentally in the future.
Differential Revision: https://reviews.llvm.org/D132419
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 9731d40..7e6d0cd 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -4672,6 +4672,37 @@ void CompilerInvocation::generateCC1CommandLine( GenerateDependencyOutputArgs(DependencyOutputOpts, Args, SA); } +std::vector<std::string> CompilerInvocation::getCC1CommandLine() const { + // Set up string allocator. + llvm::BumpPtrAllocator Alloc; + llvm::StringSaver Strings(Alloc); + auto SA = [&Strings](const Twine &Arg) { return Strings.save(Arg).data(); }; + + // Synthesize full command line from the CompilerInvocation, including "-cc1". + SmallVector<const char *, 32> Args{"-cc1"}; + generateCC1CommandLine(Args, SA); + + // Convert arguments to the return type. + return std::vector<std::string>{Args.begin(), Args.end()}; +} + +void CompilerInvocation::resetNonModularOptions() { + getLangOpts()->resetNonModularOptions(); + getPreprocessorOpts().resetNonModularOptions(); +} + +void CompilerInvocation::clearImplicitModuleBuildOptions() { + getLangOpts()->ImplicitModules = false; + getHeaderSearchOpts().ImplicitModuleMaps = false; + getHeaderSearchOpts().ModuleCachePath.clear(); + getHeaderSearchOpts().ModulesValidateOncePerBuildSession = false; + getHeaderSearchOpts().BuildSessionTimestamp = 0; + // The specific values we canonicalize to for pruning don't affect behaviour, + /// so use the default values so they may be dropped from the command-line. + getHeaderSearchOpts().ModuleCachePruneInterval = 7 * 24 * 60 * 60; + getHeaderSearchOpts().ModuleCachePruneAfter = 31 * 24 * 60 * 60; +} + IntrusiveRefCntPtr<llvm::vfs::FileSystem> clang::createVFSFromCompilerInvocation(const CompilerInvocation &CI, DiagnosticsEngine &Diags) { |