[flang-commits] [flang] 2df06e4 - [Flang][Driver] Add -print-resource-dir command line flag to emit Flang's resource directory (#90886)
via flang-commits
flang-commits at lists.llvm.org
Tue May 14 00:01:57 PDT 2024
Author: Michael Klemm
Date: 2024-05-14T09:01:51+02:00
New Revision: 2df06e42d733a1f7a1cdf715894921a5bbbc2956
URL: https://github.com/llvm/llvm-project/commit/2df06e42d733a1f7a1cdf715894921a5bbbc2956
DIFF: https://github.com/llvm/llvm-project/commit/2df06e42d733a1f7a1cdf715894921a5bbbc2956.diff
LOG: [Flang][Driver] Add -print-resource-dir command line flag to emit Flang's resource directory (#90886)
This should be a NFC change for all drivers, but Flang.
Added:
flang/test/Driver/print-resource-dir.F90
Modified:
clang/include/clang/Driver/Driver.h
clang/include/clang/Driver/Options.td
clang/lib/Driver/Driver.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Driver/Driver.h b/clang/include/clang/Driver/Driver.h
index cc1538372d5f8..084c3ffe69ae8 100644
--- a/clang/include/clang/Driver/Driver.h
+++ b/clang/include/clang/Driver/Driver.h
@@ -747,6 +747,9 @@ class Driver {
/// option.
void setDriverMode(StringRef DriverModeValue);
+ /// Set the resource directory, depending on which driver is being used.
+ void setResourceDirectory();
+
/// Parse the \p Args list for LTO options and record the type of LTO
/// compilation based on which -f(no-)?lto(=.*)? option occurs last.
void setLTOMode(const llvm::opt::ArgList &Args);
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index c9d8a1f50fecf..c54eb543d6580 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -5491,7 +5491,10 @@ def print_prog_name_EQ : Joined<["-", "--"], "print-prog-name=">,
Visibility<[ClangOption, CLOption]>;
def print_resource_dir : Flag<["-", "--"], "print-resource-dir">,
HelpText<"Print the resource directory pathname">,
- Visibility<[ClangOption, CLOption]>;
+ HelpTextForVariants<[FlangOption],
+ "Print the resource directory pathname that contains lib and "
+ "include directories with the runtime libraries and MODULE files.">,
+ Visibility<[ClangOption, CLOption, FlangOption]>;
def print_search_dirs : Flag<["-", "--"], "print-search-dirs">,
HelpText<"Print the paths used for finding libraries and programs">,
Visibility<[ClangOption, CLOption]>;
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 7b36d8e5084cf..2868b4f2b02e9 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -229,9 +229,6 @@ Driver::Driver(StringRef ClangExecutable, StringRef TargetTriple,
UserConfigDir = static_cast<std::string>(P);
}
#endif
-
- // Compute the path to the resource directory.
- ResourceDir = GetResourcesPath(ClangExecutable, CLANG_RESOURCE_DIR);
}
void Driver::setDriverMode(StringRef Value) {
@@ -250,6 +247,24 @@ void Driver::setDriverMode(StringRef Value) {
Diag(diag::err_drv_unsupported_option_argument) << OptName << Value;
}
+void Driver::setResourceDirectory() {
+ // Compute the path to the resource directory, depending on the driver mode.
+ switch (Mode) {
+ case GCCMode:
+ case GXXMode:
+ case CPPMode:
+ case CLMode:
+ case DXCMode:
+ ResourceDir = GetResourcesPath(ClangExecutable, CLANG_RESOURCE_DIR);
+ break;
+ case FlangMode:
+ SmallString<64> customResourcePathRelativeToDriver{".."};
+ ResourceDir =
+ GetResourcesPath(ClangExecutable, customResourcePathRelativeToDriver);
+ break;
+ }
+}
+
InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings,
bool UseDriverMode, bool &ContainsError) {
llvm::PrettyStackTraceString CrashInfo("Command line argument parsing");
@@ -1202,6 +1217,7 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
if (!DriverMode.empty())
setDriverMode(DriverMode);
+ setResourceDirectory();
// FIXME: What are we going to do with -V and -b?
// Arguments specified in command line.
diff --git a/flang/test/Driver/print-resource-dir.F90 b/flang/test/Driver/print-resource-dir.F90
new file mode 100644
index 0000000000000..8fd35f1800df2
--- /dev/null
+++ b/flang/test/Driver/print-resource-dir.F90
@@ -0,0 +1,4 @@
+! DEFINE: %{resource_dir} = %S/Inputs/resource_dir
+! RUN: %flang -print-resource-dir -resource-dir=%{resource_dir}.. \
+! RUN: | FileCheck -check-prefix=PRINT-RESOURCE-DIR -DFILE=%{resource_dir} %s
+! PRINT-RESOURCE-DIR: [[FILE]]
More information about the flang-commits
mailing list