[libc-commits] [libc] [libc] newheadergen: cmake configuration (PR #98554)

via libc-commits libc-commits at lists.llvm.org
Thu Jul 11 14:17:51 PDT 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libc

Author: None (aaryanshukla)

<details>
<summary>Changes</summary>

- able to generate all headers to build directory
- missing assert.yaml, patch needing to be landed
- adjusted script to add entrypoints


---

Patch is 20.69 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/98554.diff


7 Files Affected:

- (modified) libc/cmake/modules/LLVMLibCHeaderRules.cmake (+85-1) 
- (modified) libc/include/CMakeLists.txt (+101-51) 
- (added) libc/newhdrgen/yaml/features.yaml (+8) 
- (modified) libc/newhdrgen/yaml/pthread.yaml (+3-28) 
- (modified) libc/newhdrgen/yaml/sys_random.yaml (+1-1) 
- (modified) libc/newhdrgen/yaml/time.yaml (+1-1) 
- (modified) libc/newhdrgen/yaml_to_classes.py (+22-8) 


``````````diff
diff --git a/libc/cmake/modules/LLVMLibCHeaderRules.cmake b/libc/cmake/modules/LLVMLibCHeaderRules.cmake
index 7fc6860f23eb2..a6d87e2112c63 100644
--- a/libc/cmake/modules/LLVMLibCHeaderRules.cmake
+++ b/libc/cmake/modules/LLVMLibCHeaderRules.cmake
@@ -66,7 +66,91 @@ function(add_header target_name)
   )
 endfunction(add_header)
 
-# A rule for generated header file targets.
+function(add_gen_header2 target_name)
+  cmake_parse_arguments(
+    "ADD_YAML_HDR"
+    "PUBLIC" # No optional arguments
+    "YAML_FILE;DEF_FILE;GEN_HDR" # Single value arguments
+    "DEPENDS"     # Multi value arguments
+    ${ARGN}
+  )
+  get_fq_target_name(${target_name} fq_target_name)
+  if(NOT LLVM_LIBC_FULL_BUILD)
+    # We don't want to use generated headers if we are doing a non-full-build.
+    add_library(${fq_target_name} INTERFACE)
+    return()
+  endif()
+  if(NOT ADD_YAML_HDR_DEF_FILE)
+    message(FATAL_ERROR "`add_yaml_hdr` rule requires DEF_FILE to be specified.")
+  endif()
+  if(NOT ADD_YAML_HDR_GEN_HDR)
+    message(FATAL_ERROR "`add_yaml_hdr` rule requires GEN_HDR to be specified.")
+  endif()
+  if(NOT ADD_YAML_HDR_YAML_FILE)
+    message(FATAL_ERROR "`add_yaml_hdr` rule requires YAML_FILE to be specified.")
+  endif()
+
+  set(absolute_path ${CMAKE_CURRENT_SOURCE_DIR}/${ADD_YAML_HDR_GEN_HDR})
+  file(RELATIVE_PATH relative_path ${LIBC_INCLUDE_SOURCE_DIR} ${absolute_path})
+  set(out_file ${LIBC_INCLUDE_DIR}/${relative_path})
+  set(yaml_file ${CMAKE_SOURCE_DIR}/${ADD_YAML_HDR_YAML_FILE})
+  set(def_file ${CMAKE_CURRENT_SOURCE_DIR}/${ADD_YAML_HDR_DEF_FILE})
+
+  set(fq_data_files "")
+  if(ADD_YAML_HDR_DATA_FILES)
+    foreach(data_file IN LISTS ADD_YAML_HDR_DATA_FILES)
+      list(APPEND fq_data_files "${CMAKE_CURRENT_SOURCE_DIR}/${data_file}")
+    endforeach(data_file)
+  endif()
+
+  set(entry_points "${TARGET_ENTRYPOINT_NAME_LIST}")
+  list(TRANSFORM entry_points PREPEND "--e=")
+
+  add_custom_command(
+    OUTPUT ${out_file}
+    COMMAND ${Python3_EXECUTABLE} ${LIBC_SOURCE_DIR}/newhdrgen/yaml_to_classes.py
+            ${yaml_file}
+            ${def_file}
+            ${entry_points}
+            --output_dir ${CMAKE_CURRENT_BINARY_DIR}
+    DEPENDS ${yaml_file} ${def_file} ${fq_data_files}
+    COMMENT "Generating header ${ADD_YAML_HDR_GEN_HDR} from ${yaml_file} and ${def_file}"
+  )
+
+  if(ADD_YAML_HDR_DEPENDS)
+    get_fq_deps_list(fq_deps_list ${ADD_YAML_HDR_DEPENDS})
+    # Dependencies of a add_header target can only be another add_gen_header target
+    # or an add_header target.
+    foreach(dep IN LISTS fq_deps_list)
+      get_target_property(header_file ${dep} HEADER_FILE_PATH)
+      if(NOT header_file)
+        message(FATAL_ERROR "Invalid dependency '${dep}' for '${fq_target_name}'.")
+      endif()
+    endforeach()
+  endif()
+  set(generated_hdr_target ${fq_target_name}.__generated_hdr__)
+  add_custom_target(
+    ${generated_hdr_target}
+    DEPENDS ${out_file} ${fq_deps_list}
+  )
+
+  add_header_library(
+    ${target_name}
+    HDRS
+      ${out_file}
+  )
+
+  add_dependencies(${fq_target_name} ${generated_hdr_target})
+
+  set_target_properties(
+    ${fq_target_name}
+    PROPERTIES
+      HEADER_FILE_PATH ${out_file}
+      DEPS "${fq_deps_list}"
+  )
+endfunction(add_gen_header2)
+
+# A 2rule for generated header file targets.
 # Usage:
 #     add_gen_header(
 #       <target name>
diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt
index 2cf7206f3a625..825c26de6ddde 100644
--- a/libc/include/CMakeLists.txt
+++ b/libc/include/CMakeLists.txt
@@ -3,6 +3,7 @@ set(LIBC_INCLUDE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
 
 include(LLVMLibCHeaderRules)
 
+
 # The GPU build wants to install files in the compiler's resource directory.
 if(LIBC_TARGET_OS_IS_GPU)
   include(GetClangResourceDir)
@@ -17,16 +18,18 @@ add_header(
     __llvm-libc-common.h
 )
 
-add_gen_header(
+add_gen_header2(
   ctype
+  YAML_FILE ../libc/newhdrgen/yaml/ctype.yaml
   DEF_FILE ctype.h.def
   GEN_HDR ctype.h
   DEPENDS
     .llvm_libc_common_h
 )
 
-add_gen_header(
+add_gen_header2(
   dirent
+  YAML_FILE ../libc/newhdrgen/yaml/dirent.yaml
   DEF_FILE dirent.h.def
   GEN_HDR dirent.h
   DEPENDS
@@ -36,8 +39,9 @@ add_gen_header(
     .llvm-libc-types.struct_dirent
 )
 
-add_gen_header(
+add_gen_header2(
   fcntl
+  YAML_FILE ../libc/newhdrgen/yaml/fcntl.yaml
   DEF_FILE fcntl.h.def
   GEN_HDR fcntl.h
   DEPENDS
@@ -51,8 +55,9 @@ add_gen_header(
     .llvm_libc_common_h
 )
 
-add_gen_header(
+add_gen_header2(
   dlfcn
+  YAML_FILE ../libc/newhdrgen/yaml/dlfcn.yaml
   DEF_FILE dlfcn.h.def
   GEN_HDR dlfcn.h
   DEPENDS
@@ -60,8 +65,9 @@ add_gen_header(
     .llvm_libc_common_h
 )
 
-add_gen_header(
+add_gen_header2(
   features
+  YAML_FILE ../libc/newhdrgen/yaml/features.yaml
   DEF_FILE features.h.def
   GEN_HDR features.h
   DEPENDS
@@ -69,8 +75,9 @@ add_gen_header(
     .llvm-libc-macros.features_macros
 )
 
-add_gen_header(
+add_gen_header2(
   fenv
+  YAML_FILE ../libc/newhdrgen/yaml/fenv.yaml
   DEF_FILE fenv.h.def
   GEN_HDR fenv.h
   DEPENDS
@@ -80,8 +87,9 @@ add_gen_header(
     .llvm-libc-types.fexcept_t
 )
 
-add_gen_header(
+add_gen_header2(
   inttypes
+  YAML_FILE ../libc/newhdrgen/yaml/inttypes.yaml
   DEF_FILE inttypes.h.def
   GEN_HDR inttypes.h
   DEPENDS
@@ -90,46 +98,50 @@ add_gen_header(
     .llvm-libc-macros.inttypes_macros
 )
 
-add_gen_header(
+add_gen_header2(
   float
+  YAML_FILE ../libc/newhdrgen/yaml/float.yaml
   DEF_FILE float.h.def
   GEN_HDR float.h
   DEPENDS
     .llvm-libc-macros.float_macros
 )
 
-add_gen_header(
+add_gen_header2(
   stdint
+  YAML_FILE ../libc/newhdrgen/yaml/stdint.yaml
   DEF_FILE stdint.h.def
   GEN_HDR stdint.h
   DEPENDS
     .llvm-libc-macros.stdint_macros
 )
 
-add_gen_header(
+add_gen_header2(
   limits
+  YAML_FILE ../libc/newhdrgen/yaml/limits.yaml
   DEF_FILE limits.h.def
   GEN_HDR limits.h
   DEPENDS
     .llvm-libc-macros.limits_macros
 )
 
-add_gen_header(
+add_gen_header2(
   math
+  YAML_FILE ../libc/newhdrgen/yaml/math.yaml
   DEF_FILE math.h.def
   GEN_HDR math.h
   DEPENDS
     .llvm_libc_common_h
     .llvm-libc-macros.float16_macros
     .llvm-libc-macros.math_macros
-    .llvm-libc-macros.math_function_macros
     .llvm-libc-types.double_t
     .llvm-libc-types.float_t
     .llvm-libc-types.float128
 )
 
-add_gen_header(
+add_gen_header2(
   stdfix
+  YAML_FILE ../libc/newhdrgen/yaml/stdfix.yaml
   DEF_FILE stdfix.h.def
   GEN_HDR stdfix.h
   DEPENDS
@@ -139,8 +151,9 @@ add_gen_header(
 # TODO: This should be conditional on POSIX networking being included.
 file(MAKE_DIRECTORY ${LIBC_INCLUDE_DIR}/arpa)
 
-add_gen_header(
+add_gen_header2(
   arpa_inet
+  YAML_FILE ../libc/newhdrgen/yaml/arpa_inet.yaml
   DEF_FILE arpa/inet.h.def
   GEN_HDR arpa/inet.h
   DEPENDS
@@ -156,8 +169,9 @@ add_gen_header(
     .llvm-libc-macros.assert_macros
 )
 
-add_gen_header(
+add_gen_header2(
   setjmp
+  YAML_FILE ../libc/newhdrgen/yaml/setjmp.yaml
   DEF_FILE setjmp.h.def
   GEN_HDR setjmp.h
   DEPENDS
@@ -165,8 +179,9 @@ add_gen_header(
     .llvm-libc-types.jmp_buf
 )
 
-add_gen_header(
+add_gen_header2(
   string
+  YAML_FILE ../libc/newhdrgen/yaml/string.yaml
   DEF_FILE string.h.def
   GEN_HDR string.h
   DEPENDS
@@ -175,8 +190,9 @@ add_gen_header(
     .llvm-libc-types.size_t
 )
 
-add_gen_header(
+add_gen_header2(
   strings
+  YAML_FILE ../libc/newhdrgen/yaml/strings.yaml
   DEF_FILE strings.h.def
   GEN_HDR strings.h
   DEPENDS
@@ -184,8 +200,9 @@ add_gen_header(
     .llvm-libc-types.size_t
 )
 
-add_gen_header(
+add_gen_header2(
   search
+  YAML_FILE ../libc/newhdrgen/yaml/search.yaml
   DEF_FILE search.h.def
   GEN_HDR search.h
   DEPENDS
@@ -196,8 +213,9 @@ add_gen_header(
     .llvm-libc-types.size_t
 )
 
-add_gen_header(
+add_gen_header2(
   time
+  YAML_FILE ../libc/newhdrgen/yaml/time.yaml
   DEF_FILE time.h.def
   GEN_HDR time.h
   DEPENDS
@@ -211,8 +229,9 @@ add_gen_header(
     .llvm-libc-types.clockid_t
 )
 
-add_gen_header(
+add_gen_header2(
   threads
+  YAML_FILE ../libc/newhdrgen/yaml/threads.yaml
   DEF_FILE threads.h.def
   GEN_HDR threads.h
   DEPENDS
@@ -227,8 +246,9 @@ add_gen_header(
     .llvm-libc-types.tss_dtor_t
 )
 
-add_gen_header(
+add_gen_header2(
   errno
+  YAML_FILE ../libc/newhdrgen/yaml/errno.yaml
   DEF_FILE errno.h.def
   GEN_HDR errno.h
   DEPENDS
@@ -236,8 +256,9 @@ add_gen_header(
     .llvm-libc-macros.error_number_macros
 )
 
-add_gen_header(
+add_gen_header2(
   signal
+  YAML_FILE ../libc/newhdrgen/yaml/signal.yaml
   DEF_FILE signal.h.def
   GEN_HDR signal.h
   DEPENDS
@@ -251,8 +272,9 @@ add_gen_header(
     .llvm-libc-types.pid_t
 )
 
-add_gen_header(
+add_gen_header2(
   stdbit
+  YAML_FILE ../libc/newhdrgen/yaml/stdbit.yaml
   DEF_FILE stdbit.h.def
   GEN_HDR stdbit.h
   DEPENDS
@@ -260,8 +282,9 @@ add_gen_header(
     .llvm-libc-macros.stdbit_macros
 )
 
-add_gen_header(
+add_gen_header2(
   stdckdint
+  YAML_FILE ../libc/newhdrgen/yaml/stdckdint.yaml
   DEF_FILE stdckdint.h.def
   GEN_HDR stdckdint.h
   DEPENDS
@@ -269,8 +292,9 @@ add_gen_header(
     .llvm-libc-macros.stdckdint_macros
 )
 
-add_gen_header(
+add_gen_header2(
   stdio
+  YAML_FILE ../libc/newhdrgen/yaml/stdio.yaml
   DEF_FILE stdio.h.def
   GEN_HDR stdio.h
   DEPENDS
@@ -284,8 +308,9 @@ add_gen_header(
     .llvm_libc_common_h
 )
 
-add_gen_header(
+add_gen_header2(
   stdlib
+  YAML_FILE ../libc/newhdrgen/yaml/stdlib.yaml
   DEF_FILE stdlib.h.def
   GEN_HDR stdlib.h
   DEPENDS
@@ -301,8 +326,9 @@ add_gen_header(
     .llvm-libc-types.__atexithandler_t
 )
 
-add_gen_header(
+add_gen_header2(
   unistd
+  YAML_FILE ../libc/newhdrgen/yaml/unistd.yaml
   DEF_FILE unistd.h.def
   GEN_HDR unistd.h
   DEPENDS
@@ -319,8 +345,9 @@ add_gen_header(
     .llvm-libc-types.__getoptargv_t
 )
 
-add_gen_header(
+add_gen_header2(
   pthread
+  YAML_FILE ../libc/newhdrgen/yaml/pthread.yaml
   DEF_FILE pthread.h.def
   GEN_HDR pthread.h
   DEPENDS
@@ -340,8 +367,9 @@ add_gen_header(
     .llvm-libc-types.pthread_t
 )
 
-add_gen_header(
+add_gen_header2(
   sched
+  YAML_FILE ../libc/newhdrgen/yaml/sched.yaml
   DEF_FILE sched.h.def
   GEN_HDR sched.h
   DEPENDS
@@ -356,8 +384,9 @@ add_gen_header(
     .llvm-libc-types.struct_timespec
 )
 
-add_gen_header(
+add_gen_header2(
   spawn
+  YAML_FILE ../libc/newhdrgen/yaml/spawn.yaml
   DEF_FILE spawn.h.def
   GEN_HDR spawn.h
   DEPENDS
@@ -373,8 +402,9 @@ add_gen_header(
 # them.
 file(MAKE_DIRECTORY ${LIBC_INCLUDE_DIR}/sys)
 
-add_gen_header(
+add_gen_header2(
   sys_auxv
+  YAML_FILE ../libc/newhdrgen/yaml/sys_auxv.yaml
   DEF_FILE sys/auxv.h.def
   GEN_HDR sys/auxv.h
   DEPENDS
@@ -382,8 +412,9 @@ add_gen_header(
     .llvm-libc-macros.sys_auxv_macros
 )
 
-add_gen_header(
+add_gen_header2(
   sys_epoll
+  YAML_FILE ../libc/newhdrgen/yaml/sys_epoll.yaml
   DEF_FILE sys/epoll.h.def
   GEN_HDR sys/epoll.h
   DEPENDS
@@ -394,8 +425,9 @@ add_gen_header(
     .llvm-libc-macros.sys_epoll_macros
 )
 
-add_gen_header(
+add_gen_header2(
   sys_ioctl
+  YAML_FILE ../libc/newhdrgen/yaml/sys_ioctl.yaml
   DEF_FILE sys/ioctl.h.def
   GEN_HDR sys/ioctl.h
   DEPENDS
@@ -403,8 +435,9 @@ add_gen_header(
     .llvm-libc-macros.sys_ioctl_macros
 )
 
-add_gen_header(
+add_gen_header2(
   sys_mman
+  YAML_FILE ../libc/newhdrgen/yaml/sys_mman.yaml
   DEF_FILE sys/mman.h.def
   GEN_HDR sys/mman.h
   DEPENDS
@@ -415,8 +448,9 @@ add_gen_header(
     .llvm-libc-types.ssize_t
 )
 
-add_gen_header(
+add_gen_header2(
   sys_prctl
+  YAML_FILE ../libc/newhdrgen/yaml/sys_prctl.yaml
   DEF_FILE sys/prctl.h.def
   GEN_HDR sys/prctl.h
   DEPENDS
@@ -431,8 +465,9 @@ add_header(
     .llvm-libc-macros.sys_queue_macros
 )
 
-add_gen_header(
+add_gen_header2(
   sys_random
+  YAML_FILE ../libc/newhdrgen/yaml/sys_random.yaml
   DEF_FILE sys/random.h.def
   GEN_HDR sys/random.h
   DEPENDS
@@ -442,8 +477,9 @@ add_gen_header(
     .llvm-libc-types.ssize_t
 )
 
-add_gen_header(
+add_gen_header2(
   sys_resource
+  YAML_FILE ../libc/newhdrgen/yaml/sys_resource.yaml
   DEF_FILE sys/resource.h.def
   GEN_HDR sys/resource.h
   DEPENDS
@@ -453,8 +489,9 @@ add_gen_header(
     .llvm-libc-types.struct_rlimit
 )
 
-add_gen_header(
+add_gen_header2(
   sys_stat
+  YAML_FILE ../libc/newhdrgen/yaml/sys_stat.yaml
   DEF_FILE sys/stat.h.def
   GEN_HDR sys/stat.h
   DEPENDS
@@ -474,8 +511,9 @@ add_gen_header(
     .llvm-libc-types.struct_stat
 )
 
-add_gen_header(
+add_gen_header2(
   sys_select
+  YAML_FILE ../libc/newhdrgen/yaml/sys_select.yaml
   DEF_FILE sys/select.h.def
   GEN_HDR sys/select.h
   DEPENDS
@@ -489,8 +527,9 @@ add_gen_header(
     .llvm-libc-types.struct_timeval
 )
 
-add_gen_header(
+add_gen_header2(
   sys_sendfile
+  YAML_FILE ../libc/newhdrgen/yaml/sys_sendfile.yaml
   DEF_FILE sys/sendfile.h.def
   GEN_HDR sys/sendfile.h
   DEPENDS
@@ -500,8 +539,9 @@ add_gen_header(
     .llvm-libc-types.ssize_t
 )
 
-add_gen_header(
+add_gen_header2(
   sys_socket
+  YAML_FILE ../libc/newhdrgen/yaml/sys_socket.yaml
   DEF_FILE sys/socket.h.def
   GEN_HDR sys/socket.h
   DEPENDS
@@ -513,8 +553,9 @@ add_gen_header(
     .llvm-libc-types.struct_sockaddr_un
 )
 
-add_gen_header(
+add_gen_header2(
   sys_statvfs
+  YAML_FILE ../libc/newhdrgen/yaml/sys_statvfs.yaml
   DEF_FILE sys/statvfs.h.def
   GEN_HDR sys/statvfs.h
   DEPENDS
@@ -522,14 +563,16 @@ add_gen_header(
     .llvm-libc-types.struct_statvfs
 )
 
-add_gen_header(
+add_gen_header2(
   sys_syscall
+  YAML_FILE ../libc/newhdrgen/yaml/sys_syscall.yaml
   DEF_FILE sys/syscall.h.def
   GEN_HDR sys/syscall.h
 )
 
-add_gen_header(
+add_gen_header2(
   sys_time
+  YAML_FILE ../libc/newhdrgen/yaml/sys_time.yaml
   DEF_FILE sys/time.h.def
   GEN_HDR sys/time.h
   DEPENDS
@@ -538,8 +581,9 @@ add_gen_header(
     .llvm-libc-macros.sys_time_macros
 )
 
-add_gen_header(
+add_gen_header2(
   sys_types
+  YAML_FILE ../libc/newhdrgen/yaml/sys_types.yaml
   DEF_FILE sys/types.h.def
   GEN_HDR sys/types.h
   DEPENDS
@@ -567,8 +611,9 @@ add_gen_header(
     .llvm-libc-types.uid_t
 )
 
-add_gen_header(
+add_gen_header2(
   sys_utsname
+  YAML_FILE ../libc/newhdrgen/yaml/sys_utsname.yaml
   DEF_FILE sys/utsname.h.def
   GEN_HDR sys/utsname.h
   DEPENDS
@@ -576,8 +621,9 @@ add_gen_header(
     .llvm-libc-types.struct_utsname
 )
 
-add_gen_header(
+add_gen_header2(
   sys_wait
+  YAML_FILE ../libc/newhdrgen/yaml/sys_wait.yaml
   DEF_FILE sys/wait.h.def
   GEN_HDR sys/wait.h
   DEPENDS
@@ -588,8 +634,9 @@ add_gen_header(
     .llvm-libc-types.siginfo_t
 )
 
-add_gen_header(
+add_gen_header2(
   termios
+  YAML_FILE ../libc/newhdrgen/yaml/termios.yaml
   DEF_FILE termios.h.def
   GEN_HDR termios.h
   DEPENDS
@@ -602,8 +649,9 @@ add_gen_header(
     .llvm-libc-types.tcflag_t
 )
 
-add_gen_header(
+add_gen_header2(
   uchar
+  YAML_FILE ../libc/newhdrgen/yaml/uchar.yaml
   DEF_FILE uchar.h.def
   GEN_HDR uchar.h
   DEPENDS
@@ -614,8 +662,9 @@ add_gen_header(
     .llvm-libc-types.char32_t
 )
 
-add_gen_header(
+add_gen_header2(
   wchar
+  YAML_FILE ../libc/newhdrgen/yaml/wchar.yaml
   DEF_FILE wchar.h.def
   GEN_HDR wchar.h
   DEPENDS
@@ -630,8 +679,9 @@ add_gen_header(
 if(LIBC_TARGET_OS_IS_GPU)
   file(MAKE_DIRECTORY ${LIBC_INCLUDE_DIR}/gpu)
 
-  add_gen_header(
+  add_gen_header2(
     gpu_rpc
+    YAML_FILE ../libc/newhdrgen/yaml/rpc.yaml
     DEF_FILE gpu/rpc.h.def
     GEN_HDR gpu/rpc.h
     DEPENDS
diff --git a/libc/newhdrgen/yaml/features.yaml b/libc/newhdrgen/yaml/features.yaml
new file mode 100644
index 0000000000000..749f752f84287
--- /dev/null
+++ b/libc/newhdrgen/yaml/features.yaml
@@ -0,0 +1,8 @@
+header: features.h
+standards: 
+  - stdc
+macros: []
+types: []
+enums: []
+objects: []
+functions: []
\ No newline at end of file
diff --git a/libc/newhdrgen/yaml/pthread.yaml b/libc/newhdrgen/yaml/pthread.yaml
index 14a562082d5de..8c320125a90fa 100644
--- a/libc/newhdrgen/yaml/pthread.yaml
+++ b/libc/newhdrgen/yaml/pthread.yaml
@@ -2,6 +2,7 @@ header: pthread.h
 macros: []
 types:
   - type_name: pthread_t
+  - type_name: pthread_rwlock_t
   - type_name: pthread_once_t
   - type_name: pthread_mutex_t
   - type_name: pthread_mutexattr_t
@@ -13,33 +14,7 @@ types:
   - type_name: __pthread_start_t
   - type_name: __pthread_once_func_t
   - type_name: __atfork_callback_t
-enums:
-  - name: PTHREAD_CREATE_JOINABLE
-    value: 0x0
-  - name: PTHREAD_CREATE_DETACHED
-    value: 0x1
-  - name: PTHREAD_MUTEX_NORMAL
-    value: 0x0
-  - name: PTHREAD_MUTEX_ERRORCHECK
-    value: 0x1
-  - name: PTHREAD_MUTEX_RECURSIVE
-    value: 0x2
-  - name: PTHREAD_MUTEX_DEFAULT
-    value: 0x0
-  - name: PTHREAD_PROCESS_PRIVATE
-    value: 0x0
-  - name: PTHREAD_PROCESS_SHARED
-    value: 0x1
-  - name: PTHREAD_MUTEX_STALLED
-    value: 0x0
-  - name: PTHREAD_MUTEX_ROBUST
-    value: 0x1
-  - name: PTHREAD_RWLOCK_PREFER_READER_NP
-    value: 0
-  - name: PTHREAD_RWLOCK_PREFER_WRITER_NP
-    value: 1
-  - name: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
-    value: 2
+enums: []
 functions:
   - name: pthread_atfork
     standards: 
@@ -184,7 +159,7 @@ functions:
   - name: pthread_exit
     standards: 
       - POSIX
-    return_type: __Noreturn void
+    return_type: _Noreturn void
     arguments:
       - type: void *
   - name: pthread_getname_np
diff --git a/libc/newhdrgen/yaml/sys_random.yaml b/libc/newhdrgen/yaml/sys_random.yaml
index 233fb2c7988cb..6d84056d7dd71 100644
--- a/libc/newhdrgen/yaml/sys_random.yaml
+++ b/libc/newhdrgen/yaml/sys_random.yaml
@@ -4,7 +4,7 @@ types:
   - type_name: ssize_t
   - type_name: size_t
 enums: []
-objects:
+objects: []
 functions:
   - name: getrandom
     standards: 
diff --git a/libc/newhdrgen/yaml/time.yaml b/libc/newhdrgen/yaml/time.yaml
index e7f8de65eeb75..220d4328dbbdb 100644
--- a/libc/newhdrgen/yaml/time.yaml
+++ b/libc/newhdrgen/yaml/time.yaml
@@ -15,7 +15,7 @@ functions:
       - stdc
     return_type: char *
     arguments:
-      - type: struct tm *
+      - type: const struct tm *
   - name: asctime_r
     standard: 
       - stdc
diff --git a/libc/newhdrgen/yaml_to_classes.py b/libc/newhdrgen/yaml_to_classes.py
index 6bccda8e03640..47fe3f92aac78 100644
--- a/libc/newhdrgen/yaml_to_classes.py
+++ b/libc/newhdrgen/yaml_to_classes.py
@@ -22,9 +22,9 @@
 from class_implementation.classes.object import Object
 
 
-def yaml_to_classes(yaml_data):
+def yaml_to_classes(yaml_data, entry_points=None):
     """
-    Convert YAML data to header classes.
+    Convert YAML data to header classes, filtering functions by entry points.
 
     Args:
         yaml_data: The YAML data containing header specifications.
@@ -49,6 +49,9 @@ def yaml_to_classes(yaml_data):
         )
 
     functions = yaml_data.get("functions", [])
+    if entry_points:
+        entry_points_set = set(entry_points)
+        functions = [f for f in functions if f["name"] in entry_points_set]
     sorted_functions = sorted(functions, key=lambda x: x["name"])
     guards = []
     guarded_function_dict = {}
@@ -105,19 +108,20 @@ def yaml_to_classes(yaml_data):
     return header
 
 
-def load_yaml_file(yaml_file):
+def load_yaml_file(yaml_file, entry_points):
     """
-    Load YAML file and convert it to header classes.
+    Load YAML file and convert it to header classes, filtering by entry points.
 
     Args:
         yaml_file: The path to the YAML file.
+        entry_points: A list of entry points to filter functions.
 
     Returns:
         HeaderFile: An instance of HeaderFile populated with the data from the YAML file.
     """
     with open(yaml_file, "r") as f:
         yaml_data = yaml.safe_load(f)
-    return yaml_to_classes(yaml_data)
+    return yaml_to_classes(yaml_data, entry_points)
 
 
 def fill_public_api(header_str, h_def_content):
@@ -207,7 +211,7 @@ def increase_indent(self, flow=False, indentless=False):
     print(f"Added function {new_function.name} to {yaml_file}")
 
 
-def main(yaml_file, h_def_file, output_dir, add_function=None):
+def main(yaml_file, h_def_file, output_dir, add_function=None, entry_points=None):
     """
     Main function to generate header files from YAML and .h.def templates.
 
@@ -216,12 +220,13 @@ def main(yaml_file, h_def_file, output_dir, add_function=None):
         h_def_file: Path to the .h.def template file.
         output_dir: Directory to output the generated header file.
         add_function: Details of the function to be added to the YAML file (if any).
+        entry_points: A list of entry points to filter functions.
     """
 
     if add_function:
         add_function_to_yaml(yaml_file, add_function)
...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/98554


More information about the libc-commits mailing list