xref: /openbsd-src/gnu/llvm/lldb/tools/lldb-fuzzer/lldb-expression-fuzzer/CMakeLists.txt (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1*f6aab3d8Srobertif(CLANG_ENABLE_PROTO_FUZZER)
2*f6aab3d8Srobert  set(LLVM_LINK_COMPONENTS
3*f6aab3d8Srobert    Support
4*f6aab3d8Srobert    )
5*f6aab3d8Srobert
6*f6aab3d8Srobert  add_llvm_fuzzer(lldb-expression-fuzzer
7*f6aab3d8Srobert    EXCLUDE_FROM_ALL
8*f6aab3d8Srobert    lldb-expression-fuzzer.cpp
9*f6aab3d8Srobert    )
10*f6aab3d8Srobert
11*f6aab3d8Srobert  if(TARGET lldb-expression-fuzzer)
12*f6aab3d8Srobert    target_include_directories(lldb-expression-fuzzer PRIVATE ..)
13*f6aab3d8Srobert    find_package(Protobuf REQUIRED)
14*f6aab3d8Srobert    add_definitions(-DGOOGLE_PROTOBUF_NO_RTTI)
15*f6aab3d8Srobert    include_directories(${PROTOBUF_INCLUDE_DIRS})
16*f6aab3d8Srobert    include_directories(${CMAKE_CURRENT_BINARY_DIR}/../../../../clang/tools/clang-fuzzer PRIVATE ..)
17*f6aab3d8Srobert    include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../../clang/tools/clang-fuzzer)
18*f6aab3d8Srobert
19*f6aab3d8Srobert    set(CLANG_CMAKE_MODULE_PATH
20*f6aab3d8Srobert      ${CMAKE_CURRENT_SOURCE_DIR}/../../../../clang/cmake/modules)
21*f6aab3d8Srobert
22*f6aab3d8Srobert    set(CMAKE_MODULE_PATH
23*f6aab3d8Srobert      ${CMAKE_MODULE_PATH}
24*f6aab3d8Srobert      ${CLANG_CMAKE_MODULE_PATH})
25*f6aab3d8Srobert
26*f6aab3d8Srobert
27*f6aab3d8Srobert    set (PBM_PREFIX lldb_protobuf_mutator)
28*f6aab3d8Srobert    include(ProtobufMutator)
29*f6aab3d8Srobert    include_directories(${ProtobufMutator_INCLUDE_DIRS})
30*f6aab3d8Srobert
31*f6aab3d8Srobert    target_link_libraries(lldb-expression-fuzzer
32*f6aab3d8Srobert      PRIVATE
33*f6aab3d8Srobert      ${ProtobufMutator_LIBRARIES}
34*f6aab3d8Srobert      ${LLVM_LIB_FUZZING_ENGINE}
35*f6aab3d8Srobert      clangHandleCXX
36*f6aab3d8Srobert      clangCXXProto
37*f6aab3d8Srobert      clangProtoToCXX
38*f6aab3d8Srobert      liblldb
39*f6aab3d8Srobert      )
40*f6aab3d8Srobert
41*f6aab3d8Srobert    add_custom_command(TARGET lldb-expression-fuzzer PRE_BUILD
42*f6aab3d8Srobert      COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/fuzzer-artifacts/expression-artifacts
43*f6aab3d8Srobert      # Create and compile a simple C program using the command line. This is
44*f6aab3d8Srobert      # needed because LLDB's expression evaluator needs a legitmate target
45*f6aab3d8Srobert      # instead of a dummy target
46*f6aab3d8Srobert      COMMAND echo 'int main (int argc, char** argv) { return 0\; }' | clang -o main.out -xc -
47*f6aab3d8Srobert      )
48*f6aab3d8Srobert
49*f6aab3d8Srobert    # Create a directory for storing the fuzzer's artifacts and run the fuzzer with arguments that will
50*f6aab3d8Srobert    # not attempt to reduce the size of the inputs being generated
51*f6aab3d8Srobert    # Also set the executable that's created above as an environment variable for the
52*f6aab3d8Srobert    # source code to use
53*f6aab3d8Srobert    add_custom_target(fuzz-lldb-expression
54*f6aab3d8Srobert      COMMENT "Running the LLDB expression evaluator fuzzer..."
55*f6aab3d8Srobert      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/fuzzer-artifacts/expression-artifacts
56*f6aab3d8Srobert      COMMAND ${CMAKE_COMMAND} -E env LLDB_FUZZER_TARGET=${CMAKE_CURRENT_BINARY_DIR}/main.out $<TARGET_FILE:lldb-expression-fuzzer> -artifact_prefix=expression- -reduce_inputs=0
57*f6aab3d8Srobert      USES_TERMINAL
58*f6aab3d8Srobert      )
59*f6aab3d8Srobert  endif()
60*f6aab3d8Srobertendif()
61