cmake_minimum_required(VERSION 3.16) project(fz-lang LANGUAGES C) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_compile_options(-Wall -Wextra -Werror=implicit-function-declaration) if (CMAKE_BUILD_TYPE STREQUAL "Debug") add_compile_options(-fsanitize=address,undefined -g) add_link_options(-fsanitize=address,undefined) endif() include_directories(include) # Compiler add_executable(fzc src/compiler/fzl_token.c src/compiler/fzl_reader.c src/compiler/fzl_parser.c src/compiler/fzl_debug.c src/compiler/fzl_walker.c src/compiler/fzl_writer.c src/compiler/utils/fzl_const_pool.c src/compiler/utils/fzl_symtable.c src/compiler/utils/fzl_linked.c src/compiler/utils/fzl_options.c src/compiler/utils/fzl_ctable.c src/compiler/checkers/fzl_loop_check.c src/compiler/main.c) # Virtual machine add_executable(fz src/vm/fzl_vm.c src/vm/fzl_vm_env.c src/vm/fzl_vm_debug.c src/vm/main.c) # # ========== Tests ========== # enable_testing() file(GLOB TEST_PROGS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "tests/programs/*.fzs") foreach (TEST_FILE IN LISTS TEST_PROGS) get_filename_component(TEST_NAME "${TEST_FILE}" NAME_WE) add_test( NAME "progs_compile_${TEST_NAME}" COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/p_${TEST_NAME}.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_FILE}" ) add_test( NAME "progs_runtime_${TEST_NAME}" COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/p_${TEST_NAME}.fzb" ) if (TEST_NAME MATCHES "neg_") set_tests_properties("progs_compile_${TEST_NAME}" PROPERTIES WILL_FAIL TRUE) set_tests_properties("progs_runtime_${TEST_NAME}" PROPERTIES WILL_FAIL TRUE) endif() if (TEST_NAME MATCHES "neg1_") set_tests_properties("progs_runtime_${TEST_NAME}" PROPERTIES WILL_FAIL TRUE) endif() endforeach()