| if( LLVM_USE_SANITIZE_COVERAGE ) |
| set(LLVM_LINK_COMPONENTS ${LLVM_TARGETS_TO_BUILD}) |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=fuzzer") |
| |
| if(CLANG_ENABLE_PROTO_FUZZER) |
| # Create protobuf .h and .cc files, and put them in a library for use by |
| # clang-proto-fuzzer components. |
| find_package(Protobuf REQUIRED) |
| add_definitions(-DGOOGLE_PROTOBUF_NO_RTTI) |
| include_directories(${PROTOBUF_INCLUDE_DIRS}) |
| include_directories(${CMAKE_CURRENT_BINARY_DIR}) |
| protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS cxx_proto.proto) |
| # Hack to bypass LLVM's cmake sources check and allow multiple libraries and |
| # executables from this directory. |
| set(LLVM_OPTIONAL_SOURCES |
| ClangFuzzer.cpp |
| ExampleClangProtoFuzzer.cpp |
| ${PROTO_SRCS} |
| ) |
| add_clang_library(clangCXXProto |
| ${PROTO_SRCS} |
| ${PROTO_HDRS} |
| |
| LINK_LIBS |
| ${PROTOBUF_LIBRARIES} |
| ) |
| |
| # Build and include libprotobuf-mutator |
| include(ProtobufMutator) |
| include_directories(${ProtobufMutator_INCLUDE_DIRS}) |
| |
| # Build the protobuf->C++ translation library and driver. |
| add_clang_subdirectory(proto-to-cxx) |
| |
| # Build the protobuf fuzzer |
| add_clang_executable(clang-proto-fuzzer ExampleClangProtoFuzzer.cpp) |
| target_link_libraries(clang-proto-fuzzer |
| ${ProtobufMutator_LIBRARIES} |
| clangCXXProto |
| clangHandleCXX |
| clangProtoToCXX |
| ) |
| else() |
| # Hack to bypass LLVM's cmake sources check and allow multiple libraries and |
| # executables from this directory. |
| set(LLVM_OPTIONAL_SOURCES ClangFuzzer.cpp ExampleClangProtoFuzzer.cpp) |
| endif() |
| |
| add_clang_subdirectory(handle-cxx) |
| |
| add_clang_executable(clang-fuzzer |
| EXCLUDE_FROM_ALL |
| ClangFuzzer.cpp |
| ) |
| |
| target_link_libraries(clang-fuzzer |
| clangHandleCXX |
| ) |
| endif() |