cmake_minimum_required(VERSION 3.22) project(BFBCompiler C) add_custom_command( OUTPUT ../src/frontend/syntactic-analysis/bison-parser.c ../src/frontend/syntactic-analysis/bison-parser.h COMMAND bison -d ../src/frontend/syntactic-analysis/bison-grammar.y -o ../src/frontend/syntactic-analysis/bison-parser.c) # COMMAND bison -Wcounterexamples -d ../src/frontend/syntactic-analysis/bison-grammar.y -o ../src/frontend/syntactic-analysis/bison-parser.c) # COMMAND bison -t -d ../src/frontend/syntactic-analysis/bison-grammar.y -o ../src/frontend/syntactic-analysis/bison-parser.c) if (CMAKE_C_COMPILER_ID STREQUAL "GNU") add_compile_options(-static-libgcc) add_compile_options(-std=gnu99) add_compile_options(-O3) add_compile_options(-Wall) add_compile_options(-Wextra) add_compile_options(-g) add_compile_options(-Wno-implicit-fallthrough) add_compile_options(-pedantic) add_compile_options(-pedantic-errors) add_custom_command( OUTPUT ../src/frontend/lexical-analysis/flex-scanner.c COMMAND flex -o ../src/frontend/lexical-analysis/flex-scanner.c ../src/frontend/lexical-analysis/flex-patterns.l # COMMAND flex --debug -o ../src/frontend/lexical-analysis/flex-scanner.c ../src/frontend/lexical-analysis/flex-patterns.l DEPENDS ../src/frontend/syntactic-analysis/bison-parser.c ../src/frontend/syntactic-analysis/bison-parser.h) elseif (CMAKE_C_COMPILER_ID STREQUAL "MSVC") add_custom_command( OUTPUT ../src/frontend/lexical-analysis/flex-scanner.c COMMAND flex --wincompat -o ../src/frontend/lexical-analysis/flex-scanner.c ../src/frontend/lexical-analysis/flex-patterns.l DEPENDS ../src/frontend/syntactic-analysis/bison-parser.c ../src/frontend/syntactic-analysis/bison-parser.h) else () message(NOTICE "El compilador de C es desconocido.") message(NOTICE "No se generarĂ¡ el scanner con Flex.") endif () add_executable(BFBCompiler src/main.c src/backend/semantic-analysis/analyzer.c src/backend/code-generation/generator.c src/backend/free-tree/free-tree.c src/backend/support/logger.c src/frontend/lexical-analysis/flex-actions.c src/frontend/lexical-analysis/flex-scanner.c src/frontend/syntactic-analysis/bison-actions.c src/frontend/syntactic-analysis/bison-parser.c) file(GLOB_RECURSE correct_use_cases "doc/examples/correct/use-case-*.b" ) file(GLOB_RECURSE incorrect_use_cases "doc/examples/incorrect/use-case-*.b" ) enable_testing() foreach(test ${correct_use_cases}) add_test(NAME ${test} COMMAND ${CMAKE_BINARY_DIR}/BFBCompiler ${test} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) endforeach() foreach(test ${incorrect_use_cases}) add_test(NAME ${test} COMMAND ${CMAKE_BINARY_DIR}/BFBCompiler ${test} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) set_tests_properties(${test} PROPERTIES WILL_FAIL TRUE) endforeach()