[libc][NFC] Add cmake facility to unify the way we parse arguments. (#156922)
Also this will allow all arguments to have overlay-only and full-build-only options.
This commit is contained in:
parent
e0d0b90d52
commit
0bd3ef4cf2
87
libc/cmake/modules/LibcParseArguments.cmake
Normal file
87
libc/cmake/modules/LibcParseArguments.cmake
Normal file
@ -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()
|
||||
Loading…
x
Reference in New Issue
Block a user