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" + } +]
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" + } +]
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits