Compare commits

..

No commits in common. "171ef10a6d8f0626e1e3e289b868f2a1dfd23c9b" and "549c1f057451911e0758bbb4319ec8a46da794bf" have entirely different histories.

17 changed files with 125 additions and 82 deletions

View file

@ -1,18 +0,0 @@
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
)
target_include_directories(common_options INTERFACE
src
)
add_subdirectory(src)
add_subdirectory(tests)

View file

@ -76,8 +76,8 @@
nativeBuildInputs = with pkgs; [
bison
cmake
flex
meson
ninja
pkg-config
];
@ -86,8 +86,6 @@
gtest
];
doCheck = true;
meta = with pkgs.lib; {
description = "A simple calculator using big numbers";
homepage = "https://gitea.belanyi.fr/ambroisie/abacus";

13
meson.build Normal file
View file

@ -0,0 +1,13 @@
project(
'abacus',
'cpp',
version: '0.0.0',
license: 'MIT',
default_options: [
'warning_level=3',
'cpp_std=c++17',
],
)
subdir('src')
subdir('tests')

View file

@ -1,12 +0,0 @@
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

@ -1,4 +1,4 @@
#include "parse/parser-driver.hh"
#include "parser-driver.hh" // FIXME: I would like `parse/parser-driver.hh` path instead...
int main() {
abacus::parse::ParserDriver driver{};

View file

@ -1,5 +0,0 @@
add_library(bignum STATIC
bignum.cc
bignum.hh
)
target_link_libraries(bignum PRIVATE common_options)

16
src/bignum/meson.build Normal file
View file

@ -0,0 +1,16 @@
bignum_sources = files(
'bignum.cc',
'bignum.hh',
)
bignum_inc = include_directories('.')
bignum_lib = static_library(
'bignum',
sources: bignum_sources,
)
bignum = declare_dependency(
link_with: bignum_lib,
include_directories: bignum_inc,
)

16
src/meson.build Normal file
View file

@ -0,0 +1,16 @@
abacus_sources = files(
'abacus.cc',
)
subdir('bignum')
subdir('parse')
abacus = executable(
'abacus',
sources: abacus_sources,
dependencies: [
bignum,
parse,
],
install: true,
)

View file

@ -1,23 +0,0 @@
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_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)

48
src/parse/meson.build Normal file
View file

@ -0,0 +1,48 @@
flex_binary = find_program('flex', required: true)
lexer_sources = custom_target(
'lexer_sources',
input: 'scanner.ll',
output: 'scanner.cc',
command: [
flex_binary,
'-o',
'@OUTPUT@',
'@INPUT@',
],
)
bison_binary = find_program('bison', required: true)
parser_sources = custom_target(
'parser_sources',
input: 'parser.yy',
output: [
'parser.cc',
'parser.hh',
],
command: [
bison_binary,
'@INPUT@',
'--output=@OUTPUT0@',
'--defines=@OUTPUT1@',
'--graph',
# FIXME: html output in bison 3.7.90
],
)
parse_inc = include_directories('.')
parse_lib = static_library(
'parser',
'parser-driver.cc',
'parser-driver.hh',
lexer_sources,
parser_sources,
dependencies: [
bignum,
],
)
parse = declare_dependency(
link_with: parse_lib,
include_directories: parse_inc,
)

View file

@ -4,7 +4,7 @@
#include "parser.hh"
#include "bignum/bignum.hh"
#include "bignum.hh" // FIXME: I would like `bignum/bignum.hh` path instead...
namespace abacus::parse {

View file

@ -36,7 +36,7 @@ namespace abacus::parse {
class ParserDriver;
} // namespace abacus::parse
#include "bignum/bignum.hh"
#include "bignum.hh" // FIXME: I would like `bignum/bignum.hh` path instead...
}
%code provides {

View file

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

1
tests/meson.build Normal file
View file

@ -0,0 +1 @@
subdir('unit')

View file

@ -1,16 +0,0 @@
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})

View file

@ -2,7 +2,7 @@
#include <gtest/gtest.h>
#include "bignum/bignum.hh"
#include "bignum.hh"
using namespace abacus::bignum;

26
tests/unit/meson.build Normal file
View file

@ -0,0 +1,26 @@
gtest = dependency(
'gtest',
main: true,
required: false,
)
if gtest.found()
unit_test_sources = files(
'bignum.cc',
)
unit_tests = executable(
'unit_tests',
sources: unit_test_sources,
dependencies: [
bignum,
gtest,
],
)
test(
'unit tests',
unit_tests,
protocol: 'gtest',
)
endif