brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · 51021e2 Raw
127 lines · plain
1set(LIBFUZZER_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS} fuzzer)2if (COMPILER_RT_HAS_UBSAN)3  list(APPEND LIBFUZZER_TEST_DEPS ubsan)4endif()5if (COMPILER_RT_HAS_ASAN)6  list(APPEND LIBFUZZER_TEST_DEPS asan)7endif()8if (COMPILER_RT_HAS_MSAN)9  list(APPEND LIBFUZZER_TEST_DEPS msan)10endif()11if (COMPILER_RT_HAS_DFSAN)12  list(APPEND LIBFUZZER_TEST_DEPS dfsan)13endif()14if (NOT COMPILER_RT_STANDALONE_BUILD)15  if(NOT APPLE AND COMPILER_RT_HAS_LLD AND "lld" IN_LIST LLVM_ENABLE_PROJECTS)16    list(APPEND LIBFUZZER_TEST_DEPS lld)17  endif()18endif()19 20set(FUZZER_TEST_ARCH ${FUZZER_SUPPORTED_ARCH})21if (APPLE)22  darwin_filter_host_archs(FUZZER_SUPPORTED_ARCH FUZZER_TEST_ARCH)23endif()24 25list(APPEND LIBFUZZER_TEST_DEPS FuzzerUnitTests)26list(APPEND LIBFUZZER_TEST_DEPS FuzzedDataProviderUnitTests)27 28set(LIBFUZZER_TESTSUITES)29 30# libFuzzer unit tests.31configure_lit_site_cfg(32  ${CMAKE_CURRENT_SOURCE_DIR}/unit/lit.site.cfg.py.in33  ${CMAKE_CURRENT_BINARY_DIR}/unit/lit.site.cfg.py)34list(APPEND LIBFUZZER_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/unit)35 36macro(test_fuzzer stdlib)37  cmake_parse_arguments(TEST "" "" "DEPS" ${ARGN})38  string(REPLACE "+" "x" stdlib_name ${stdlib})39  string(REPLACE "-" ";" stdlib_list ${stdlib_name})40  set(STDLIB_CAPITALIZED "")41  foreach(part IN LISTS stdlib_list)42    string(SUBSTRING ${part} 0 1 first_letter)43    string(TOUPPER ${first_letter} first_letter)44    string(REGEX REPLACE "^.(.*)" "${first_letter}\\1" part "${part}")45    set(STDLIB_CAPITALIZED "${STDLIB_CAPITALIZED}${part}")46  endforeach()47  foreach(arch ${FUZZER_TEST_ARCH})48    set(LIBFUZZER_TEST_COMPILER ${COMPILER_RT_TEST_COMPILER})49    get_test_cc_for_arch(${arch} LIBFUZZER_TEST_COMPILER LIBFUZZER_TEST_FLAGS)50 51    set(LIBFUZZER_TEST_TARGET_ARCH ${arch})52    set(LIBFUZZER_TEST_APPLE_PLATFORM "osx")53    set(LIBFUZZER_TEST_MIN_DEPLOYMENT_TARGET_FLAG "${DARWIN_osx_MIN_VER_FLAG}")54 55    set(LIBFUZZER_TEST_STDLIB ${stdlib})56 57    string(TOUPPER ${arch} ARCH_UPPER_CASE)58    set(CONFIG_NAME ${ARCH_UPPER_CASE}${STDLIB_CAPITALIZED}${OS_NAME}Config)59    set(LIBFUZZER_TEST_CONFIG_SUFFIX "-${arch}-${stdlib_name}-${OS_NAME}")60 61    # LIT-based libFuzzer tests.62    configure_lit_site_cfg(63      ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in64      ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg.py65      )66 67    list(APPEND LIBFUZZER_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME})68    if(TEST_DEPS)69      list(APPEND LIBFUZZER_TEST_DEPS ${TEST_DEPS})70    endif()71  endforeach()72endmacro()73 74test_fuzzer("default")75if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")76  if(LIBCXX_ENABLE_SHARED)77    test_fuzzer("libc++" DEPS cxx_shared)78  endif()79  if(LIBCXX_ENABLE_STATIC)80    test_fuzzer("static-libc++" DEPS cxx_static)81  endif()82endif()83 84if(LIBFUZZER_TESTSUITES)85  add_lit_testsuite(check-fuzzer "Running libFuzzer tests"86    ${LIBFUZZER_TESTSUITES}87    DEPENDS ${LIBFUZZER_TEST_DEPS})88endif()89 90if (APPLE)91  set(LIBFUZZER_TEST_COMPILER ${COMPILER_RT_TEST_COMPILER})92  set(FUZZER_APPLE_PLATFORMS ${FUZZER_SUPPORTED_OS})93  foreach(platform ${FUZZER_APPLE_PLATFORMS})94    if ("${platform}" STREQUAL "osx")95      # Skip macOS because it's handled by the code above that builds tests for the host machine.96      continue()97    endif()98    list_intersect(99      FUZZER_TEST_${platform}_ARCHS100      FUZZER_SUPPORTED_ARCH101      DARWIN_${platform}_ARCHS102    )103    foreach(arch ${FUZZER_TEST_${platform}_ARCHS})104      get_test_cflags_for_apple_platform(105        "${platform}"106        "${arch}"107        LIBFUZZER_TEST_FLAGS108        )109      string(TOUPPER "${arch}" ARCH_UPPER_CASE)110      get_capitalized_apple_platform("${platform}" PLATFORM_CAPITALIZED)111      set(CONFIG_NAME "${PLATFORM_CAPITALIZED}${ARCH_UPPER_CASE}Config")112      set(LIBFUZZER_TEST_CONFIG_SUFFIX "-${arch}-${platform}")113      set(LIBFUZZER_TEST_APPLE_PLATFORM "${platform}")114      set(LIBFUZZER_TEST_TARGET_ARCH "${arch}")115      set(LIBFUZZER_TEST_MIN_DEPLOYMENT_TARGET_FLAG "${DARWIN_${platform}_MIN_VER_FLAG}")116      configure_lit_site_cfg(117        ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in118        ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg.py119        )120      add_lit_testsuite(check-fuzzer-${platform}-${arch} "libFuzzer ${platform} ${arch} tests"121        EXCLUDE_FROM_CHECK_ALL122        ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/123        DEPENDS ${LIBFUZZER_TEST_DEPS})124    endforeach()125  endforeach()126endif()127