blob: 5091c5128af04bb5d954979638b1db479aae738c [file]
function(_link_libfuzzer_in_compatibility_mode name)
if (FUZZTEST_COMPATIBILITY_MODE STREQUAL "libfuzzer")
EXECUTE_PROCESS (
COMMAND bash -c "find \${PATH//:/ } -maxdepth 1 -executable -name 'llvm-config*'"
OUTPUT_VARIABLE LLVM_CONFIG OUTPUT_STRIP_TRAILING_WHITESPACE
)
EXECUTE_PROCESS(
COMMAND bash -c "find $(${LLVM_CONFIG} --libdir) \
-name libclang_rt.fuzzer_no_main-x86_64.a"
OUTPUT_VARIABLE FUZZER_NO_MAIN OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT FUZZER_NO_MAIN)
# LLVM_ENABLE_PER_TARGET_RUNTIME_DIR was set to ON when building LLVM.
EXECUTE_PROCESS(
COMMAND bash -c "find / -regex \
\"$(${LLVM_CONFIG} --libdir).*$(${LLVM_CONFIG} --host-target).*libclang_rt.fuzzer_no_main.a\""
OUTPUT_VARIABLE FUZZER_NO_MAIN OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()
target_link_libraries(${name} PRIVATE ${FUZZER_NO_MAIN})
endif ()
endfunction()
get_filename_component(PARENT_DIR ../ ABSOLUTE)
include_directories(${PARENT_DIR})
add_subdirectory(grammars)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=0")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=0")
fuzztest_cc_library(
NAME
fuzztest
HDRS
"fuzztest.h"
DEPS
fuzztest::domain
fuzztest::fuzztest_macros
)
fuzztest_cc_library(
NAME
fuzztest_core
HDRS
"fuzztest_core.h"
DEPS
fuzztest::domain_core
fuzztest::fuzztest_macros
)
fuzztest_cc_library(
NAME
fuzztest_macros
HDRS
"fuzztest_macros.h"
SRCS
"fuzztest_macros.cc"
DEPS
fuzztest::io
fuzztest::registration
fuzztest::registry
)
fuzztest_cc_library(
NAME
fuzztest_gtest_main
SRCS
"fuzztest_gtest_main.cc"
DEPS
absl::flags_parse
absl::strings
fuzztest::init_fuzztest
GTest::gtest
)
fuzztest_cc_library(
NAME
init_fuzztest
HDRS
"init_fuzztest.h"
SRCS
"init_fuzztest.cc"
DEPS
fuzztest::configuration
fuzztest::flag_name
fuzztest::googletest_adaptor
fuzztest::io
fuzztest::logging
fuzztest::registry
fuzztest::runtime
absl::algorithm_container
absl::flags
absl::flags_parse
absl::flags_reflection
absl::flat_hash_set
absl::no_destructor
absl::strings
absl::str_format
absl::time
GTest::gtest
)
fuzztest_cc_library(
NAME
llvm_fuzzer_main
SRCS
"llvm_fuzzer_main.cc"
DEPS
fuzztest::init_fuzztest
absl::flags
absl::flags_parse
GTest::gtest
)
fuzztest_cc_library(
NAME
llvm_fuzzer_wrapper
SRCS
"llvm_fuzzer_wrapper.cc"
DEPS
fuzztest::domain_core
fuzztest::fuzztest
fuzztest::io
fuzztest::llvm_fuzzer_main
absl::flags
absl::log
absl::random_random
absl::random_bit_gen_ref
absl::strings
absl::string_view
re2::re2
)
################################################################################
# Internal
################################################################################
# TODO(lszekeres): Move these under internal/CMakeLists.txt
fuzztest_cc_library(
NAME
absl_helpers
HDRS
"internal/domains/absl_helpers.h"
DEPS
fuzztest::logging
absl::time
)
fuzztest_cc_library(
NAME
any
HDRS
"internal/any.h"
DEPS
fuzztest::logging
fuzztest::meta
)
fuzztest_cc_test(
NAME
any_test
SRCS
"internal/any_test.cc"
DEPS
fuzztest::any
absl::strings
GTest::gmock_main
)
# TODO(lszekeres): centipede_adaptor
fuzztest_cc_library(
NAME
compatibility_mode
HDRS
"internal/compatibility_mode.h"
SRCS
"internal/compatibility_mode.cc"
DEPS
fuzztest::domain_core
fuzztest::fixture_driver
fuzztest::logging
fuzztest::runtime
absl::random_distributions
absl::strings
absl::str_format
absl::time
)
_link_libfuzzer_in_compatibility_mode(fuzztest_compatibility_mode)
fuzztest_cc_library(
NAME
configuration
HDRS
"internal/configuration.h"
SRCS
"internal/configuration.cc"
DEPS
absl::check
absl::status
absl::statusor
absl::strings
absl::string_view
absl::time
)
fuzztest_cc_test(
NAME
configuration_test
SRCS
"internal/configuration_test.cc"
DEPS
fuzztest::configuration
absl::statusor
absl::time
GTest::gmock_main
)
fuzztest_cc_library(
NAME
corpus_database
HDRS
"internal/corpus_database.h"
SRCS
"internal/corpus_database.cc"
DEPS
fuzztest::configuration
fuzztest::io
absl::strings
absl::string_view
)
fuzztest_cc_library(
NAME
coverage
HDRS
"internal/coverage.h"
SRCS
"internal/coverage.cc"
DEPS
fuzztest::flag_name
fuzztest::logging
fuzztest::table_of_recent_compares
absl::core_headers
absl::str_format
absl::span
)
fuzztest_cc_library(
NAME
domain
HDRS
"domain.h"
"internal/domains/in_grammar_impl.h"
"internal/domains/in_regexp_impl.h"
"internal/domains/protobuf_domain_impl.h"
SRCS
"internal/domains/in_grammar_impl.cc"
DEPS
fuzztest::any
fuzztest::domain_core
fuzztest::logging
fuzztest::meta
fuzztest::regexp_dfa
fuzztest::serialization
fuzztest::status
fuzztest::type_support
absl::core_headers
absl::flat_hash_map
absl::flat_hash_set
absl::random_random
absl::random_bit_gen_ref
absl::random_distributions
absl::status
absl::statusor
absl::strings
absl::synchronization
absl::span
)
fuzztest_cc_library(
NAME
domain_core
HDRS
"domain_core.h"
"internal/domains/aggregate_of_impl.h"
"internal/domains/arbitrary_impl.h"
"internal/domains/bit_flag_combination_of_impl.h"
"internal/domains/container_mutation_helpers.h"
"internal/domains/container_of_impl.h"
"internal/domains/domain.h"
"internal/domains/domain_base.h"
"internal/domains/domain_type_erasure.h"
"internal/domains/element_of_impl.h"
"internal/domains/filter_impl.h"
"internal/domains/flat_map_impl.h"
"internal/domains/in_range_impl.h"
"internal/domains/map_impl.h"
"internal/domains/one_of_impl.h"
"internal/domains/optional_of_impl.h"
"internal/domains/overlap_of_impl.h"
"internal/domains/serialization_helpers.h"
"internal/domains/smart_pointer_of_impl.h"
"internal/domains/special_values.h"
"internal/domains/unique_elements_container_of_impl.h"
"internal/domains/value_mutation_helpers.h"
"internal/domains/variant_of_impl.h"
SRCS
"internal/domains/domain_base.cc"
DEPS
fuzztest::absl_helpers
fuzztest::any
fuzztest::coverage
fuzztest::logging
fuzztest::meta
fuzztest::printer
fuzztest::seed_seq
fuzztest::serialization
fuzztest::status
fuzztest::table_of_recent_compares
fuzztest::type_support
absl::flat_hash_map
absl::flat_hash_set
absl::function_ref
absl::bits
absl::int128
absl::random_random
absl::random_bit_gen_ref
absl::random_distributions
absl::status
absl::strings
absl::str_format
absl::time
absl::span
)
fuzztest_cc_library(
NAME
fixture_driver
HDRS
"internal/fixture_driver.h"
SRCS
"internal/fixture_driver.cc"
DEPS
fuzztest::any
fuzztest::domain_core
fuzztest::logging
fuzztest::meta
fuzztest::printer
fuzztest::registration
fuzztest::type_support
absl::status
absl::str_format
absl::span
)
fuzztest_cc_test(
NAME
fixture_driver_test
SRCS
"internal/fixture_driver_test.cc"
DEPS
fuzztest::any
fuzztest::domain_core
fuzztest::fixture_driver
fuzztest::logging
fuzztest::registration
absl::span
GTest::gmock_main
)
fuzztest_cc_library(
NAME
flag_name
HDRS
"internal/flag_name.h"
)
fuzztest_cc_library(
NAME
googletest_adaptor
HDRS
"internal/googletest_adaptor.h"
SRCS
"internal/googletest_adaptor.cc"
DEPS
fuzztest::configuration
fuzztest::corpus_database
fuzztest::flag_name
fuzztest::io
fuzztest::registry
fuzztest::runtime
absl::strings
absl::string_view
absl::str_format
GTest::gtest
)
fuzztest_cc_library(
NAME
googletest_fixture_adapter
HDRS
"googletest_fixture_adapter.h"
DEPS
fuzztest::fixture_driver
GTest::gtest
)
fuzztest_cc_library(
NAME
io
HDRS
"internal/io.h"
SRCS
"internal/io.cc"
DEPS
fuzztest::blob_file
fuzztest::defs
fuzztest::logging
fuzztest::remote_file
absl::function_ref
absl::hash
absl::status
absl::str_format
absl::string_view
absl::span
)
fuzztest_cc_test(
NAME
io_test
SRCS
"internal/io_test.cc"
DEPS
fuzztest::blob_file
fuzztest::defs
fuzztest::fuzztest_core
fuzztest::io
absl::check
absl::status
absl::strings
GTest::gmock_main
)
fuzztest_cc_library(
NAME
logging
HDRS
"internal/logging.h"
SRCS
"internal/logging.cc"
DEPS
absl::strings
)
fuzztest_cc_library(
NAME
meta
HDRS
"internal/meta.h"
DEPS
absl::int128
)
fuzztest_cc_library(
NAME
printer
HDRS
"internal/printer.h"
DEPS
fuzztest::meta
absl::str_format
)
fuzztest_cc_library(
NAME
regexp_dfa
HDRS
"internal/domains/regexp_dfa.h"
SRCS
"internal/domains/regexp_dfa.cc"
DEPS
fuzztest::logging
absl::flat_hash_map
absl::random_bit_gen_ref
absl::random_distributions
absl::status
absl::statusor
absl::strings
re2::re2
)
fuzztest_cc_library(
NAME
registration
HDRS
"internal/registration.h"
DEPS
fuzztest::domain_core
fuzztest::meta
fuzztest::printer
fuzztest::type_support
absl::any_invocable
absl::status
absl::str_format
absl::span
)
fuzztest_cc_library(
NAME
registry
HDRS
"internal/registry.h"
SRCS
"internal/registry.cc"
DEPS
fuzztest::compatibility_mode
fuzztest::fixture_driver
fuzztest::registration
fuzztest::runtime
absl::flat_hash_map
absl::function_ref
absl::string_view
)
fuzztest_cc_library(
NAME
runtime
HDRS
"internal/runtime.h"
SRCS
"internal/runtime.cc"
DEPS
fuzztest::configuration
fuzztest::corpus_database
fuzztest::coverage
fuzztest::domain_core
fuzztest::fixture_driver
fuzztest::flag_name
fuzztest::io
fuzztest::logging
fuzztest::printer
fuzztest::registration
fuzztest::seed_seq
fuzztest::serialization
fuzztest::status
absl::any_invocable
absl::bind_front
absl::function_ref
absl::check
absl::random_random
absl::random_bit_gen_ref
absl::random_distributions
absl::status
absl::statusor
absl::strings
absl::str_format
absl::time
absl::span
)
fuzztest_cc_test(
NAME
runtime_test
SRCS
"internal/runtime_test.cc"
DEPS
fuzztest::configuration
fuzztest::domain_core
fuzztest::flag_name
fuzztest::runtime
test_protobuf
absl::time
absl::flags
GTest::gmock_main
)
fuzztest_cc_library(
NAME
seed_seq
HDRS
"internal/seed_seq.h"
SRCS
"internal/seed_seq.cc"
DEPS
fuzztest::logging
absl::random_random
absl::strings
absl::span
)
fuzztest_cc_test(
NAME
seed_seq_test
SRCS
"internal/seed_seq_test.cc"
DEPS
fuzztest::seed_seq
absl::strings
absl::span
GTest::gmock_main
)
fuzztest_cc_library(
NAME
serialization
HDRS
"internal/serialization.h"
SRCS
"internal/serialization.cc"
DEPS
fuzztest::meta
absl::int128
absl::strings
absl::str_format
absl::span
)
fuzztest_cc_test(
NAME
serialization_test
SRCS
"internal/serialization_test.cc"
DEPS
fuzztest::serialization
test_protobuf
GTest::gmock_main
protobuf::libprotobuf
)
fuzztest_cc_library(
NAME
status
HDRS
"internal/status.h"
SRCS
"internal/status.cc"
DEPS
absl::status
absl::strings
absl::cord
)
fuzztest_cc_library(
NAME
subprocess
HDRS
"internal/subprocess.h"
SRCS
"internal/subprocess.cc"
DEPS
fuzztest::logging
absl::flat_hash_map
absl::strings
absl::time
)
fuzztest_cc_test(
NAME
subprocess_test
SRCS
"internal/subprocess_test.cc"
DEPS
fuzztest::subprocess
absl::strings
absl::time
GTest::gmock_main
)
fuzztest_cc_library(
NAME
table_of_recent_compares
HDRS
"internal/table_of_recent_compares.h"
DEPS
fuzztest::type_support
absl::flat_hash_set
absl::random_bit_gen_ref
absl::random_distributions
)
fuzztest_cc_test(
NAME
table_of_recent_compares_test
SRCS
"internal/table_of_recent_compares_test.cc"
DEPS
fuzztest::table_of_recent_compares
absl::random_random
GTest::gmock_main
)
# TODO(lszekeres): Support fuzztest_cc_proto_library.
if (FUZZTEST_BUILD_TESTING)
include_directories(${PROTOBUF_INCLUDE_DIR})
add_library(
test_protobuf
OBJECT
"${CMAKE_CURRENT_LIST_DIR}/internal/test_protobuf.proto"
)
target_link_libraries(
test_protobuf
PUBLIC
protobuf::libprotobuf
)
# The output dir of `test_protobuf` might not be created by `protobuf_generate`.
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/internal)
protobuf_generate(
TARGET
test_protobuf
IMPORT_DIRS
${CMAKE_CURRENT_LIST_DIR}/internal
PROTOC_OUT_DIR
${CMAKE_CURRENT_BINARY_DIR}/internal
)
target_include_directories(
test_protobuf
PUBLIC
"${CMAKE_CURRENT_BINARY_DIR}/.."
)
endif ()
fuzztest_cc_library(
NAME
type_support
HDRS
"internal/type_support.h"
SRCS
"internal/type_support.cc"
DEPS
fuzztest::absl_helpers
fuzztest::meta
fuzztest::printer
absl::function_ref
absl::symbolize
absl::int128
absl::strings
absl::str_format
absl::time
)
fuzztest_cc_test(
NAME
type_support_test
SRCS
"internal/type_support_test.cc"
DEPS
fuzztest::domain
fuzztest::meta
fuzztest::printer
test_protobuf
fuzztest::type_support
absl::int128
absl::strings
absl::str_format
absl::time
GTest::gmock_main
)