forked from OSchip/llvm-project
136 lines
3.3 KiB
CMake
136 lines
3.3 KiB
CMake
set(LLVM_LINK_COMPONENTS ${LLVM_TARGETS_TO_BUILD} FuzzMutate)
|
|
set(CXX_FLAGS_NOFUZZ ${CMAKE_CXX_FLAGS})
|
|
set(DUMMY_MAIN DummyClangFuzzer.cpp)
|
|
if(LLVM_LIB_FUZZING_ENGINE)
|
|
unset(DUMMY_MAIN)
|
|
elseif(LLVM_USE_SANITIZE_COVERAGE)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=fuzzer")
|
|
set(CXX_FLAGS_NOFUZZ "${CXX_FLAGS_NOFUZZ} -fsanitize=fuzzer-no-link")
|
|
unset(DUMMY_MAIN)
|
|
endif()
|
|
|
|
# Needed by LLVM's CMake checks because this file defines multiple targets.
|
|
set(LLVM_OPTIONAL_SOURCES
|
|
ClangFuzzer.cpp
|
|
ClangObjectiveCFuzzer.cpp
|
|
DummyClangFuzzer.cpp
|
|
ExampleClangProtoFuzzer.cpp
|
|
ExampleClangLoopProtoFuzzer.cpp
|
|
ExampleClangLLVMProtoFuzzer.cpp
|
|
)
|
|
|
|
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)
|
|
protobuf_generate_cpp(LOOP_PROTO_SRCS LOOP_PROTO_HDRS cxx_loop_proto.proto)
|
|
set(LLVM_OPTIONAL_SOURCES ${LLVM_OPTIONAL_SOURCES} ${PROTO_SRCS})
|
|
add_clang_library(clangCXXProto
|
|
${PROTO_SRCS}
|
|
${PROTO_HDRS}
|
|
|
|
LINK_LIBS
|
|
${PROTOBUF_LIBRARIES}
|
|
)
|
|
|
|
add_clang_library(clangCXXLoopProto
|
|
${LOOP_PROTO_SRCS}
|
|
${LOOP_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->LLVM IR translation library and driver.
|
|
add_clang_subdirectory(proto-to-llvm)
|
|
|
|
# Build the fuzzer initialization library.
|
|
add_clang_subdirectory(fuzzer-initialize)
|
|
|
|
# Build the protobuf fuzzer
|
|
add_clang_executable(clang-proto-fuzzer
|
|
${DUMMY_MAIN}
|
|
ExampleClangProtoFuzzer.cpp
|
|
)
|
|
|
|
# Build the loop protobuf fuzzer
|
|
add_clang_executable(clang-loop-proto-fuzzer
|
|
${DUMMY_MAIN}
|
|
ExampleClangLoopProtoFuzzer.cpp
|
|
)
|
|
|
|
# Build the llvm protobuf fuzzer
|
|
add_clang_executable(clang-llvm-proto-fuzzer
|
|
${DUMMY_MAIN}
|
|
ExampleClangLLVMProtoFuzzer.cpp
|
|
)
|
|
|
|
set(COMMON_PROTO_FUZZ_LIBRARIES
|
|
${ProtobufMutator_LIBRARIES}
|
|
${PROTOBUF_LIBRARIES}
|
|
${LLVM_LIB_FUZZING_ENGINE}
|
|
clangFuzzerInitialize
|
|
)
|
|
|
|
target_link_libraries(clang-proto-fuzzer
|
|
PRIVATE
|
|
${COMMON_PROTO_FUZZ_LIBRARIES}
|
|
clangHandleCXX
|
|
clangCXXProto
|
|
clangProtoToCXX
|
|
)
|
|
target_link_libraries(clang-loop-proto-fuzzer
|
|
PRIVATE
|
|
${COMMON_PROTO_FUZZ_LIBRARIES}
|
|
clangHandleCXX
|
|
clangCXXLoopProto
|
|
clangLoopProtoToCXX
|
|
)
|
|
target_link_libraries(clang-llvm-proto-fuzzer
|
|
PRIVATE
|
|
${COMMON_PROTO_FUZZ_LIBRARIES}
|
|
clangHandleLLVM
|
|
clangCXXLoopProto
|
|
clangLoopProtoToLLVM
|
|
)
|
|
|
|
endif()
|
|
|
|
add_clang_subdirectory(handle-cxx)
|
|
add_clang_subdirectory(handle-llvm)
|
|
|
|
add_clang_executable(clang-fuzzer
|
|
EXCLUDE_FROM_ALL
|
|
${DUMMY_MAIN}
|
|
ClangFuzzer.cpp
|
|
)
|
|
|
|
target_link_libraries(clang-fuzzer
|
|
PRIVATE
|
|
${LLVM_LIB_FUZZING_ENGINE}
|
|
clangHandleCXX
|
|
)
|
|
|
|
add_clang_executable(clang-objc-fuzzer
|
|
EXCLUDE_FROM_ALL
|
|
${DUMMY_MAIN}
|
|
ClangObjectiveCFuzzer.cpp
|
|
)
|
|
|
|
target_link_libraries(clang-objc-fuzzer
|
|
PRIVATE
|
|
${LLVM_LIB_FUZZING_ENGINE}
|
|
clangHandleCXX
|
|
)
|