Skip to content

Commit f1584a2

Browse files
lntuegithub-actions[bot]
authored andcommitted
Automerge: [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.
2 parents 7fd4222 + 0bd3ef4 commit f1584a2

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
set(LLVM_LIBC_OPTIONAL_ARGS
2+
ALIAS
3+
PUBLIC
4+
NO_GPU_BUNDLE
5+
NO_RUN_POSTBUILD
6+
C_TEST
7+
NEED_MPFR
8+
NEED_MPC
9+
IS_GPU_BENCHMARK
10+
)
11+
12+
set(LLVM_LIBC_SINGLE_VALUE_ARGS
13+
CXX_STANDARD
14+
SUITE
15+
CREATE_TARGET_FUNCTION
16+
HDR
17+
DEST_HDR
18+
YAML_FILE
19+
GEN_HDR
20+
NAME
21+
)
22+
23+
set(LLVM_LIBC_MULTI_VALUE_ARGS
24+
HDRS
25+
SRCS
26+
COMPILE_OPTIONS
27+
LINK_OPTIONS
28+
LINK_LIBRARIES
29+
ENV
30+
DEPENDS
31+
FLAGS
32+
ARGS
33+
LOADER_ARGS
34+
)
35+
36+
foreach(arg_list LLVM_LIBC_OPTIONAL_ARGS LLVM_LIBC_SINGLE_VALUE_ARGS LLVM_LIBC_MULTI_VALUE_ARGS)
37+
list(TRANSFORM ${arg_list}
38+
PREPEND "OVERLAY_"
39+
OUTPUT_VARIABLE ${arg_list}_OVERLAY
40+
)
41+
list(TRANSFORM ${arg_list}
42+
PREPEND "FULL_BUILD_"
43+
OUTPUT_VARIABLE ${arg_list}_FULL_BUILD
44+
)
45+
set(${arg_list}_COMPLETE ${${arg_list}} ${${arg_list}_OVERLAY} ${${arg_list}_FULL_BUILD})
46+
endforeach()
47+
48+
macro(llvm_libc_parse_arguments name_prefix)
49+
cmake_parse_arguments(
50+
${name_prefix}
51+
"${LLVM_LIBC_OPTIONAL_ARGS_COMPLETE}"
52+
"${LLVM_LIBC_SINGLE_VALUE_ARGS_COMPLETE}"
53+
"${LLVM_LIBC_MULTI_VALUE_ARGS_COMPLETE}"
54+
${ARGN}
55+
)
56+
57+
# Collect overlay and full build args
58+
foreach(argument IN LISTS LLVM_LIBC_OPTIONAL_ARGS LLVM_LIBC_SINGLE_VALUE_ARGS LLVM_LIBC_MULTI_VALUE_ARGS)
59+
if(LLVM_LIBC_FULL_BUILD)
60+
if(${name_prefix}_${argument}_FULL_BUILD)
61+
list(APPEND ${name_prefix}_${argument} ${${name_prefix}_${argument}_FULL_BUILD})
62+
endif()
63+
else()
64+
if(${name_prefix}_${argument}_OVERLAY)
65+
list(APPEND ${name_prefix}_${argument} ${${name_prefix}_${argument}_OVERLAY})
66+
endif()
67+
endif()
68+
endforeach()
69+
endmacro()
70+
71+
# Forward all arguments that can be used for llvm_libc_parse_arguments again.
72+
# Assume that *_OVERLAY and *_FULL_BUILD args have been merged properly.
73+
macro(forward_arguments name_prefix output)
74+
set(${output} "")
75+
76+
foreach(argument ${LLVM_LIBC_OPTIONAL_ARGS})
77+
if(${name_prefix}_${argument})
78+
list(APPEND output ${argument})
79+
endif()
80+
endforeach()
81+
82+
foreach(argument ${LLVM_LIBC_SINGLE_VALUE_ARGS} ${LLVM_LIBC_MULTI_VALUE_ARGS})
83+
if(${name_prefix}_${argument})
84+
list(APPEND output ${argument} "${${name_prefix}_${argument}}")
85+
endif()
86+
endforeach()
87+
endmacro()

0 commit comments

Comments
 (0)