CMakeLists.txt 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # ArduinoJson - https://arduinojson.org
  2. # Copyright © 2014-2025, Benoit BLANCHON
  3. # MIT License
  4. set(CMAKE_CXX_STANDARD 11)
  5. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  6. if(MSVC)
  7. add_compile_options(-D_CRT_SECURE_NO_WARNINGS)
  8. endif()
  9. function(add_fuzzer name)
  10. set(FUZZER "${name}_fuzzer")
  11. set(REPRODUCER "${FUZZER}_reproducer")
  12. set(CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_corpus")
  13. set(SEED_CORPUS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${name}_seed_corpus")
  14. add_executable("${FUZZER}"
  15. "${name}_fuzzer.cpp"
  16. )
  17. target_link_libraries("${FUZZER}"
  18. ArduinoJson
  19. )
  20. set_target_properties("${FUZZER}"
  21. PROPERTIES
  22. COMPILE_FLAGS "-fprofile-instr-generate -fcoverage-mapping -fsanitize=fuzzer -fno-sanitize-recover=all"
  23. LINK_FLAGS "-fprofile-instr-generate -fcoverage-mapping -fsanitize=fuzzer -fno-sanitize-recover=all"
  24. )
  25. add_test(
  26. NAME "${FUZZER}"
  27. COMMAND "${FUZZER}" "${CORPUS_DIR}" "${SEED_CORPUS_DIR}" -max_total_time=5 -timeout=1
  28. )
  29. set_tests_properties("${FUZZER}"
  30. PROPERTIES
  31. LABELS "Fuzzing"
  32. )
  33. add_executable("${REPRODUCER}"
  34. "${name}_fuzzer.cpp"
  35. reproducer.cpp
  36. )
  37. target_link_libraries("${REPRODUCER}"
  38. ArduinoJson
  39. )
  40. endfunction()
  41. # Needs Clang 6+ to compile
  42. if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6)
  43. if(DEFINED ENV{GITHUB_ACTIONS} AND CMAKE_CXX_COMPILER_VERSION MATCHES "^11\\.")
  44. # Clang 11 fails on GitHub Actions with the following error:
  45. # > ERROR: UndefinedBehaviorSanitizer failed to allocate 0x0 (0) bytes of SetAlternateSignalStack (error code: 22)
  46. # > Sanitizer CHECK failed: /build/llvm-toolchain-11-mnvtwk/llvm-toolchain-11-11.1.0/compiler-rt/lib/sanitizer_common/sanitizer_common.cpp:54 ((0 && "unable to mmap")) != (0) (0, 0)
  47. message(WARNING "Fuzzing is disabled on GitHub Actions to workaround a bug in Clang 11")
  48. return()
  49. endif()
  50. add_fuzzer(json)
  51. add_fuzzer(msgpack)
  52. add_fuzzer(number)
  53. endif()