73 lines
3.2 KiB
CMake
73 lines
3.2 KiB
CMake
cmake_minimum_required(VERSION 3.9)
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
|
|
include(HeadersToIncludeDirs)
|
|
|
|
project("libblifparse")
|
|
|
|
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
|
#Only set compiler settings if we are not a sub-project
|
|
set(WARN_FLAGS "-Wall -Wextra -Wpedantic -Wcast-qual -Wcast-align -Wshadow -Wformat=2 -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wredundant-decls -Wswitch-default -Wundef -Wunused-variable -Wdisabled-optimization -Wnoexcept -Woverloaded-virtual -Wctor-dtor-privacy -Wnon-virtual-dtor")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11 ${WARN_FLAGS}")
|
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize=leak -fsanitize=undefined")
|
|
set(FLEX_BISON_WARN_SUPPRESS_FLAGS "-Wno-switch-default -Wno-unused-parameter -Wno-missing-declarations")
|
|
endif()
|
|
|
|
#Flex and Bison are used to generate the parser
|
|
find_package(BISON REQUIRED 3.0)
|
|
find_package(FLEX REQUIRED)
|
|
|
|
file(GLOB_RECURSE LIB_SOURCES src/blif*.cpp)
|
|
file(GLOB_RECURSE LIB_HEADERS src/blif*.hpp)
|
|
headers_to_include_dirs(LIB_HEADERS LIB_INCLUDE_DIRS)
|
|
|
|
#Find the flex and bison input files
|
|
file(GLOB_RECURSE LEXER_SOURCES src/blif*.l)
|
|
file(GLOB_RECURSE PARSER_SOURCES src/blif*.y)
|
|
|
|
#Make the flex and bison targets
|
|
flex_target(BlifLexer ${LEXER_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/blif_lexer.gen.cpp
|
|
COMPILE_FLAGS --header-file=${CMAKE_CURRENT_BINARY_DIR}/blif_lexer.gen.hpp)
|
|
bison_target(BlifParser ${PARSER_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/blif_parser.gen.cpp)
|
|
add_flex_bison_dependency(BlifLexer BlifParser)
|
|
|
|
#Suppress warnings in Flex/Bison generated files
|
|
if(FLEX_BISON_WARN_SUPPRESS_FLAGS)
|
|
set_source_files_properties(${FLEX_BlifLexer_OUTPUTS} ${BISON_BlifParser_OUTPUT_SOURCE}
|
|
PROPERTIES COMPILE_FLAGS ${FLEX_BISON_WARN_SUPPRESS_FLAGS})
|
|
endif()
|
|
|
|
#Create the library
|
|
add_library(libblifparse STATIC
|
|
${LIB_HEADERS}
|
|
${LIB_SOURCES}
|
|
${FLEX_BlifLexer_OUTPUTS}
|
|
${BISON_BlifParser_OUTPUT_SOURCE})
|
|
target_include_directories(libblifparse PUBLIC ${LIB_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR})
|
|
set_target_properties(libblifparse PROPERTIES PREFIX "") #Avoid extra 'lib' prefix
|
|
|
|
#Create the test executable
|
|
add_executable(blifparse_test src/main.cpp)
|
|
target_link_libraries(blifparse_test libblifparse)
|
|
|
|
#Suppress IPO link warnings
|
|
get_target_property(USES_IPO blifparse_test INTERPROCEDURAL_OPTIMIZATION)
|
|
if (USES_IPO)
|
|
set(IPO_LINK_WARN_FLAGS_TO_CHECK "-Wno-null-dereference")
|
|
foreach(flag ${IPO_LINK_WARN_FLAGS_TO_CHECK})
|
|
CHECK_CXX_COMPILER_FLAG(${flag} CXX_COMPILER_SUPPORTS_${flag})
|
|
if(CXX_COMPILER_SUPPORTS_${flag})
|
|
#Flag supported, so enable it
|
|
set_target_properties(blifparse_test PROPERTIES LINK_FLAGS ${flag})
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
|
#Add the tests if we are the root project
|
|
enable_testing()
|
|
add_test(NAME test_parse_blif
|
|
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test/test_parser.sh ${CMAKE_CURRENT_SOURCE_DIR}/test/*/*.blif ${CMAKE_CURRENT_SOURCE_DIR}/test/*/*.eblif)
|
|
endif()
|
|
|
|
install(TARGETS libblifparse blifparse_test DESTINATION bin)
|