[libc-commits] [libc] [libc] cmake configruation for newhdrgen (PR #98257)

via libc-commits libc-commits at lists.llvm.org
Tue Jul 9 19:46:13 PDT 2024


================
@@ -66,6 +67,90 @@ function(add_header target_name)
   )
 endfunction(add_header)
 
+function(add_yaml_header 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(
----------------
lntue wrote:

Don't use `add_custom_command` and depending on its output file.  Just do `add_custom_target` with a `COMMAND` field for easier to manage dependency.

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


More information about the libc-commits mailing list