[libc-commits] [libc] [libc] Skip scanf internals when no file available (PR #128097)
Michael Jones via libc-commits
libc-commits at lists.llvm.org
Thu Feb 20 16:51:45 PST 2025
https://github.com/michaelrj-google created https://github.com/llvm/llvm-project/pull/128097
A temporary fix based on discussions in #128079
Currently, baremetal targets are failing to build because the scanf
internals require FILE* (either from the system's libc or our libc).
Normally we'd just turn off the broken entrypoint, but since the scanf
internals are built separately that doesn't work. This patch adds extra
conditions to building those internals, which we can hopefully remove
once we have a proper way to build scanf for embedded.
>From 72f30d2b6b22685eeabf3b2d04cbf95def068d4e Mon Sep 17 00:00:00 2001
From: Michael Jones <michaelrj at google.com>
Date: Thu, 20 Feb 2025 16:47:58 -0800
Subject: [PATCH] [libc] Skip scanf internals when no file available
A temporary fix based on discussions in #128079
Currently, baremetal targets are failing to build because the scanf
internals require FILE* (either from the system's libc or our libc).
Normally we'd just turn off the broken entrypoint, but since the scanf
internals are built separately that doesn't work. This patch adds extra
conditions to building those internals, which we can hopefully remove
once we have a proper way to build scanf for embedded.
---
libc/src/stdio/scanf_core/CMakeLists.txt | 6 ++++++
libc/test/src/stdio/scanf_core/CMakeLists.txt | 6 ++++++
2 files changed, 12 insertions(+)
diff --git a/libc/src/stdio/scanf_core/CMakeLists.txt b/libc/src/stdio/scanf_core/CMakeLists.txt
index ce639fe65a106..e8125ff465020 100644
--- a/libc/src/stdio/scanf_core/CMakeLists.txt
+++ b/libc/src/stdio/scanf_core/CMakeLists.txt
@@ -54,6 +54,12 @@ add_header_library(
libc.src.__support.CPP.string_view
)
+if(NOT(TARGET libc.src.__support.File.file) AND LLVM_LIBC_FULL_BUILD)
+ # Not all platforms have a file implementation. If file is unvailable, and a
+ # full build is requested, then we must skip all file based scanf sections.
+ return()
+endif()
+
add_object_library(
scanf_main
SRCS
diff --git a/libc/test/src/stdio/scanf_core/CMakeLists.txt b/libc/test/src/stdio/scanf_core/CMakeLists.txt
index 9cdc6547821ee..9d05c7d4b89d1 100644
--- a/libc/test/src/stdio/scanf_core/CMakeLists.txt
+++ b/libc/test/src/stdio/scanf_core/CMakeLists.txt
@@ -18,6 +18,12 @@ add_libc_unittest(
libc.src.__support.arg_list
)
+if(NOT(TARGET libc.src.__support.File.file) AND LLVM_LIBC_FULL_BUILD)
+ # Not all platforms have a file implementation. If file is unvailable, and a
+ # full build is requested, then we must skip all file based scanf sections.
+ return()
+endif()
+
add_libc_unittest(
reader_test
SUITE
More information about the libc-commits
mailing list