brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · a57e2fe Raw
184 lines · plain
1set(LIBFUZZER_SOURCES2  FuzzerCrossOver.cpp3  FuzzerDataFlowTrace.cpp4  FuzzerDriver.cpp5  FuzzerExtFunctionsDlsym.cpp6  FuzzerExtFunctionsWeak.cpp7  FuzzerExtFunctionsWindows.cpp8  FuzzerExtraCounters.cpp9  FuzzerExtraCountersDarwin.cpp10  FuzzerExtraCountersWindows.cpp11  FuzzerFork.cpp12  FuzzerIO.cpp13  FuzzerIOPosix.cpp14  FuzzerIOWindows.cpp15  FuzzerLoop.cpp16  FuzzerMerge.cpp17  FuzzerMutate.cpp18  FuzzerSHA1.cpp19  FuzzerTracePC.cpp20  FuzzerUtil.cpp21  FuzzerUtilDarwin.cpp22  FuzzerUtilFuchsia.cpp23  FuzzerUtilLinux.cpp24  FuzzerUtilPosix.cpp25  FuzzerUtilWindows.cpp)26 27set(LIBFUZZER_HEADERS28  FuzzerBuiltins.h29  FuzzerBuiltinsMsvc.h30  FuzzerCommand.h31  FuzzerCorpus.h32  FuzzerDataFlowTrace.h33  FuzzerDefs.h34  FuzzerDictionary.h35  FuzzerExtFunctions.def36  FuzzerExtFunctions.h37  FuzzerFlags.def38  FuzzerFork.h39  FuzzerIO.h40  FuzzerInterface.h41  FuzzerInternal.h42  FuzzerMerge.h43  FuzzerMutate.h44  FuzzerOptions.h45  FuzzerRandom.h46  FuzzerSHA1.h47  FuzzerTracePC.h48  FuzzerUtil.h49  FuzzerValueBitMap.h)50 51include_directories(../../include)52 53CHECK_CXX_SOURCE_COMPILES("54  static thread_local int blah;55  int main() {56  return 0;57  }58  " HAS_THREAD_LOCAL)59 60set(LIBFUZZER_CFLAGS ${COMPILER_RT_COMMON_CFLAGS})61 62if(OS_NAME MATCHES "Android|Linux|Fuchsia" AND63   COMPILER_RT_LIBCXX_PATH AND64   COMPILER_RT_LIBCXXABI_PATH)65  list(APPEND LIBFUZZER_CFLAGS -D_LIBCPP_ABI_VERSION=Fuzzer)66  append_list_if(COMPILER_RT_HAS_NOSTDINCXX_FLAG -nostdinc++ LIBFUZZER_CFLAGS)67elseif(TARGET cxx-headers OR HAVE_LIBCXX)68  # libFuzzer uses C++ standard library headers.69  list(APPEND LIBFUZZER_CFLAGS ${COMPILER_RT_CXX_CFLAGS})70  set(LIBFUZZER_DEPS cxx-headers)71endif()72 73append_list_if(COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG -fno-omit-frame-pointer LIBFUZZER_CFLAGS)74 75if (CMAKE_CXX_FLAGS MATCHES "fsanitize-coverage")76  list(APPEND LIBFUZZER_CFLAGS -fsanitize-coverage=0)77endif()78 79if(MSVC)80  # Silence warnings by turning off exceptions in MSVC headers and avoid an81  # error by unnecessarily defining thread_local when it isn't even used on82  # Windows.83  list(APPEND LIBFUZZER_CFLAGS -D_HAS_EXCEPTIONS=0)84else()85  if(NOT HAS_THREAD_LOCAL)86    list(APPEND LIBFUZZER_CFLAGS -Dthread_local=__thread)87  endif()88endif()89 90add_compiler_rt_component(fuzzer)91 92add_compiler_rt_object_libraries(RTfuzzer93  OS ${FUZZER_SUPPORTED_OS}94  ARCHS ${FUZZER_SUPPORTED_ARCH}95  SOURCES ${LIBFUZZER_SOURCES}96  ADDITIONAL_HEADERS ${LIBFUZZER_HEADERS}97  CFLAGS ${LIBFUZZER_CFLAGS}98  DEPS ${LIBFUZZER_DEPS})99 100add_compiler_rt_object_libraries(RTfuzzer_main101  OS ${FUZZER_SUPPORTED_OS}102  ARCHS ${FUZZER_SUPPORTED_ARCH}103  SOURCES FuzzerMain.cpp104  CFLAGS ${LIBFUZZER_CFLAGS}105  DEPS ${LIBFUZZER_DEPS})106 107add_compiler_rt_object_libraries(RTfuzzer_interceptors108  OS ${FUZZER_SUPPORTED_OS}109  ARCHS ${FUZZER_SUPPORTED_ARCH}110  SOURCES FuzzerInterceptors.cpp111  CFLAGS ${LIBFUZZER_CFLAGS}112  DEPS ${LIBFUZZER_DEPS})113 114add_compiler_rt_runtime(clang_rt.fuzzer115  STATIC116  OS ${FUZZER_SUPPORTED_OS}117  ARCHS ${FUZZER_SUPPORTED_ARCH}118  OBJECT_LIBS RTfuzzer RTfuzzer_main119  CFLAGS ${LIBFUZZER_CFLAGS}120  PARENT_TARGET fuzzer)121 122add_compiler_rt_runtime(clang_rt.fuzzer_no_main123  STATIC124  OS ${FUZZER_SUPPORTED_OS}125  ARCHS ${FUZZER_SUPPORTED_ARCH}126  OBJECT_LIBS RTfuzzer127  CFLAGS ${LIBFUZZER_CFLAGS}128  PARENT_TARGET fuzzer)129 130add_compiler_rt_runtime(clang_rt.fuzzer_interceptors131  STATIC132  OS ${FUZZER_SUPPORTED_OS}133  ARCHS ${FUZZER_SUPPORTED_ARCH}134  OBJECT_LIBS RTfuzzer_interceptors135  CFLAGS ${LIBFUZZER_CFLAGS}136  PARENT_TARGET fuzzer)137 138if(OS_NAME MATCHES "Android|Linux|Fuchsia" AND139   COMPILER_RT_LIBCXX_PATH AND140   COMPILER_RT_LIBCXXABI_PATH)141  macro(partially_link_libcxx name dir arch)142    get_target_flags_for_arch(${arch} target_cflags)143    if(CMAKE_CXX_COMPILER_ID MATCHES Clang)144      get_compiler_rt_target(${arch} target)145      set(target_cflags --target=${target} ${target_cflags})146    endif()147    set(cxx_${arch}_merge_dir "${CMAKE_CURRENT_BINARY_DIR}/cxx_${arch}_merge.dir")148    file(MAKE_DIRECTORY ${cxx_${arch}_merge_dir})149    add_custom_command(TARGET clang_rt.${name}-${arch} POST_BUILD150      COMMAND ${CMAKE_CXX_COMPILER} ${target_cflags} -Wl,--whole-archive "$<TARGET_LINKER_FILE:clang_rt.${name}-${arch}>" -Wl,--no-whole-archive ${dir}/lib/libc++.a -r -o ${name}.o151      COMMAND ${CMAKE_OBJCOPY} --localize-hidden ${name}.o152      COMMAND ${CMAKE_COMMAND} -E remove "$<TARGET_LINKER_FILE:clang_rt.${name}-${arch}>"153      COMMAND ${CMAKE_AR} qcs "$<TARGET_LINKER_FILE:clang_rt.${name}-${arch}>" ${name}.o154      WORKING_DIRECTORY ${cxx_${arch}_merge_dir}155    )156  endmacro()157 158  foreach(arch ${FUZZER_SUPPORTED_ARCH})159    get_target_flags_for_arch(${arch} TARGET_CFLAGS)160    set(LIBCXX_${arch}_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/libcxx_fuzzer_${arch})161    add_custom_libcxx(libcxx_fuzzer_${arch} ${LIBCXX_${arch}_PREFIX}162      CFLAGS ${TARGET_CFLAGS}163      CMAKE_ARGS -DCMAKE_CXX_COMPILER_WORKS=ON164                 -DCMAKE_POSITION_INDEPENDENT_CODE=ON165                 -DRUNTIMES_EXECUTE_ONLY_CODE=${RUNTIMES_EXECUTE_ONLY_CODE}166                 -DLIBCXXABI_ENABLE_EXCEPTIONS=OFF167                 -DLIBCXX_ABI_NAMESPACE=__Fuzzer168                 -DLIBCXX_ENABLE_EXCEPTIONS=OFF)169    target_compile_options(RTfuzzer.${arch} PRIVATE -isystem ${LIBCXX_${arch}_PREFIX}/include/c++/v1)170    add_dependencies(RTfuzzer.${arch} libcxx_fuzzer_${arch}-install-cmake326-workaround)171    target_compile_options(RTfuzzer_main.${arch} PRIVATE -isystem ${LIBCXX_${arch}_PREFIX}/include/c++/v1)172    add_dependencies(RTfuzzer_main.${arch} libcxx_fuzzer_${arch}-install-cmake326-workaround)173    target_compile_options(RTfuzzer_interceptors.${arch} PRIVATE -isystem ${LIBCXX_${arch}_PREFIX}/include/c++/v1)174    add_dependencies(RTfuzzer_interceptors.${arch} libcxx_fuzzer_${arch}-install-cmake326-workaround)175    partially_link_libcxx(fuzzer_no_main ${LIBCXX_${arch}_PREFIX} ${arch})176    partially_link_libcxx(fuzzer_interceptors ${LIBCXX_${arch}_PREFIX} ${arch})177    partially_link_libcxx(fuzzer ${LIBCXX_${arch}_PREFIX} ${arch})178  endforeach()179endif()180 181if(COMPILER_RT_INCLUDE_TESTS)182  add_subdirectory(tests)183endif()184