Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions libc/cmake/modules/LibcParseArguments.cmake
Original file line number Diff line number Diff line change
@@ -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