Reapply "[libc] Finetune libc.src.__support.OSUtil.osutil dependency." (#190033) (#190065)

This reverts commit 84f23eb311 and fix GPU
builds.
This commit is contained in:
lntue
2026-04-01 18:38:32 -04:00
committed by GitHub
parent e5a7a9a95f
commit e87ea848b7
9 changed files with 83 additions and 17 deletions

View File

@@ -182,6 +182,10 @@ function(_get_compile_options_from_config output_var)
libc_add_definition(config_options "LIBC_COPT_PRINTF_DISABLE_BITINT")
endif()
if(LIBC_COPT_USE_C_ASSERT)
list(APPEND config_options "-DLIBC_COPT_USE_C_ASSERT")
endif()
set(${output_var} ${config_options} PARENT_SCOPE)
endfunction(_get_compile_options_from_config)

View File

@@ -186,5 +186,11 @@
"value": false,
"doc": "Trap with SIGFPE when feraiseexcept is called with unmasked floating point exceptions, similar to glibc's behavior. This is currently working only on x86 with SSE."
}
},
"assert": {
"LIBC_COPT_USE_C_ASSERT": {
"value": false,
"doc": "Use the system assert macro for LIBC_ASSERT."
}
}
}

View File

@@ -369,15 +369,23 @@ add_header_library(
libc.src.__support.macros.properties.types
)
add_header_library(
libc_assert
HDRS
libc_assert.h
DEPENDS
.integer_to_string
libc.src.__support.OSUtil.osutil
libc.src.__support.macros.optimization
)
if(LIBC_COPT_USE_C_ASSERT OR NOT LLVM_LIBC_FULL_BUILD)
add_header_library(
libc_assert
HDRS
libc_assert.h
)
else()
add_header_library(
libc_assert
HDRS
libc_assert.h
DEPENDS
.integer_to_string
libc.src.__support.OSUtil.osutil
libc.src.__support.macros.optimization
)
endif()
add_header_library(
hash

View File

@@ -7,9 +7,11 @@ add_header_library(
libc.hdr.types.time_t
)
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}
AND TARGET libc.src.__support.OSUtil.osutil)
add_subdirectory(${LIBC_TARGET_OS})
else()
message(STATUS "Skip libc.src.__support.time.* targets.")
return()
endif()

View File

@@ -10,6 +10,7 @@
#include "src/__support/CPP/atomic.h"
#include "src/__support/GPU/utils.h"
#include "src/__support/common.h"
#include "src/__support/libc_assert.h"
#include "src/__support/macros/config.h"
#include "src/stdlib/abort.h"

View File

@@ -1,3 +1,9 @@
if(NOT TARGET libc.src.__support.OSUtil.osutil)
message(STATUS "libc.src.__support.OSUtil.osutil is not available. "
"Skip libc.src.time.linux.* targets.")
return()
endif()
add_entrypoint_object(
timespec_get
SRCS

View File

@@ -1,3 +1,9 @@
if(NOT TARGET libc.src.__support.OSUtil.osutil)
message(STATUS "libc.src.__support.OSUtil.osutil is not avaiable. "
"Skip unistd targets.")
return()
endif()
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
endif()

View File

@@ -3,7 +3,7 @@ function(add_unittest_framework_library name)
"TEST_LIB"
"" # No optional arguments
"" # No single value arguments
"SRCS;HDRS;DEPENDS" # Multi value arguments
"SRCS;HDRS;DEPENDS;COMPILE_OPTIONS" # Multi value arguments
${ARGN}
)
if(NOT TEST_LIB_SRCS)
@@ -30,14 +30,17 @@ function(add_unittest_framework_library name)
# making LibcFPExceptionHelpers and LibcDeathTestExecutors hermetic.
set(LLVM_LIBC_FULL_BUILD "")
_get_common_test_compile_options(compile_options "" "")
target_compile_options(${name}.unit PRIVATE ${compile_options})
set(LLVM_LIBC_FULL_BUILD ON)
else()
_get_common_test_compile_options(compile_options "" "")
target_compile_options(${name}.unit PRIVATE ${compile_options})
endif()
_get_hermetic_test_compile_options(compile_options "")
if (TEST_LIB_COMPILE_OPTIONS)
list(APPEND compile_options ${TEST_LIB_COMPILE_OPTIONS})
endif()
target_compile_options(${name}.unit PRIVATE ${compile_options})
_get_hermetic_test_compile_options(compile_options "")
target_include_directories(${name}.hermetic PRIVATE ${LIBC_INCLUDE_DIR})
target_compile_options(${name}.hermetic PRIVATE ${compile_options} -nostdinc++)
@@ -57,6 +60,15 @@ function(add_unittest_framework_library name)
endif()
endfunction()
if (NOT TARGET libc.src.__support.OSUtil.osutil OR NOT LLVM_LIBC_FULL_BUILD)
message(STATUS "TestLogger will use system libc's stdio to print.")
set(test_logger_compile_options "-DLIBC_TEST_USE_SYSTEM_PRINTF")
set(test_logger_osutil "")
else()
set(test_logger_compile_options "")
set(test_logger_osutil "libc.src.__support.OSUtil.osutil")
endif()
add_unittest_framework_library(
LibcTest
SRCS
@@ -68,6 +80,8 @@ add_unittest_framework_library(
LibcTest.h
Test.h
TestLogger.h
COMPILE_OPTIONS
${test_logger_compile_options}
DEPENDS
libc.hdr.stdint_proxy
libc.src.__support.big_int
@@ -78,8 +92,8 @@ add_unittest_framework_library(
libc.src.__support.fixed_point.fx_rep
libc.src.__support.macros.properties.compiler
libc.src.__support.macros.properties.types
libc.src.__support.OSUtil.osutil
libc.src.__support.uint128
${test_logger_osutil}
)
set(libc_death_test_srcs LibcDeathTestExecutors.cpp)

View File

@@ -2,19 +2,38 @@
#include "hdr/stdint_proxy.h"
#include "src/__support/CPP/string.h"
#include "src/__support/CPP/string_view.h"
#include "src/__support/OSUtil/io.h" // write_to_stderr
#include "src/__support/big_int.h" // is_big_int
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/types.h" // LIBC_TYPES_HAS_INT128
#include "src/__support/uint128.h"
#ifdef LIBC_TEST_USE_SYSTEM_PRINTF
#include <stdio.h>
namespace LIBC_NAMESPACE_DECL {
namespace testing {
void write_to_stderr(cpp::string_view str) {
fprintf(stderr, "%.*s", static_cast<int>(str.size()), str.data());
}
} // namespace testing
} // namespace LIBC_NAMESPACE_DECL
#else // !LIBC_TEST_USE_SYSTEM_PRINTF
#include "src/__support/OSUtil/io.h" // write_to_stderr
#endif // LIBC_TEST_USE_SYSTEM_PRINTF
namespace LIBC_NAMESPACE_DECL {
namespace testing {
// cpp::string_view specialization
template <>
TestLogger &TestLogger::operator<< <cpp::string_view>(cpp::string_view str) {
LIBC_NAMESPACE::write_to_stderr(str);
write_to_stderr(str);
return *this;
}