[libc-commits] [libc] 89fc7e5 - [libc] Include (v)s(n)printf in baremetal configs

Petr Hosek via libc-commits libc-commits at lists.llvm.org
Sun Sep 3 19:39:29 PDT 2023


Author: Petr Hosek
Date: 2023-09-04T02:39:02Z
New Revision: 89fc7e52ab49f9221ec282042ad41035cfb1cbb5

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

LOG: [libc] Include (v)s(n)printf in baremetal configs

These are commonly used on baremetal targets. We disable float
support and other features to reduce the binary size. This would
ideally eventually be handled using the proposed config mechanism:
https://discourse.llvm.org/t/rfc-systematic-way-to-introduce-and-use-libc-config-options/72943
but for now we use a CMake conditional.

Differential Revision: https://reviews.llvm.org/D159067

Added: 
    

Modified: 
    libc/config/baremetal/arm/entrypoints.txt
    libc/config/baremetal/arm/headers.txt
    libc/config/baremetal/riscv32/entrypoints.txt
    libc/config/baremetal/riscv32/headers.txt
    libc/src/stdio/CMakeLists.txt
    libc/src/stdio/printf_core/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index 56daccc731c3a76..a88b7aa749e5654 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -63,6 +63,12 @@ set(TARGET_LIBC_ENTRYPOINTS
     libc.src.inttypes.imaxdiv
     libc.src.inttypes.strtoimax
     libc.src.inttypes.strtoumax
+
+    # stdio.h entrypoints
+    libc.src.stdio.sprintf
+    libc.src.stdio.snprintf
+    libc.src.stdio.vsprintf
+    libc.src.stdio.vsnprintf
  
     # stdlib.h entrypoints
     libc.src.stdlib.abs

diff  --git a/libc/config/baremetal/arm/headers.txt b/libc/config/baremetal/arm/headers.txt
index fe7c88e922e07e8..e7be1fd80e8754b 100644
--- a/libc/config/baremetal/arm/headers.txt
+++ b/libc/config/baremetal/arm/headers.txt
@@ -4,6 +4,7 @@ set(TARGET_PUBLIC_HEADERS
     libc.include.errno
     libc.include.inttypes
     libc.include.math
+    libc.include.stdio
     libc.include.stdlib
     libc.include.string
     libc.include.strings

diff  --git a/libc/config/baremetal/riscv32/entrypoints.txt b/libc/config/baremetal/riscv32/entrypoints.txt
index 37651aaef1b0887..3b7ca513eb0965a 100644
--- a/libc/config/baremetal/riscv32/entrypoints.txt
+++ b/libc/config/baremetal/riscv32/entrypoints.txt
@@ -64,6 +64,12 @@ set(TARGET_LIBC_ENTRYPOINTS
     libc.src.inttypes.strtoimax
     libc.src.inttypes.strtoumax
 
+    # stdio.h entrypoints
+    libc.src.stdio.sprintf
+    libc.src.stdio.snprintf
+    libc.src.stdio.vsprintf
+    libc.src.stdio.vsnprintf
+
     # stdlib.h entrypoints
     libc.src.stdlib.abs
     libc.src.stdlib.atoi

diff  --git a/libc/config/baremetal/riscv32/headers.txt b/libc/config/baremetal/riscv32/headers.txt
index fe7c88e922e07e8..e7be1fd80e8754b 100644
--- a/libc/config/baremetal/riscv32/headers.txt
+++ b/libc/config/baremetal/riscv32/headers.txt
@@ -4,6 +4,7 @@ set(TARGET_PUBLIC_HEADERS
     libc.include.errno
     libc.include.inttypes
     libc.include.math
+    libc.include.stdio
     libc.include.stdlib
     libc.include.string
     libc.include.strings

diff  --git a/libc/src/stdio/CMakeLists.txt b/libc/src/stdio/CMakeLists.txt
index 7101796957ab237..fc8588d75ad416b 100644
--- a/libc/src/stdio/CMakeLists.txt
+++ b/libc/src/stdio/CMakeLists.txt
@@ -26,6 +26,14 @@ if(NOT LIBC_TARGET_ARCHITECTURE_IS_GPU)
   add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/generic)
 endif()
 
+if(${LIBC_TARGET_OS} STREQUAL "baremetal")
+  list(APPEND printf_copts
+      "-DLIBC_COPT_PRINTF_DISABLE_FLOAT"
+      "-DLIBC_COPT_PRINTF_DISABLE_INDEX_MODE"
+      "-DLIBC_COPT_PRINTF_DISABLE_WRITE_INT"
+    )
+endif()
+
 add_subdirectory(printf_core)
 add_subdirectory(scanf_core)
 
@@ -419,13 +427,13 @@ list(APPEND printf_deps
       libc.src.stdio.printf_core.vfprintf_internal
 )
 if(LLVM_LIBC_FULL_BUILD)
- list(APPEND printf_deps
+  list(APPEND printf_deps
       libc.src.__support.File.file
       libc.src.__support.File.platform_file
       libc.src.__support.File.platform_stdout
   )
 else()
- set(printf_copts "-DLIBC_COPT_PRINTF_USE_SYSTEM_FILE")
+  list(APPEND printf_copts "-DLIBC_COPT_PRINTF_USE_SYSTEM_FILE")
 endif()
 
 add_entrypoint_object(

diff  --git a/libc/src/stdio/printf_core/CMakeLists.txt b/libc/src/stdio/printf_core/CMakeLists.txt
index a2227fbf77c7acb..0b3766b55e8d4b4 100644
--- a/libc/src/stdio/printf_core/CMakeLists.txt
+++ b/libc/src/stdio/printf_core/CMakeLists.txt
@@ -93,6 +93,7 @@ add_object_library(
     libc.src.__support.float_to_string
   COMPILE_OPTIONS
     -DLIBC_COPT_FLOAT_TO_STR_USE_MEGA_LONG_DOUBLE_TABLE
+    ${printf_copts}
 )
 
 


        


More information about the libc-commits mailing list