alecAbstraction Layer for Escape Codes |
git clone git://git.dimitrijedobrota.com/alec.git |
Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING | |
CMakeLists.txt (2873B)
1 cmake_minimum_required(VERSION 3.14) 2 3 include(cmake/prelude.cmake) 4 5 project( 6 alec 7 VERSION 0.1.15 8 DESCRIPTION "Abstraction Layer for Escape Codes" 9 HOMEPAGE_URL "git://git.dimitrijedobrota.com/alec.git" 10 LANGUAGES CXX 11 ) 12 13 include(cmake/project-is-top-level.cmake) 14 include(cmake/variables.cmake) 15 16 # ---- Build library ---- 17 18 set(PARSER_DIR "${CMAKE_CURRENT_BINARY_DIR}/source") 19 file(MAKE_DIRECTORY ${PARSER_DIR}) 20 21 find_package(FLEX) 22 find_package(BISON) 23 24 set(LEXER_OUT "${PARSER_DIR}/lexer.cpp") 25 set(PARSER_OUT "${PARSER_DIR}/parser.cpp") 26 27 if(CMAKE_BUILD_TYPE STREQUAL "Debug") 28 set(FLAGS "--debug") 29 endif() 30 31 FLEX_TARGET(LEXER source/lexer.l "${LEXER_OUT}" DEFINES_FILE "${PARSER_DIR}/scanner.hpp" COMPILE_FLAGS "${FLAGS}") 32 BISON_TARGET(PARSER source/parser.y "${PARSER_OUT}" DEFINES_FILE "${PARSER_DIR}/parser.hpp" COMPILE_FLAGS "${FLAGS}") 33 ADD_FLEX_BISON_DEPENDENCY(LEXER PARSER) 34 35 set_source_files_properties(${LEXER_OUT} PROPERTIES SKIP_LINTING ON) 36 set_source_files_properties(${PARSER_OUT} PROPERTIES SKIP_LINTING ON) 37 38 add_executable(generator "${LEXER_OUT}" "${PARSER_OUT}" source/generator.cpp) 39 target_include_directories(generator PRIVATE source ${PARSER_DIR}) 40 target_compile_features(generator PUBLIC cxx_std_20) 41 42 set(GENERATE_OUT_BIN "${PROJECT_BINARY_DIR}/bin") 43 set(GENERATE_OUT_INCLUDE "${PROJECT_BINARY_DIR}/include/alec") 44 file(MAKE_DIRECTORY ${GENERATE_OUT_BIN} ${GENERATE_OUT_INCLUDE}) 45 46 set_target_properties(generator PROPERTIES 47 VERSION ${PROJECT_VERSION} 48 SOVERSION ${PROJECT_VERSION_MAJOR} 49 RUNTIME_OUTPUT_DIRECTORY "${GENERATE_OUT_BIN}" 50 ) 51 52 set(RULES_NAME "alec.rules.hpp") 53 set(RULES_FILE "${GENERATE_OUT_INCLUDE}/${RULES_NAME}") 54 configure_file(source/alec.rules.hpp ${RULES_FILE} COPYONLY) 55 56 add_custom_command( 57 OUTPUT ${GENERATE_OUT_INCLUDE}/alec.hpp 58 COMMAND generator ${RULES_FILE} > ${GENERATE_OUT_INCLUDE}/alec.hpp 59 DEPENDS generator source/${RULES_NAME} 60 COMMENT "Generating include file" 61 ) 62 63 # ---- Declare library ---- 64 65 add_library(alec_alec INTERFACE ${GENERATE_OUT_INCLUDE}/alec.hpp) 66 add_library(alec::alec ALIAS alec_alec) 67 68 set_property( 69 TARGET alec_alec PROPERTY 70 EXPORT_NAME alec 71 ) 72 73 target_include_directories( 74 alec_alec ${warning_guard} 75 INTERFACE 76 "\$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>" 77 ) 78 79 target_compile_features(alec_alec INTERFACE cxx_std_20) 80 81 # ---- Install rules ---- 82 83 if(NOT CMAKE_SKIP_INSTALL_RULES) 84 include(cmake/install-rules.cmake) 85 endif() 86 87 # ---- Examples ---- 88 89 if(PROJECT_IS_TOP_LEVEL) 90 option(BUILD_EXAMPLES "Build examples tree." "${alec_DEVELOPER_MODE}") 91 if(BUILD_EXAMPLES) 92 add_subdirectory(example) 93 endif() 94 endif() 95 96 # ---- Developer mode ---- 97 98 if(NOT alec_DEVELOPER_MODE) 99 return() 100 elseif(NOT PROJECT_IS_TOP_LEVEL) 101 message( 102 AUTHOR_WARNING 103 "Developer mode is intended for developers of alec" 104 ) 105 endif() 106 107 include(cmake/dev-mode.cmake)