88 lines · plain
1set(LLVM_LIBC_OPTIONAL_ARGS2 ALIAS3 PUBLIC4 NO_GPU_BUNDLE5 NO_RUN_POSTBUILD6 C_TEST7 NEED_MPFR8 NEED_MPC9 IS_GPU_BENCHMARK10)11 12set(LLVM_LIBC_SINGLE_VALUE_ARGS13 CXX_STANDARD14 SUITE15 CREATE_TARGET_FUNCTION16 HDR17 DEST_HDR18 YAML_FILE19 GEN_HDR20 NAME21)22 23set(LLVM_LIBC_MULTI_VALUE_ARGS24 HDRS25 SRCS26 COMPILE_OPTIONS27 LINK_OPTIONS28 LINK_LIBRARIES29 ENV30 DEPENDS31 FLAGS32 ARGS33 LOADER_ARGS34)35 36foreach(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}_OVERLAY40 )41 list(TRANSFORM ${arg_list}42 PREPEND "FULL_BUILD_"43 OUTPUT_VARIABLE ${arg_list}_FULL_BUILD44 )45 set(${arg_list}_COMPLETE ${${arg_list}} ${${arg_list}_OVERLAY} ${${arg_list}_FULL_BUILD})46endforeach()47 48macro(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 args58 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()69endmacro()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.73macro(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()87endmacro()88