Skip to content

Conversation

lntue
Copy link
Contributor

@lntue lntue commented Sep 4, 2025

Also this will allow all arguments to have overlay-only and full-build-only options.

@llvmbot
Copy link
Member

llvmbot commented Sep 4, 2025

@llvm/pr-subscribers-libc

Author: None (lntue)

Changes

Also this will allow all arguments to have overlay-only and full-build-only options.


Full diff: https://github.com/llvm/llvm-project/pull/156922.diff

1 Files Affected:

  • (added) libc/cmake/modules/LibcParseArguments.cmake (+87)
diff --git a/libc/cmake/modules/LibcParseArguments.cmake b/libc/cmake/modules/LibcParseArguments.cmake
new file mode 100644
index 0000000000000..68287358a0389
--- /dev/null
+++ b/libc/cmake/modules/LibcParseArguments.cmake
@@ -0,0 +1,87 @@
+set(LLVM_LIBC_OPTIONAL_ARGS
+  ALIAS
+  PUBLIC
+  NO_GPU_BUNDLE
+  NO_RUN_POSTBUILD
+  C_TEST
+  NEED_MPFR
+  NEED_MPC
+  IS_GPU_BENCHMARK
+)
+
+set(LLVM_LIBC_SINGLE_VALUE_ARGS
+  CXX_STANDARD
+  SUITE
+  CREATE_TARGET_FUNCTION
+  HDR
+  DEST_HDR
+  YAML_FILE
+  GEN_HDR
+  NAME
+)
+
+set(LLVM_LIBC_MULTI_VALUE_ARGS
+  HDRS
+  SRCS
+  COMPILE_OPTIONS
+  LINK_OPTIONS
+  LINK_LIBRARIES
+  ENV
+  DEPENDS
+  FLAGS
+  ARGS
+  LOADER_ARGS
+)
+
+foreach(arg_list LLVM_LIBC_OPTIONAL_ARGS LLVM_LIBC_SINGLE_VALUE_ARGS LLVM_LIBC_MULTI_VALUE_ARGS)
+  list(TRANSFORM ${arg_list}
+    PREPEND "OVERLAY_"
+    OUTPUT_VARIABLE ${arg_list}_OVERLAY
+  )
+  list(TRANSFORM ${arg_list}
+    PREPEND "FULL_BUILD_"
+    OUTPUT_VARIABLE ${arg_list}_FULL_BUILD
+  )
+  set(${arg_list}_COMPLETE ${arg_list} ${arg_list}_OVERLAY ${arg_list}_FULL_BUILD)
+endforeach()
+
+macro(llvm_libc_parse_arguments name_prefix)
+  cmake_parse_arguments(
+    ${name_prefix}
+    "${LLVM_LIBC_OPTIONAL_ARGS_COMPLETE}"
+    "${LLVM_LIBC_SINGLE_VALUE_ARGS_COMPLETE}"
+    "${LLVM_LIBC_MULTI_VALUE_ARGS_COMPLETE}"
+    ${ARGN}
+  )
+
+  # Collect overlay and full build args
+  foreach(argument IN LISTS LLVM_LIBC_OPTIONAL_ARGS LLVM_LIBC_SINGLE_VALUE_ARGS LLVM_LIBC_MULTI_VALUE_ARGS)
+    if(LLVM_LIBC_FULL_BUILD)
+      if(${name_prefix}_${argument}_FULL_BUILD)
+        list(APPEND ${name_prefix}_${argument} ${name_prefix}_${argument}_FULL_BUILD)
+      endif()
+    else()
+      if(${name_prefix}_${argument}_OVERLAY)
+        list(APPEND ${name_prefix}_${argument} ${name_prefix}_${argument}_OVERLAY)
+      endif()
+    endif()
+  endforeach()
+endmacro()
+
+# Forward all arguments that can be used for llvm_libc_parse_arguments again.
+# Assume that *_OVERLAY and *_FULL_BUILD args have been merged properly.
+macro(forward_arguments name_prefix output)
+  set(${output} "")
+  
+  foreach(argument ${LLVM_LIBC_OPTIONAL_ARGS})
+    if(${name_prefix}_${argument})
+      list(APPEND output ${argument})
+    endif()
+  endforeach()
+
+  foreach(argument ${LLVM_LIBC_SINGLE_VALUE_ARGS} ${LLVM_LIBC_MULTI_VALUE_ARGS})
+    if(${name_prefix}_${argument})
+      list(APPEND output ${argument} "${name_prefix}_${argument}")
+    endif()
+  endforeach()
+endmacro()

@lntue lntue requested a review from petrhosek September 4, 2025 16:38
@lntue lntue merged commit 0bd3ef4 into llvm:main Sep 9, 2025
19 checks passed
@lntue lntue deleted the build branch September 9, 2025 20:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants