[libc-commits] [libc] [libc][NFC] Add cmake facility to unify the way we parse arguments. (PR #156922)
via libc-commits
libc-commits at lists.llvm.org
Thu Sep 4 09:42:11 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libc
Author: None (lntue)
<details>
<summary>Changes</summary>
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
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()
``````````
</details>
https://github.com/llvm/llvm-project/pull/156922
More information about the libc-commits
mailing list