[PATCH] D124874: [clang] add -fmodule-file-home-is-cwd
Richard Howell via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 4 09:00:41 PDT 2022
rmaz updated this revision to Diff 427034.
rmaz added a comment.
Use regex for path separators in test
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D124874/new/
https://reviews.llvm.org/D124874
Files:
clang/include/clang/Driver/Options.td
clang/include/clang/Lex/HeaderSearchOptions.h
clang/lib/Serialization/ASTWriter.cpp
clang/test/Modules/module-file-home-is-cwd.m
Index: clang/test/Modules/module-file-home-is-cwd.m
===================================================================
--- /dev/null
+++ clang/test/Modules/module-file-home-is-cwd.m
@@ -0,0 +1,8 @@
+// RUN: cd %S
+// RUN: %clang_cc1 -fmodules -fno-implicit-modules -fmodule-file-home-is-cwd -fmodule-name=libA -emit-module Inputs/normal-module-map/module.map -o %t/mod.pcm
+// RUN: llvm-bcanalyzer --dump --disable-histogram %t/mod.pcm | FileCheck %s
+
+// CHECK: <INPUT_FILE {{.*}}/> blob data = 'Inputs{{/|\\\\}}normal-module-map{{/|\\\\}}a1.h'
+// CHECK: <INPUT_FILE {{.*}}/> blob data = 'Inputs{{/|\\\\}}normal-module-map{{/|\\\\}}a2.h'
+// CHECK: <INPUT_FILE {{.*}}/> blob data = 'Inputs{{/|\\\\}}normal-module-map{{/|\\\\}}module.map'
+// CHECK-NOT: MODULE_DIRECTORY
Index: clang/lib/Serialization/ASTWriter.cpp
===================================================================
--- clang/lib/Serialization/ASTWriter.cpp
+++ clang/lib/Serialization/ASTWriter.cpp
@@ -1223,7 +1223,15 @@
Stream.EmitRecordWithBlob(AbbrevCode, Record, WritingModule->Name);
}
- if (WritingModule && WritingModule->Directory) {
+ if (WritingModule &&
+ PP.getHeaderSearchInfo().getHeaderSearchOpts().ModuleFileHomeIsCwd) {
+ // Use the current working directory as the base path for all inputs.
+ auto *CWD =
+ Context.getSourceManager().getFileManager().getDirectory(".").get();
+ SmallString<128> BaseDir(CWD->getName());
+ cleanPathForOutput(Context.getSourceManager().getFileManager(), BaseDir);
+ BaseDirectory.assign(BaseDir.begin(), BaseDir.end());
+ } else if (WritingModule && WritingModule->Directory) {
SmallString<128> BaseDir(WritingModule->Directory->getName());
cleanPathForOutput(Context.getSourceManager().getFileManager(), BaseDir);
Index: clang/include/clang/Lex/HeaderSearchOptions.h
===================================================================
--- clang/include/clang/Lex/HeaderSearchOptions.h
+++ clang/include/clang/Lex/HeaderSearchOptions.h
@@ -143,6 +143,12 @@
/// file.
unsigned ModuleMapFileHomeIsCwd : 1;
+ /// Set the base path of a built module file to be the current working
+ /// directory. This is useful for sharing module files across machines
+ /// that build with different paths without having to rewrite all
+ /// modulemap files to have working directory relative paths.
+ unsigned ModuleFileHomeIsCwd : 1;
+
/// Also search for prebuilt implicit modules in the prebuilt module cache
/// path.
unsigned EnablePrebuiltImplicitModules : 1;
@@ -222,9 +228,9 @@
HeaderSearchOptions(StringRef _Sysroot = "/")
: Sysroot(_Sysroot), ModuleFormat("raw"), DisableModuleHash(false),
ImplicitModuleMaps(false), ModuleMapFileHomeIsCwd(false),
- EnablePrebuiltImplicitModules(false), UseBuiltinIncludes(true),
- UseStandardSystemIncludes(true), UseStandardCXXIncludes(true),
- UseLibcxx(false), Verbose(false),
+ ModuleFileHomeIsCwd(false), EnablePrebuiltImplicitModules(false),
+ UseBuiltinIncludes(true), UseStandardSystemIncludes(true),
+ UseStandardCXXIncludes(true), UseLibcxx(false), Verbose(false),
ModulesValidateOncePerBuildSession(false),
ModulesValidateSystemHeaders(false),
ValidateASTInputFilesContent(false), UseDebugInfo(false),
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -5609,6 +5609,10 @@
HelpText<"Use the current working directory as the home directory of "
"module maps specified by -fmodule-map-file=<FILE>">,
MarshallingInfoFlag<HeaderSearchOpts<"ModuleMapFileHomeIsCwd">>;
+def fmodule_file_home_is_cwd : Flag<["-"], "fmodule-file-home-is-cwd">,
+ HelpText<"Use the current working directory as the base directory of "
+ "compiled module files.">,
+ MarshallingInfoFlag<HeaderSearchOpts<"ModuleFileHomeIsCwd">>;
def fmodule_feature : Separate<["-"], "fmodule-feature">,
MetaVarName<"<feature>">,
HelpText<"Enable <feature> in module map requires declarations">,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D124874.427034.patch
Type: text/x-patch
Size: 4162 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220504/3544c0f7/attachment-0001.bin>
More information about the cfe-commits
mailing list