find_package(FLEX REQUIRED) find_package(BISON REQUIRED) set(PSLANG_LEXER_RULES_FILE "${CMAKE_CURRENT_SOURCE_DIR}/rules/pslang.l") set(PSLANG_PARSER_RULES_FILE "${CMAKE_CURRENT_SOURCE_DIR}/rules/pslang.y") set(PSLANG_LEXER_HEADER_FILE "${CMAKE_CURRENT_BINARY_DIR}/generated/gen_lexer.hpp") set(PSLANG_LEXER_SOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/generated/gen_lexer.cpp") set(PSLANG_PARSER_HEADER_FILE "${CMAKE_CURRENT_BINARY_DIR}/generated/gen_parser.hpp") set(PSLANG_PARSER_SOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/generated/gen_parser.cpp") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated") flex_target( generate-pslang-lexer ${PSLANG_LEXER_RULES_FILE} ${PSLANG_LEXER_SOURCE_FILE} DEFINES_FILE ${PSLANG_LEXER_HEADER_FILE} ) bison_target( generate-pslang-parser ${PSLANG_PARSER_RULES_FILE} ${PSLANG_PARSER_SOURCE_FILE} DEFINES_FILE ${PSLANG_PARSER_HEADER_FILE} COMPILE_FLAGS -Wcounterexamples ) add_flex_bison_dependency(generate-pslang-lexer generate-pslang-parser) set(PSLANG_PARSER_RULE_FILES ${PSLANG_LEXER_RULES_FILE} ${PSLANG_PARSER_RULES_FILE} ) set(PSLANG_PARSER_GENERATED_FILES ${PSLANG_LEXER_HEADER_FILE} ${PSLANG_LEXER_SOURCE_FILE} ${PSLANG_PARSER_HEADER_FILE} ${PSLANG_PARSER_SOURCE_FILE} ) file(GLOB_RECURSE PSLANG_PARSER_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp") file(GLOB_RECURSE PSLANG_PARSER_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") add_library(pslang-parser STATIC ${PSLANG_PARSER_HEADERS} ${PSLANG_PARSER_SOURCES} ${PSLANG_PARSER_RULE_FILES} ${PSLANG_PARSER_GENERATED_FILES}) target_include_directories(pslang-parser PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" "${CMAKE_CURRENT_BINARY_DIR}/generated") target_link_libraries(pslang-parser pslang-ast)