[PATCH] D114206: [Clang][ScanDeps] Use the virtual path for module maps
Michael Spencer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 18 16:17:57 PST 2021
Bigcheese created this revision.
Bigcheese added reviewers: jansvoboda11, dexonsmith.
Bigcheese added a project: clang.
Bigcheese requested review of this revision.
Herald added a subscriber: cfe-commits.
This patch makes clang-scan-deps use the virtual path for module maps instead of the on disk path. This is needed so that modulemap relative lookups are done correctly in the actual module builds. The file dependencies still use the on disk path as that's what matters for build invalidation.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D114206
Files:
clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
clang/test/ClangScanDeps/modulemap-via-vfs.m
Index: clang/test/ClangScanDeps/modulemap-via-vfs.m
===================================================================
--- /dev/null
+++ clang/test/ClangScanDeps/modulemap-via-vfs.m
@@ -0,0 +1,56 @@
+// RUN: rm -rf %t.dir
+// RUN: split-file %s %t.dir
+// RUN: sed -e "s|DIR|%/t.dir|g" %t.dir/build/compile-commands.json.in > %t.dir/build/compile-commands.json
+// RUN: sed -e "s|DIR|%/t.dir|g" %t.dir/build/vfs.yaml.in > %t.dir/build/vfs.yaml
+// RUN: clang-scan-deps -compilation-database %t.dir/build/compile-commands.json -j 1 -format experimental-full \
+// RUN: -mode preprocess-minimized-sources -generate-modules-path-args > %t.db
+// RUN: %python %S/../../utils/module-deps-to-rsp.py %t.db --module-name=A > %t.A.cc1.rsp
+// RUN: FileCheck %s < %t.A.cc1.rsp
+
+// CHECK-NOT: build/module.modulemap
+// CHECK: A/module.modulemap
+
+//--- build/compile-commands.json.in
+
+[
+{
+ "directory": "DIR",
+ "command": "clang main.m -Imodules/A -fmodules -fmodules-cache-path=module-cache -fimplicit-modules -fimplicit-module-maps -ivfsoverlay build/vfs.yaml",
+ "file": "DIR/main.m"
+}
+]
+
+//--- build/module.modulemap
+
+module A {
+ umbrella header "A.h"
+}
+
+//--- modules/A/A.h
+
+typedef int A_t;
+
+//--- build/vfs.yaml.in
+
+{
+ "version": 0,
+ "case-sensitive": "false",
+ "roots": [
+ {
+ "contents": [
+ {
+ "external-contents": "DIR/build/module.modulemap",
+ "name": "module.modulemap",
+ "type": "file"
+ }],
+ "name": "DIR/modules/A",
+ "type": "directory"
+ }
+ ]
+}
+
+//--- main.m
+
+ at import A;
+
+A_t a = 0;
Index: clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
===================================================================
--- clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
+++ clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
@@ -252,7 +252,13 @@
.getHeaderSearchInfo()
.getModuleMap()
.getModuleMapFileForUniquing(M);
- MD.ClangModuleMapFile = std::string(ModuleMap ? ModuleMap->getName() : "");
+
+ if (ModuleMap) {
+ StringRef Path = ModuleMap->tryGetRealPathName();
+ if (Path.empty())
+ Path = ModuleMap->getName();
+ MD.ClangModuleMapFile = std::string(Path);
+ }
serialization::ModuleFile *MF =
MDC.ScanInstance.getASTReader()->getModuleManager().lookup(
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D114206.388349.patch
Type: text/x-patch
Size: 2421 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211119/c6bc127e/attachment.bin>
More information about the cfe-commits
mailing list