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/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) # # ========== Compilation tests ========== # enable_testing() add_test( NAME compile_hw COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/hw.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/hw.fzs" ) add_test( NAME compile_print_empty COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/print_empty.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/print_empty.fzs" ) add_test( NAME compile_problematic_hw COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/problematic_hw.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/problematic_hw.fzs" ) add_test( NAME compile_base_math COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/base_math.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/base_math.fzs" ) add_test( NAME compile_variables COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/variables.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/variables.fzs" ) add_test( NAME compile_conditions COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/conditions.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/conditions.fzs" ) add_test( NAME compile_fn COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/fn.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/fn.fzs" ) add_test( NAME compile_comment COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/comment.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/comment.fzs" ) add_test( NAME compile_class COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/class.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/class.fzs" ) add_test( NAME compile_raii COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/raii.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/raii.fzs" ) add_test( NAME compile_borrow COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/borrow.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/borrow.fzs" ) add_test( NAME compile_hard_1 COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/hard-1.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/exl/hard-1.fzs" ) set_tests_properties(compile_problematic_hw PROPERTIES WILL_FAIL TRUE) # # ========== Runtime tests ========== # add_test( NAME runtime_hw COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/hw.fzb" ) add_test( NAME runtime_print_empty COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/print_empty.fzb" ) add_test( NAME runtime_base_math COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/base_math.fzb" ) add_test( NAME runtime_variables COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/variables.fzb" ) add_test( NAME runtime_conditions COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/conditions.fzb" ) add_test( NAME runtime_fn COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/fn.fzb" ) add_test( NAME runtime_comment COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/comment.fzb" ) add_test( NAME runtime_class COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/class.fzb" ) add_test( NAME runtime_raii COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/raii.fzb" ) add_test( NAME runtime_borrow COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/borrow.fzb" ) add_test( NAME runtime_hard_1 COMMAND fz "${CMAKE_CURRENT_BINARY_DIR}/hard-1.fzb" )