[libc-commits] [libc] d4ce57c - [libc] Fix unresolved stdio symbols (#132403)

via libc-commits libc-commits at lists.llvm.org
Fri Mar 21 08:07:01 PDT 2025


Author: Joseph Huber
Date: 2025-03-21T10:06:57-05:00
New Revision: d4ce57cb98dbe753d246ae5395cc5ac6da8afa88

URL: https://github.com/llvm/llvm-project/commit/d4ce57cb98dbe753d246ae5395cc5ac6da8afa88
DIFF: https://github.com/llvm/llvm-project/commit/d4ce57cb98dbe753d246ae5395cc5ac6da8afa88.diff

LOG: [libc] Fix unresolved stdio symbols (#132403)

Summary:
We have 'generic' implementations for some functions stdio functions.
The current logic mandates that all generic functions are implemented by
the target. This obviously isn't true and this caused the GPU builds to
fail once baremtal added some extra ones.

This patch changes the logic to always include the generic sources only
if they aren't already defined. This can probably be cleaned up and
formalized later, since this pattern is copied in many places, but for
now this fixes the failing GPU build bots.

Added: 
    

Modified: 
    libc/src/stdio/CMakeLists.txt
    libc/src/stdio/generic/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/libc/src/stdio/CMakeLists.txt b/libc/src/stdio/CMakeLists.txt
index b4df8fa497d46..63f6ed8a11f1d 100644
--- a/libc/src/stdio/CMakeLists.txt
+++ b/libc/src/stdio/CMakeLists.txt
@@ -21,10 +21,7 @@ endfunction(add_stdio_entrypoint_object)
 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
   add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
 endif()
-
-if(NOT LIBC_TARGET_OS_IS_BAREMETAL AND NOT LIBC_TARGET_OS_IS_GPU)
-  add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/generic)
-endif()
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/generic)
 
 if(NOT LLVM_LIBC_FULL_BUILD)
   list(APPEND use_system_file "COMPILE_OPTIONS" "-DLIBC_COPT_STDIO_USE_SYSTEM_FILE")

diff  --git a/libc/src/stdio/generic/CMakeLists.txt b/libc/src/stdio/generic/CMakeLists.txt
index 9f568c5ab8d3a..e1f4ed5c19497 100644
--- a/libc/src/stdio/generic/CMakeLists.txt
+++ b/libc/src/stdio/generic/CMakeLists.txt
@@ -1,4 +1,16 @@
-add_entrypoint_object(
+# Helper to only add the generic implementations if they aren't handled by a
+# more specific implementation.
+# TODO: This should probably be cleaned up and formalized.
+function(add_generic_entrypoint_object name)
+  if(NOT TARGET libc.src.stdio.${LIBC_TARGET_OS}.${name})
+    add_entrypoint_object(
+      ${name}
+      ${ARGN}
+    )
+  endif()
+endfunction(add_generic_entrypoint_object)
+
+add_generic_entrypoint_object(
   clearerr
   SRCS
     clearerr.cpp
@@ -10,7 +22,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   clearerr_unlocked
   SRCS
     clearerr_unlocked.cpp
@@ -22,7 +34,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   feof
   SRCS
     feof.cpp
@@ -34,7 +46,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   feof_unlocked
   SRCS
     feof_unlocked.cpp
@@ -46,7 +58,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   ferror
   SRCS
     ferror.cpp
@@ -58,7 +70,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   ferror_unlocked
   SRCS
     ferror_unlocked.cpp
@@ -70,7 +82,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fileno
   SRCS
     fileno.cpp
@@ -82,7 +94,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fflush
   SRCS
     fflush.cpp
@@ -95,7 +107,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fseek
   SRCS
     fseek.cpp
@@ -107,7 +119,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   ftell
   SRCS
     ftell.cpp
@@ -119,7 +131,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fseeko
   SRCS
     fseeko.cpp
@@ -131,7 +143,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   ftello
   SRCS
     ftello.cpp
@@ -143,7 +155,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fopen
   SRCS
     fopen.cpp
@@ -155,7 +167,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fclose
   SRCS
     fclose.cpp
@@ -168,7 +180,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fread_unlocked
   SRCS
     fread_unlocked.cpp
@@ -181,7 +193,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fread
   SRCS
     fread.cpp
@@ -194,7 +206,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fputs
   SRCS
     fputs.cpp
@@ -207,7 +219,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   puts
   SRCS
     puts.cpp
@@ -220,7 +232,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_stdout
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fwrite_unlocked
   SRCS
     fwrite_unlocked.cpp
@@ -233,7 +245,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fwrite
   SRCS
     fwrite.cpp
@@ -246,7 +258,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fputc
   SRCS
     fputc.cpp
@@ -259,7 +271,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   putc
   SRCS
     putc.cpp
@@ -272,7 +284,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   putchar
   SRCS
     putchar.cpp
@@ -285,7 +297,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fgetc
   SRCS
     fgetc.cpp
@@ -298,7 +310,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fgetc_unlocked
   SRCS
     fgetc_unlocked.cpp
@@ -311,7 +323,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   getc
   SRCS
     getc.cpp
@@ -324,7 +336,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   getc_unlocked
   SRCS
     getc_unlocked.cpp
@@ -337,7 +349,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   getchar
   SRCS
     getchar.cpp
@@ -350,7 +362,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   getchar_unlocked
   SRCS
     getchar_unlocked.cpp
@@ -385,7 +397,7 @@ if(LLVM_LIBC_FULL_BUILD)
   )
 endif()
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   printf
   SRCS
     printf.cpp
@@ -395,7 +407,7 @@ add_entrypoint_object(
     ${printf_deps}
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   vprintf
   SRCS
     vprintf.cpp
@@ -405,7 +417,7 @@ add_entrypoint_object(
     ${printf_deps}
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fprintf
   SRCS
     fprintf.cpp
@@ -415,7 +427,7 @@ add_entrypoint_object(
     ${fprintf_deps}
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   vfprintf
   SRCS
     vfprintf.cpp
@@ -439,7 +451,7 @@ if(LLVM_LIBC_FULL_BUILD AND NOT LIBC_TARGET_OS_IS_GPU)
   )
 endif()
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fscanf
   SRCS
     fscanf.cpp
@@ -449,7 +461,7 @@ add_entrypoint_object(
     ${scanf_deps}
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   vfscanf
   SRCS
     vfscanf.cpp
@@ -459,7 +471,7 @@ add_entrypoint_object(
     ${scanf_deps}
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   scanf
   SRCS
     scanf.cpp
@@ -469,7 +481,7 @@ add_entrypoint_object(
     ${scanf_deps}
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   vscanf
   SRCS
     vscanf.cpp
@@ -479,7 +491,7 @@ add_entrypoint_object(
     ${scanf_deps}
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   fgets
   SRCS
     fgets.cpp
@@ -492,7 +504,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   ungetc
   SRCS
     ungetc.cpp
@@ -504,7 +516,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_file
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   stdin
   SRCS
     stdin.cpp
@@ -516,7 +528,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_stdin
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   stdout
   SRCS
     stdout.cpp
@@ -528,7 +540,7 @@ add_entrypoint_object(
     libc.src.__support.File.platform_stdout
 )
 
-add_entrypoint_object(
+add_generic_entrypoint_object(
   stderr
   SRCS
     stderr.cpp


        


More information about the libc-commits mailing list