From 9d6ff481f95703e8038f4b543d74dd72701d8a17 Mon Sep 17 00:00:00 2001 From: Tue Ly Date: Thu, 4 Sep 2025 16:35:14 +0000 Subject: [PATCH 1/2] [libc][NFC] Add cmake facility to unify the way we parse arguments. --- libc/cmake/modules/LibcParseArguments.cmake | 87 +++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 libc/cmake/modules/LibcParseArguments.cmake 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() From ee6195cec81a0c976181d9abf9abdaa444f68d25 Mon Sep 17 00:00:00 2001 From: Tue Ly Date: Thu, 4 Sep 2025 16:47:46 +0000 Subject: [PATCH 2/2] Appending the values, not the variable names. --- libc/cmake/modules/LibcParseArguments.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libc/cmake/modules/LibcParseArguments.cmake b/libc/cmake/modules/LibcParseArguments.cmake index 68287358a0389..ef4a2aff0ce82 100644 --- a/libc/cmake/modules/LibcParseArguments.cmake +++ b/libc/cmake/modules/LibcParseArguments.cmake @@ -42,7 +42,7 @@ foreach(arg_list LLVM_LIBC_OPTIONAL_ARGS LLVM_LIBC_SINGLE_VALUE_ARGS LLVM_LIBC_M PREPEND "FULL_BUILD_" OUTPUT_VARIABLE ${arg_list}_FULL_BUILD ) - set(${arg_list}_COMPLETE ${arg_list} ${arg_list}_OVERLAY ${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) @@ -58,11 +58,11 @@ macro(llvm_libc_parse_arguments name_prefix) 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) + 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) + list(APPEND ${name_prefix}_${argument} ${${name_prefix}_${argument}_OVERLAY}) endif() endif() endforeach() @@ -81,7 +81,7 @@ macro(forward_arguments name_prefix output) foreach(argument ${LLVM_LIBC_SINGLE_VALUE_ARGS} ${LLVM_LIBC_MULTI_VALUE_ARGS}) if(${name_prefix}_${argument}) - list(APPEND output ${argument} "${name_prefix}_${argument}") + list(APPEND output ${argument} "${${name_prefix}_${argument}}") endif() endforeach() endmacro()