[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