abacus: add cmake-based build system

This commit is contained in:
Bruno BELANYI 2021-09-01 19:00:51 +02:00
parent 549c1f0574
commit 331089d101
6 changed files with 76 additions and 0 deletions

15
CMakeLists.txt Normal file
View file

@ -0,0 +1,15 @@
cmake_minimum_required(VERSION 3.10)
project(abacus VERSION 0.0.0 LANGUAGES CXX)
enable_testing()
add_library(common_options INTERFACE)
target_compile_features(common_options INTERFACE
cxx_std_17
)
target_compile_options(common_options INTERFACE
-Wall
-Wextra
)
add_subdirectory(src)
add_subdirectory(tests)

12
src/CMakeLists.txt Normal file
View file

@ -0,0 +1,12 @@
add_executable(abacus abacus.cc)
target_link_libraries(abacus PRIVATE common_options)
add_subdirectory(bignum)
add_subdirectory(parse)
target_link_libraries(abacus PRIVATE
bignum
parse
)
install(TARGETS abacus)

View file

@ -0,0 +1,9 @@
add_library(bignum STATIC
bignum.cc
bignum.hh
)
target_link_libraries(bignum PRIVATE common_options)
target_include_directories(bignum PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)

23
src/parse/CMakeLists.txt Normal file
View file

@ -0,0 +1,23 @@
find_package(BISON REQUIRED)
find_package(FLEX REQUIRED)
bison_target(parser_sources parser.yy ${CMAKE_CURRENT_BINARY_DIR}/parser.cc DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.hh)
flex_target(scanner_sources scanner.ll ${CMAKE_CURRENT_BINARY_DIR}/scanner.cc)
add_flex_bison_dependency(scanner_sources parser_sources)
add_library(parse STATIC
parser-driver.cc
parser-driver.hh
${BISON_parser_sources_OUTPUTS}
${FLEX_scanner_sources_OUTPUTS}
)
target_link_libraries(parse PRIVATE common_options)
target_link_libraries(parse PRIVATE
bignum
)
target_include_directories(parse PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
)

1
tests/CMakeLists.txt Normal file
View file

@ -0,0 +1 @@
add_subdirectory(unit)

16
tests/unit/CMakeLists.txt Normal file
View file

@ -0,0 +1,16 @@
find_package(GTest)
if (${GTest_FOUND})
include(GoogleTest)
add_executable(bignum_test bignum.cc)
target_link_libraries(bignum_test PRIVATE common_options)
target_link_libraries(bignum_test PRIVATE
bignum
GTest::gtest
GTest::gtest_main
)
gtest_discover_tests(bignum_test)
endif (${GTest_FOUND})