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