[libc-commits] [libc] 1d93fc4 - [libc] Add LLVM_LIBC_ENABLE_EXPERIMENTAL_ENTRYPOINTS CMake flag (#197537)
via libc-commits
libc-commits at lists.llvm.org
Wed May 13 23:01:18 PDT 2026
Author: Jeff Bailey
Date: 2026-05-14T07:01:13+01:00
New Revision: 1d93fc4f74fe29481964bb11dd838b800544ca43
URL: https://github.com/llvm/llvm-project/commit/1d93fc4f74fe29481964bb11dd838b800544ca43
DIFF: https://github.com/llvm/llvm-project/commit/1d93fc4f74fe29481964bb11dd838b800544ca43.diff
LOG: [libc] Add LLVM_LIBC_ENABLE_EXPERIMENTAL_ENTRYPOINTS CMake flag (#197537)
Adds a new CMake option, OFF by default, to gate entrypoints with
known-incomplete implementations. This lets developers build and test
partially-implemented functions without exposing them to production
users.
The motivating case is `sysconf`, which only handles three of the
required `_SC_*` constants (`_SC_PAGESIZE`, `_SC_NPROCESSORS_CONF`,
`_SC_NPROCESSORS_ONLN`) and returns `EINVAL` for everything else.
Functions like this are useful to have in a build for testing progress,
but shouldn't be part of a default full build until the implementation
is complete.
Changes:
- `libc/CMakeLists.txt`: adds
`option(LLVM_LIBC_ENABLE_EXPERIMENTAL_ENTRYPOINTS ... OFF)`
- `libc/cmake/modules/LLVMLibCCompileOptionRules.cmake`: propagates
`-DLIBC_EXPERIMENTAL_ENTRYPOINTS` when ON
- `libc/cmake/modules/LLVMLibCTestRules.cmake`: same for test compile
options
- `libc/config/linux/{x86_64,aarch64,riscv}/entrypoints.txt`: moves
`sysconf` behind the new flag
The flag does not require `LLVM_LIBC_FULL_BUILD` since overlay builds
may also have incomplete entrypoints that benefit from this gating.
Added:
Modified:
libc/CMakeLists.txt
libc/config/linux/aarch64/entrypoints.txt
libc/config/linux/riscv/entrypoints.txt
libc/config/linux/x86_64/entrypoints.txt
Removed:
################################################################################
diff --git a/libc/CMakeLists.txt b/libc/CMakeLists.txt
index cf2a8cad42154..3b5f3949b286d 100644
--- a/libc/CMakeLists.txt
+++ b/libc/CMakeLists.txt
@@ -140,6 +140,8 @@ option(LLVM_LIBC_FULL_BUILD "Build and test LLVM libc as if it is the full libc"
option(LLVM_LIBC_IMPLEMENTATION_DEFINED_TEST_BEHAVIOR "Build LLVM libc tests assuming our implementation-defined behavior" ON)
option(LLVM_LIBC_ENABLE_LINTING "Enables linting of libc source files" OFF)
option(LLVM_LIBC_ALL_HEADERS "Outputs all functions in header files, regardless of whether they are enabled on this target" OFF)
+option(LLVM_LIBC_ENABLE_EXPERIMENTAL_ENTRYPOINTS
+ "Enable entrypoints with known-incomplete implementations (off by default)" OFF)
option(LIBC_CONFIG_PATH "The path to user provided folder that configures the build for the target system." OFF)
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index e62bc67e2d5ca..e61b127e42102 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -387,7 +387,6 @@ set(TARGET_LIBC_ENTRYPOINTS
libc.src.unistd.setsid
libc.src.unistd.symlink
libc.src.unistd.symlinkat
- libc.src.unistd.sysconf
libc.src.unistd.truncate
libc.src.unistd.unlink
libc.src.unistd.unlinkat
@@ -1265,6 +1264,12 @@ if(LLVM_LIBC_FULL_BUILD)
)
endif()
+if(LLVM_LIBC_ENABLE_EXPERIMENTAL_ENTRYPOINTS)
+ list(APPEND TARGET_LIBC_ENTRYPOINTS
+ libc.src.unistd.sysconf
+ )
+endif()
+
set(TARGET_LIBMVEC_ENTRYPOINTS)
if(LIBC_COMPILER_HAS_EXT_VECTOR_TYPE)
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index d1c52dffdb6e7..7a34cc5fba201 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -390,7 +390,6 @@ set(TARGET_LIBC_ENTRYPOINTS
libc.src.unistd.setsid
libc.src.unistd.symlink
libc.src.unistd.symlinkat
- libc.src.unistd.sysconf
libc.src.unistd.truncate
libc.src.unistd.unlink
libc.src.unistd.unlinkat
@@ -1399,6 +1398,12 @@ if(LLVM_LIBC_FULL_BUILD)
)
endif()
+if(LLVM_LIBC_ENABLE_EXPERIMENTAL_ENTRYPOINTS)
+ list(APPEND TARGET_LIBC_ENTRYPOINTS
+ libc.src.unistd.sysconf
+ )
+endif()
+
set(TARGET_LLVMLIBC_ENTRYPOINTS
${TARGET_LIBC_ENTRYPOINTS}
${TARGET_LIBM_ENTRYPOINTS}
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 73b4b3fcd191f..00c94e1e9b5a0 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -408,7 +408,6 @@ set(TARGET_LIBC_ENTRYPOINTS
libc.src.unistd.setsid
libc.src.unistd.symlink
libc.src.unistd.symlinkat
- libc.src.unistd.sysconf
libc.src.unistd.truncate
libc.src.unistd.unlink
libc.src.unistd.unlinkat
@@ -1489,6 +1488,12 @@ if(LLVM_LIBC_FULL_BUILD)
)
endif()
+if(LLVM_LIBC_ENABLE_EXPERIMENTAL_ENTRYPOINTS)
+ list(APPEND TARGET_LIBC_ENTRYPOINTS
+ libc.src.unistd.sysconf
+ )
+endif()
+
set(TARGET_LIBMVEC_ENTRYPOINTS)
if(LIBC_COMPILER_HAS_EXT_VECTOR_TYPE)
More information about the libc-commits
mailing list