Skip to content

Commit

Permalink
fix: prepare static harnesses
Browse files Browse the repository at this point in the history
  • Loading branch information
cktii committed Feb 4, 2025
1 parent 0700e52 commit 3e537db
Showing 1 changed file with 64 additions and 25 deletions.
89 changes: 64 additions & 25 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ project(behaviortree_cpp VERSION 4.6.2 LANGUAGES C CXX)
option(ENABLE_FUZZING "Enable fuzzing builds" OFF)
option(USE_AFLPLUSPLUS "Use AFL++ instead of libFuzzer" OFF)
option(ENABLE_DEBUG "Enable debug build with full symbols" OFF)
option(FORCE_STATIC_LINKING "Force static linking of all dependencies" OFF)

set(BASE_FLAGS "")

Expand All @@ -21,6 +22,25 @@ endif()

# Fuzzing configuration
if(ENABLE_FUZZING)
# When building for fuzzing, we still want static library by default
set(BTCPP_SHARED_LIBS OFF CACHE BOOL "Build static library for fuzzing" FORCE)

# Only apply static linking settings if explicitly requested
if(FORCE_STATIC_LINKING)
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(BUILD_SHARED_LIBS OFF)

# Force static linking for dependencies
if(BTCPP_GROOT_INTERFACE)
set(ZeroMQ_USE_STATIC_LIBS ON)
set(ZEROMQ_STATIC_LIBRARY ON)
endif()

if(BTCPP_SQLITE_LOGGING)
set(SQLite3_USE_STATIC_LIBS ON)
endif()
endif()

if(USE_AFLPLUSPLUS)
list(APPEND BASE_FLAGS -O3)
else()
Expand All @@ -46,28 +66,43 @@ if(ENABLE_FUZZING)
add_link_options(${BASE_FLAGS})

function(apply_fuzzing_flags target)
if(USE_AFLPLUSPLUS)
# AFL++ specific flags
target_compile_options(${target} PRIVATE
target_compile_options(${target} PRIVATE
${BASE_FLAGS}
${SANITIZER_FLAGS}
)

if(FORCE_STATIC_LINKING)
if(USE_AFLPLUSPLUS)
target_link_options(${target} PRIVATE
${BASE_FLAGS}
${SANITIZER_FLAGS}
-static-libstdc++
-static-libgcc
-fsanitize=fuzzer
)
target_link_options(${target} PRIVATE
else()
target_link_options(${target} PRIVATE
${BASE_FLAGS}
-fsanitize=fuzzer,address,undefined
-fsanitize=fuzzer
${SANITIZER_FLAGS}
-static-libstdc++
-static-libgcc
)
endif()
else()
# libFuzzer specific flags
target_compile_options(${target} PRIVATE
if(USE_AFLPLUSPLUS)
target_link_options(${target} PRIVATE
${BASE_FLAGS}
-fsanitize=fuzzer
${SANITIZER_FLAGS}
-fsanitize=fuzzer
)
target_link_options(${target} PRIVATE
else()
target_link_options(${target} PRIVATE
${BASE_FLAGS}
-fsanitize=fuzzer
${SANITIZER_FLAGS}
)
endif()
endif()
endfunction()

Expand Down Expand Up @@ -277,27 +312,31 @@ add_library(BT::${BTCPP_LIBRARY} ALIAS ${BTCPP_LIBRARY})

# Add fuzzing targets
if(ENABLE_FUZZING)
add_executable(bt_fuzzer fuzzing/bt_fuzzer.cpp)
apply_fuzzing_flags(bt_fuzzer)
target_link_libraries(bt_fuzzer PRIVATE ${BTCPP_LIBRARY} ${BTCPP_EXTRA_LIBRARIES})

add_executable(script_fuzzer fuzzing/script_fuzzer.cpp)
apply_fuzzing_flags(script_fuzzer)
target_link_libraries(script_fuzzer PRIVATE ${BTCPP_LIBRARY} ${BTCPP_EXTRA_LIBRARIES})

add_executable(bb_fuzzer fuzzing/bb_fuzzer.cpp)
apply_fuzzing_flags(bb_fuzzer)
target_link_libraries(bb_fuzzer PRIVATE ${BTCPP_LIBRARY} ${BTCPP_EXTRA_LIBRARIES})

foreach(fuzzer bt_fuzzer script_fuzzer bb_fuzzer)
add_executable(${fuzzer} fuzzing/${fuzzer}.cpp)
apply_fuzzing_flags(${fuzzer})

if(FORCE_STATIC_LINKING)
target_link_libraries(${fuzzer} PRIVATE
-static-libstdc++
-static-libgcc
${BTCPP_LIBRARY}
${BTCPP_EXTRA_LIBRARIES}
)
else()
target_link_libraries(${fuzzer} PRIVATE
${BTCPP_LIBRARY}
${BTCPP_EXTRA_LIBRARIES}
)
endif()

set(CORPUS_DIR ${CMAKE_BINARY_DIR}/corpus/${fuzzer})
file(MAKE_DIRECTORY ${CORPUS_DIR})
endforeach()

file(GLOB BT_CORPUS_FILES "fuzzing/corpus/bt_fuzzer/*")
file(GLOB SCRIPT_CORPUS_FILES "fuzzing/corpus/script_fuzzer/*")
file(GLOB BB_CORPUS_FILES "fuzzing/corpus/bb_fuzzer/*")

file(GLOB BT_CORPUS_FILES "${CMAKE_SOURCE_DIR}/fuzzing/corpus/bt_corpus/*")
file(GLOB SCRIPT_CORPUS_FILES "${CMAKE_SOURCE_DIR}/fuzzing/corpus/script_corpus/*")
file(GLOB BB_CORPUS_FILES "${CMAKE_SOURCE_DIR}/fuzzing/corpus/bb_corpus/*")
if(BT_CORPUS_FILES)
file(COPY ${BT_CORPUS_FILES} DESTINATION ${CMAKE_BINARY_DIR}/corpus/bt_fuzzer)
endif()
Expand Down

0 comments on commit 3e537db

Please sign in to comment.