| cmake_minimum_required(VERSION 2.8.12) |
| |
| project("libtatumparse") |
| |
| #Flex and Bison are used to generate the parser |
| find_package(BISON REQUIRED 3.0) |
| find_package(FLEX REQUIRED) |
| |
| file(GLOB_RECURSE LIB_SOURCES */tatumparse*.cpp) |
| file(GLOB_RECURSE LIB_HEADERS tatumparse.hpp tatumparse/*.hpp) |
| |
| #Include directories |
| set(LIB_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}) |
| |
| #Find the flex and bison input files |
| file(GLOB LEXER_SOURCES */tatumparse.l) |
| file(GLOB PARSER_SOURCES */tatumparse.y) |
| |
| #Make the flex and bison targets |
| flex_target(TatumLexer ${LEXER_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/tatumparse_lexer.gen.cpp |
| COMPILE_FLAGS --header-file=${CMAKE_CURRENT_BINARY_DIR}/tatumparse_lexer.gen.h) |
| bison_target(TatumParser ${PARSER_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/tatumparse_parser.gen.cpp) |
| add_flex_bison_dependency(TatumLexer TatumParser) |
| #Apply suppression flags to the relevant files, must come after flex/bision |
| #targets for output vars to be defined |
| set_source_files_properties(${FLEX_vpr_timing_graph_lexer_OUTPUTS} |
| ${BISON_vpr_timing_graph_parser_OUTPUTS} |
| PROPERTIES COMPILE_FLAGS "${FLEX_BISON_WARN_SUPPRESS_FLAGS}") |
| |
| |
| #Treat .c as CXX |
| set_source_files_properties(${LIB_SOURCES} ${FLEX_TatumLexer_OUTPUTS} ${BISON_TatumParser_OUTPUT_SOURCE} PROPERTIES LANGUAGE CXX) |
| |
| #Suppress attribute warnings from bison header |
| include(CheckCXXCompilerFlag) |
| CHECK_CXX_COMPILER_FLAG("-Wno-attributes" COMPILER_SUPPORTS_-Wno-attributes) |
| if(COMPILER_SUPPORTS_-Wno-attributes) |
| add_compile_options("-Wno-attributes") |
| endif() |
| |
| #Suppress warnings in Flex/Bison generated files |
| if(FLEX_BISON_WARN_SUPPRESS_FLAGS) |
| add_compile_options(${FLEX_BISON_WARN_SUPPRESS_FLAGS}) |
| endif() |
| |
| #Create the library |
| add_library(libtatumparse STATIC |
| ${LIB_HEADERS} |
| ${LIB_SOURCES} |
| ${FLEX_TatumLexer_OUTPUTS} |
| ${BISON_TatumParser_OUTPUT_SOURCE}) |
| |
| #Need binary dir for flex/bison generated headers |
| target_include_directories(libtatumparse PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) |
| target_include_directories(libtatumparse PUBLIC ${LIB_INCLUDE_DIRS}) |
| set_target_properties(libtatumparse PROPERTIES PREFIX "") #Avoid extra 'lib' prefix |