[libc-commits] [libc] 9a891df - [libc][cmake] Suppress -Wpsabi note on GCC and clean up resource-dir check. (#227968)

via libc-commits libc-commits at lists.llvm.org
Fri Oct 2 21:12:23 PDT 2026


Author: lntue
Date: 2026-10-03T00:12:16-04:00
New Revision: 9a891dfc2c17fda49accc8c37cf4c2ddde6fa7d7

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

LOG: [libc][cmake] Suppress -Wpsabi note on GCC and clean up resource-dir check. (#227968)

- Add `-Wno-psabi` to GCC compile options to suppress ABI change notes
for 80-bit long double unions.
- Pass `ERROR_QUIET` to clang-specific `--print-resource-dir` query in
`libc/CMakeLists.txt` so it does not output errors on GCC and MSVC.

Assisted-by: Gemini

Added: 
    

Modified: 
    libc/CMakeLists.txt
    libc/src/__support/printf_core/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/libc/CMakeLists.txt b/libc/CMakeLists.txt
index 292e4c90a26a85..f44a84d5ae48a4 100644
--- a/libc/CMakeLists.txt
+++ b/libc/CMakeLists.txt
@@ -127,44 +127,85 @@ set(LIBC_TEST_HERMETIC_ONLY "" OFF CACHE BOOL "Only enable hermetic tests.")
 
 list(APPEND LIBC_COMPILE_OPTIONS_DEFAULT ${LIBC_COMMON_TUNE_OPTIONS})
 
-# Check --print-resource-dir to find the compiler resource dir if this flag
-# is supported by the compiler.
-execute_process(
-  OUTPUT_STRIP_TRAILING_WHITESPACE
-  COMMAND ${CMAKE_CXX_COMPILER} --print-resource-dir
-  RESULT_VARIABLE COMMAND_RETURN_CODE
-  OUTPUT_VARIABLE COMPILER_RESOURCE_DIR
-)
-# Retrieve the host compiler's resource dir.
-if(COMMAND_RETURN_CODE EQUAL 0)
-  set(COMPILER_RESOURCE_DIR
-    "${COMPILER_RESOURCE_DIR}" CACHE PATH "path to compiler resource dir"
-  )
-  message(STATUS "Set COMPILER_RESOURCE_DIR to "
-    "${COMPILER_RESOURCE_DIR} using --print-resource-dir")
-else()
-  # Try with GCC option: -print-search-dirs, which will output in the form:
-  #   install: <path>
-  #   programs: ........
-  # So we try to capture the <path> after "install: " in the first line of the
-  # output.
-  execute_process(
-    OUTPUT_STRIP_TRAILING_WHITESPACE
-    COMMAND ${CMAKE_CXX_COMPILER} -print-search-dirs
-    RESULT_VARIABLE COMMAND_RETURN_CODE
-    OUTPUT_VARIABLE COMPILER_RESOURCE_DIR
-  )
-  if(COMMAND_RETURN_CODE EQUAL 0)
-    string(REPLACE " " ";" COMPILER_RESOURCE_DIR ${COMPILER_RESOURCE_DIR})
-    string(REPLACE "\n" ";" COMPILER_RESOURCE_DIR "${COMPILER_RESOURCE_DIR}")
-    list(GET COMPILER_RESOURCE_DIR 1 COMPILER_RESOURCE_DIR)
-    message(STATUS "Set COMPILER_RESOURCE_DIR to "
-      "${COMPILER_RESOURCE_DIR} using --print-search-dirs")
+# Find the compiler resource dir for compilers that support it.
+if(NOT COMPILER_RESOURCE_DIR)
+  if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+    execute_process(
+      COMMAND ${CMAKE_CXX_COMPILER} --print-resource-dir
+      RESULT_VARIABLE COMMAND_RETURN_CODE
+      OUTPUT_VARIABLE RES_DIR
+      ERROR_QUIET
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    if(COMMAND_RETURN_CODE EQUAL 0)
+      set(COMPILER_RESOURCE_DIR
+        "${RES_DIR}" CACHE PATH "path to compiler resource dir"
+      )
+      message(STATUS "Set COMPILER_RESOURCE_DIR to "
+        "${COMPILER_RESOURCE_DIR} using --print-resource-dir")
+    endif()
+  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+    execute_process(
+      COMMAND ${CMAKE_CXX_COMPILER} -print-search-dirs
+      RESULT_VARIABLE COMMAND_RETURN_CODE
+      OUTPUT_VARIABLE RES_DIR
+      ERROR_QUIET
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    if(COMMAND_RETURN_CODE EQUAL 0 AND RES_DIR MATCHES "install:[ \t]*([^\r\n]+)")
+      string(STRIP "${CMAKE_MATCH_1}" RES_DIR)
+      set(COMPILER_RESOURCE_DIR
+        "${RES_DIR}" CACHE PATH "path to compiler resource dir"
+      )
+      message(STATUS "Set COMPILER_RESOURCE_DIR to "
+        "${COMPILER_RESOURCE_DIR} using --print-search-dirs")
+    endif()
+  elseif(MSVC)
+    if(LIBC_TARGET_OS_IS_GPU)
+      message(FATAL_ERROR "COMPILER_RESOURCE_DIR must be set for GPU builds")
+    else()
+      set(COMPILER_RESOURCE_DIR OFF CACHE PATH "path to compiler resource dir")
+      message(STATUS "COMPILER_RESOURCE_DIR not set (not supported by MSVC)")
+    endif()
   else()
+    # Try generic options for other compilers.
+    execute_process(
+      COMMAND ${CMAKE_CXX_COMPILER} --print-resource-dir
+      RESULT_VARIABLE COMMAND_RETURN_CODE
+      OUTPUT_VARIABLE RES_DIR
+      ERROR_QUIET
+      OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    if(COMMAND_RETURN_CODE EQUAL 0)
+      set(COMPILER_RESOURCE_DIR
+        "${RES_DIR}" CACHE PATH "path to compiler resource dir"
+      )
+      message(STATUS "Set COMPILER_RESOURCE_DIR to "
+        "${COMPILER_RESOURCE_DIR} using --print-resource-dir")
+    else()
+      execute_process(
+        COMMAND ${CMAKE_CXX_COMPILER} -print-search-dirs
+        RESULT_VARIABLE COMMAND_RETURN_CODE
+        OUTPUT_VARIABLE RES_DIR
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+      )
+      if(COMMAND_RETURN_CODE EQUAL 0 AND RES_DIR MATCHES "install:[ \t]*([^\r\n]+)")
+        string(STRIP "${CMAKE_MATCH_1}" RES_DIR)
+        set(COMPILER_RESOURCE_DIR
+          "${RES_DIR}" CACHE PATH "path to compiler resource dir"
+        )
+        message(STATUS "Set COMPILER_RESOURCE_DIR to "
+          "${COMPILER_RESOURCE_DIR} using --print-search-dirs")
+      endif()
+    endif()
+  endif()
+
+  if(NOT COMPILER_RESOURCE_DIR AND NOT MSVC)
     if(LIBC_TARGET_OS_IS_GPU)
       message(FATAL_ERROR "COMPILER_RESOURCE_DIR must be set for GPU builds")
     else()
-      set(COMPILER_RESOURCE_DIR OFF)
+      set(COMPILER_RESOURCE_DIR OFF CACHE PATH "path to compiler resource dir")
       message(STATUS "COMPILER_RESOURCE_DIR not set
                       --print-resource-dir not supported by host compiler")
     endif()

diff  --git a/libc/src/__support/printf_core/CMakeLists.txt b/libc/src/__support/printf_core/CMakeLists.txt
index 2634dab56eead2..03b680010b00f0 100644
--- a/libc/src/__support/printf_core/CMakeLists.txt
+++ b/libc/src/__support/printf_core/CMakeLists.txt
@@ -89,10 +89,20 @@ add_header_library(
     libc.hdr.errno_macros
 )
 
+set(parser_compile_options "")
+if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+  # Suppress GCC's warning about passing unions with 80-bit long double,
+  # which is triggered when Parser::get_arg_value returns
+  # cpp::optional<long double> by value on x86-64.
+  list(APPEND parser_compile_options "-Wno-psabi")
+endif()
+
 add_header_library(
   parser
   HDRS
     parser.h
+  COMPILE_OPTIONS
+    ${parser_compile_options}
   DEPENDS
     .core_structs
     libc.src.__support.arg_list


        


More information about the libc-commits mailing list