[clang] ba9a7f7 - [PS4/PS5] Tidy up driver warnings finding the SDK

Paul Robinson via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 17 09:34:23 PDT 2023


Author: Paul Robinson
Date: 2023-07-17T09:34:15-07:00
New Revision: ba9a7f73a12e75b005bfec359ddc37999b1d38c0

URL: https://github.com/llvm/llvm-project/commit/ba9a7f73a12e75b005bfec359ddc37999b1d38c0
DIFF: https://github.com/llvm/llvm-project/commit/ba9a7f73a12e75b005bfec359ddc37999b1d38c0.diff

LOG: [PS4/PS5] Tidy up driver warnings finding the SDK

Instead of warning possibly up to 3 times about the same problem,
warn only about the actual missing directories.

Added: 
    

Modified: 
    clang/include/clang/Basic/DiagnosticDriverKinds.td
    clang/lib/Driver/ToolChains/PS4CPU.cpp
    clang/test/Driver/frame-pointer-elim.c
    clang/test/Driver/ps4-ps5-visibility-dllstorageclass.c

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index d10262826bf292..c84aa94ddbb44f 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -575,17 +575,13 @@ def err_drv_unsupported_fpatchable_function_entry_argument : Error<
   "the second argument of '-fpatchable-function-entry' must be smaller than the first argument">;
 
 def warn_drv_unable_to_find_directory_expected : Warning<
-  "unable to find %0 directory, expected to be in '%1'">,
-  InGroup<InvalidOrNonExistentDirectory>, DefaultIgnore;
+  "unable to find %0 directory, expected to be in '%1' found via %2">,
+  InGroup<InvalidOrNonExistentDirectory>;
 
 def warn_drv_ps_force_pic : Warning<
   "option '%0' was ignored by the %1 toolchain, using '-fPIC'">,
   InGroup<OptionIgnored>;
 
-def warn_drv_ps_sdk_dir : Warning<
-  "environment variable '%0' is set, but points to invalid or nonexistent directory '%1'">,
-  InGroup<InvalidOrNonExistentDirectory>;
-
 def err_drv_defsym_invalid_format : Error<"defsym must be of the form: sym=value: %0">;
 def err_drv_defsym_invalid_symval : Error<"value is not an integer: %0">;
 def warn_drv_msvc_not_found : Warning<

diff  --git a/clang/lib/Driver/ToolChains/PS4CPU.cpp b/clang/lib/Driver/ToolChains/PS4CPU.cpp
index 37006dc5d7ed8b..2f43d33bf0f1c8 100644
--- a/clang/lib/Driver/ToolChains/PS4CPU.cpp
+++ b/clang/lib/Driver/ToolChains/PS4CPU.cpp
@@ -256,30 +256,23 @@ toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple,
     D.Diag(clang::diag::err_drv_unsupported_opt_for_target)
         << "-static" << Platform;
 
-  // Determine where to find the PS4/PS5 libraries. We use the EnvVar
-  // if it exists; otherwise use the driver's installation path, which
-  // should be <SDK_DIR>/host_tools/bin.
-
-  SmallString<512> SDKDir;
-  if (const char *EnvValue = getenv(EnvVar)) {
-    if (!llvm::sys::fs::exists(EnvValue))
-      D.Diag(clang::diag::warn_drv_ps_sdk_dir) << EnvVar << EnvValue;
-    SDKDir = EnvValue;
-  } else {
-    SDKDir = D.Dir;
-    llvm::sys::path::append(SDKDir, "/../../");
-  }
-
-  // By default, the driver won't report a warning if it can't find the
-  // SDK include or lib directories. This behavior could be changed if
-  // -Weverything or -Winvalid-or-nonexistent-directory options are passed.
+  // Determine where to find the PS4/PS5 libraries.
   // If -isysroot was passed, use that as the SDK base path.
+  // If not, we use the EnvVar if it exists; otherwise use the driver's
+  // installation path, which should be <SDK_DIR>/host_tools/bin.
+  SmallString<80> Whence;
   if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {
     SDKRootDir = A->getValue();
     if (!llvm::sys::fs::exists(SDKRootDir))
       D.Diag(clang::diag::warn_missing_sysroot) << SDKRootDir;
-  } else
-    SDKRootDir = std::string(SDKDir.str());
+    Whence = A->getSpelling();
+  } else if (const char *EnvValue = getenv(EnvVar)) {
+    SDKRootDir = EnvValue;
+    Whence = { "environment variable '", EnvVar, "'" };
+  } else {
+    SDKRootDir = D.Dir + "/../../";
+    Whence = "compiler's location";
+  }
 
   SmallString<512> SDKIncludeDir(SDKRootDir);
   llvm::sys::path::append(SDKIncludeDir, "target/include");
@@ -289,7 +282,7 @@ toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple,
       !Args.hasArg(options::OPT__sysroot_EQ) &&
       !llvm::sys::fs::exists(SDKIncludeDir)) {
     D.Diag(clang::diag::warn_drv_unable_to_find_directory_expected)
-        << Twine(Platform, " system headers").str() << SDKIncludeDir;
+        << Twine(Platform, " system headers").str() << SDKIncludeDir << Whence;
   }
 
   SmallString<512> SDKLibDir(SDKRootDir);
@@ -301,7 +294,7 @@ toolchains::PS4PS5Base::PS4PS5Base(const Driver &D, const llvm::Triple &Triple,
       !Args.hasArg(options::OPT_emit_ast) &&
       !llvm::sys::fs::exists(SDKLibDir)) {
     D.Diag(clang::diag::warn_drv_unable_to_find_directory_expected)
-        << Twine(Platform, " system libraries").str() << SDKLibDir;
+        << Twine(Platform, " system libraries").str() << SDKLibDir << Whence;
     return;
   }
   getFilePaths().push_back(std::string(SDKLibDir.str()));

diff  --git a/clang/test/Driver/frame-pointer-elim.c b/clang/test/Driver/frame-pointer-elim.c
index 71aca66c46ba77..a4abe0d90a40bd 100644
--- a/clang/test/Driver/frame-pointer-elim.c
+++ b/clang/test/Driver/frame-pointer-elim.c
@@ -1,8 +1,8 @@
-// KEEP-ALL-NOT:  warning:
+// KEEP-ALL-NOT:  warning: argument unused
 // KEEP-ALL:      "-mframe-pointer=all"
-// KEEP-NON-LEAF-NOT: warning:
+// KEEP-NON-LEAF-NOT: warning: argument unused
 // KEEP-NON-LEAF: "-mframe-pointer=non-leaf"
-// KEEP-NONE-NOT: warning:
+// KEEP-NONE-NOT: warning: argument unused
 // KEEP-NONE:     "-mframe-pointer=none"
 
 // On Linux x86, omit frame pointer when optimization is enabled.

diff  --git a/clang/test/Driver/ps4-ps5-visibility-dllstorageclass.c b/clang/test/Driver/ps4-ps5-visibility-dllstorageclass.c
index 1a54990da47643..430827805a8fda 100644
--- a/clang/test/Driver/ps4-ps5-visibility-dllstorageclass.c
+++ b/clang/test/Driver/ps4-ps5-visibility-dllstorageclass.c
@@ -52,7 +52,7 @@
 // REDEFINE:     --implicit-check-not=-fvisibility-nodllstorageclass \
 // REDEFINE:     --implicit-check-not=-fvisibility-externs-dllimport \
 // REDEFINE:     --implicit-check-not=-fvisibility-externs-nodllstorageclass \
-// REDEFINE:     --implicit-check-not=warning:
+// REDEFINE:     --implicit-check-not="warning: argument unused"
 // REDEFINE: %{triple} = x86_64-scei-ps4
 // RUN: %{run}
 // REDEFINE: %{triple} = x86_64-sie-ps5


        


More information about the cfe-commits mailing list