From 3fad640f06989c1ed5fd5d97868ad9fd807c86dc Mon Sep 17 00:00:00 2001 From: Michael Jones Date: Fri, 21 Feb 2025 12:26:23 -0800 Subject: [PATCH] [libc] Skip scanf internals when no file available (#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. --- 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 ce639fe65a10..e8125ff46502 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 9cdc6547821e..9d05c7d4b89d 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