11cmake_minimum_required (VERSION 3.21 )
22project (gwbasic_modern VERSION 0.1.0 LANGUAGES CXX )
3+ include (cmake/StaticAnalysis.cmake )
4+ include (cmake/Doxygen.cmake )
35set (CMAKE_CXX_STANDARD 20)
46set (CMAKE_CXX_STANDARD_REQUIRED ON )
57set (CMAKE_CXX_EXTENSIONS OFF )
68option (GWBASIC_BUILD_TESTS "Build tests" ON )
9+ option (GWBASIC_BUILD_FUZZERS "Build libFuzzer targets" OFF )
710add_library (gwbasic_core src/token.cpp src/lexer.cpp src/ast.cpp src/parser.cpp src/value.cpp src/runtime.cpp src/interpreter.cpp src/graphics_presenter.cpp )
811target_include_directories (gwbasic_core PUBLIC include )
912if (WIN32 )
@@ -24,4 +27,28 @@ if(GWBASIC_BUILD_TESTS)
2427 add_executable (gwbasic_smoke tests/smoke.cpp )
2528 target_link_libraries (gwbasic_smoke PRIVATE gwbasic_core )
2629 add_test (NAME smoke COMMAND gwbasic_smoke )
30+
31+ add_executable (gwbasic_lexer_tests tests/lexer_tests.cpp )
32+ target_link_libraries (gwbasic_lexer_tests PRIVATE gwbasic_core )
33+ add_test (NAME lexer COMMAND gwbasic_lexer_tests )
34+
35+ add_executable (gwbasic_parser_tests tests/parser_tests.cpp )
36+ target_link_libraries (gwbasic_parser_tests PRIVATE gwbasic_core )
37+ add_test (NAME parser COMMAND gwbasic_parser_tests )
38+
39+ add_executable (gwbasic_compatibility_tests tests/compatibility_tests.cpp )
40+ target_link_libraries (gwbasic_compatibility_tests PRIVATE gwbasic_core )
41+ add_test (NAME compatibility COMMAND gwbasic_compatibility_tests )
42+ endif ()
43+
44+ if (GWBASIC_BUILD_FUZZERS)
45+ if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
46+ message (FATAL_ERROR "GWBASIC_BUILD_FUZZERS requires Clang with libFuzzer support" )
47+ endif ()
48+ target_compile_options (gwbasic_core PRIVATE -fsanitize=fuzzer-no-link,address,undefined )
49+ target_link_options (gwbasic_core PRIVATE -fsanitize=address,undefined )
50+ add_executable (gwbasic_lexer_parser_fuzzer tests/fuzz_lexer_parser.cpp )
51+ target_link_libraries (gwbasic_lexer_parser_fuzzer PRIVATE gwbasic_core )
52+ target_compile_options (gwbasic_lexer_parser_fuzzer PRIVATE -fsanitize=fuzzer,address,undefined )
53+ target_link_options (gwbasic_lexer_parser_fuzzer PRIVATE -fsanitize=fuzzer,address,undefined )
2754endif ()
0 commit comments