[PATCH] D108366: [clang][deps] Make resource directory deduction configurable
Jan Svoboda via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 9 07:50:36 PDT 2021
jansvoboda11 updated this revision to Diff 371597.
jansvoboda11 added a comment.
Fix CI pls?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D108366/new/
https://reviews.llvm.org/D108366
Files:
clang/test/ClangScanDeps/Inputs/resource_directory/cdb.json.template
clang/test/ClangScanDeps/Inputs/resource_directory/compiler
clang/test/ClangScanDeps/Inputs/resource_directory/mod.h
clang/test/ClangScanDeps/Inputs/resource_directory/module.modulemap
clang/test/ClangScanDeps/Inputs/resource_directory/tu.c
clang/test/ClangScanDeps/resource_directory.c
clang/tools/clang-scan-deps/ClangScanDeps.cpp
Index: clang/tools/clang-scan-deps/ClangScanDeps.cpp
===================================================================
--- clang/tools/clang-scan-deps/ClangScanDeps.cpp
+++ clang/tools/clang-scan-deps/ClangScanDeps.cpp
@@ -194,6 +194,25 @@
"until reaching the end directive."),
llvm::cl::init(true), llvm::cl::cat(DependencyScannerCategory));
+enum ResourceDirRecipeKind {
+ RDRK_ModifyCompilerPath,
+ RDRK_InvokeCompiler,
+};
+
+static llvm::cl::opt<ResourceDirRecipeKind> ResourceDirRecipe(
+ "resource-dir-recipe",
+ llvm::cl::desc("How to produce missing '-resource-dir' argument"),
+ llvm::cl::values(
+ clEnumValN(RDRK_ModifyCompilerPath, "modify-compiler-path",
+ "Construct the resource directory from the compiler path in "
+ "the compilation database. This assumes it's part of the "
+ "same toolchain as this clang-scan-deps. (default)"),
+ clEnumValN(RDRK_InvokeCompiler, "invoke-compiler",
+ "Invoke the compiler with '-print-resource-dir' and use the "
+ "reported path as the resource directory. (deprecated)")),
+ llvm::cl::init(RDRK_ModifyCompilerPath),
+ llvm::cl::cat(DependencyScannerCategory));
+
llvm::cl::opt<bool> Verbose("v", llvm::cl::Optional,
llvm::cl::desc("Use verbose output."),
llvm::cl::init(false),
@@ -485,7 +504,7 @@
AdjustedArgs.push_back("/clang:" + LastO);
}
- if (!HasResourceDir) {
+ if (!HasResourceDir && ResourceDirRecipe == RDRK_InvokeCompiler) {
StringRef ResourceDir =
ResourceDirCache.findResourceDir(Args, ClangCLMode);
if (!ResourceDir.empty()) {
Index: clang/test/ClangScanDeps/resource_directory.c
===================================================================
--- /dev/null
+++ clang/test/ClangScanDeps/resource_directory.c
@@ -0,0 +1,23 @@
+// RUN: rm -rf %t && mkdir %t
+// RUN: cp %S/Inputs/resource_directory/* %t
+
+// Deduce the resource directory from the compiler path.
+//
+// RUN: sed -e "s|CLANG|/our/custom/bin/clang|g" -e "s|DIR|%/t|g" \
+// RUN: %S/Inputs/resource_directory/cdb.json.template > %t/cdb_path.json
+// RUN: clang-scan-deps -compilation-database %t/cdb_path.json --format experimental-full \
+// RUN: --resource-dir-recipe modify-compiler-path > %t/result_path.json
+// RUN: cat %t/result_path.json | sed 's:\\\\\?:/:g' | FileCheck %s --check-prefix=CHECK-PATH
+// CHECK-PATH: "-resource-dir"
+// CHECK-PATH-NEXT: "/our/custom/lib{{.*}}"
+
+// Run the compiler and ask it for the resource directory.
+//
+// RUN: chmod +x %t/compiler
+// RUN: sed -e "s|CLANG|%/t/compiler|g" -e "s|DIR|%/t|g" \
+// RUN: %S/Inputs/resource_directory/cdb.json.template > %t/cdb_invocation.json
+// RUN: clang-scan-deps -compilation-database %t/cdb_invocation.json --format experimental-full \
+// RUN: --resource-dir-recipe invoke-compiler > %t/result_invocation.json
+// RUN: cat %t/result_invocation.json | sed 's:\\\\\?:/:g' | FileCheck %s --check-prefix=CHECK-INVOCATION
+// CHECK-INVOCATION: "-resource-dir"
+// CHECK-INVOCATION-NEXT: "/custom/compiler/resources"
Index: clang/test/ClangScanDeps/Inputs/resource_directory/tu.c
===================================================================
--- /dev/null
+++ clang/test/ClangScanDeps/Inputs/resource_directory/tu.c
@@ -0,0 +1 @@
+#include "mod.h"
Index: clang/test/ClangScanDeps/Inputs/resource_directory/module.modulemap
===================================================================
--- /dev/null
+++ clang/test/ClangScanDeps/Inputs/resource_directory/module.modulemap
@@ -0,0 +1 @@
+module mod { header "mod.h" }
Index: clang/test/ClangScanDeps/Inputs/resource_directory/compiler
===================================================================
--- /dev/null
+++ clang/test/ClangScanDeps/Inputs/resource_directory/compiler
@@ -0,0 +1,2 @@
+#!/usr/bin/env python3
+print("/custom/compiler/resources")
Index: clang/test/ClangScanDeps/Inputs/resource_directory/cdb.json.template
===================================================================
--- /dev/null
+++ clang/test/ClangScanDeps/Inputs/resource_directory/cdb.json.template
@@ -0,0 +1,7 @@
+[
+ {
+ "directory": "DIR",
+ "command": "CLANG -fmodules -gmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache -c DIR/tu.c -o DIR/tu.o",
+ "file": "DIR/tu.c"
+ }
+]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D108366.371597.patch
Type: text/x-patch
Size: 4460 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210909/b5f3eb80/attachment.bin>
More information about the cfe-commits
mailing list