From 6febd2e657784fe44f5025b881d7e152c5eea8de Mon Sep 17 00:00:00 2001 From: Mark Meredith Date: Fri, 22 May 2020 19:45:00 +0000 Subject: [PATCH] Use Conan to install dependencies --- .gitlab-ci.yml | 18 ++++++++---- CMakeLists.txt | 56 ++++++++++++++++++++++-------------- README.md | 4 --- conanfile.txt | 7 +++++ meson.build | 8 ++++-- src/csg/CMakeLists.txt | 21 ++++++++++++++ src/csg/meson.build | 2 +- src/csg/tests/CMakeLists.txt | 28 ++++++++++++++++++ src/csg/tests/meson.build | 3 +- src/inputs/meson.build | 2 +- src/inputs/tests/meson.build | 3 +- 11 files changed, 116 insertions(+), 36 deletions(-) create mode 100644 conanfile.txt create mode 100644 src/csg/CMakeLists.txt create mode 100644 src/csg/tests/CMakeLists.txt diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aa2f601..89dc2b2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,12 +6,20 @@ variables: ###### Test jobs ##### -test:all: +test:meson: script: - - python -m pip install meson ninja - - meson build + - python -m pip install meson ninja conan + - env PKG_CONFIG_PATH=$PWD/build meson build - meson test -C build --print-errorlogs -# - ninja -C build src/mfix-parser -# - find -name inputs |grep -v tutorials/wdf/mueller | xargs -l ./build/src/mfix-parser # FIXME: correct syntax error (= =) in file + tags: + - mfix-exa + +test:cmake: + script: + - python -m pip install cmake ninja conan + - cmake -S. -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Debug + - cmake --build build --target unit_tests_csg + - cd build + - ctest tags: - mfix-exa diff --git a/CMakeLists.txt b/CMakeLists.txt index 6bec6ea..511dcc0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,31 +1,45 @@ -################################################################################ -# CSG Parser -################################################################################ -add_library(csg) - -target_sources(csg PRIVATE - src/csg/impl/parser.cpp - src/csg/impl/levelset_3d.cpp - src/csg/impl/levelset_2d.cpp - src/csg/impl/csg.cpp - src/csg/impl/matrix_functions.cpp - ) +cmake_minimum_required(VERSION 3.14) -target_include_directories(csg PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/subprojects/PEGTL/include) +project(MFIX-Parser + DESCRIPTION "Parser for CSG files for MFiX-Exa" + HOMEPAGE_URL "https://mfix.netl.doe.gov/gitlab/exa/mfix-parser" + LANGUAGES CXX + ) -target_link_libraries(csg PRIVATE stdc++fs) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) -target_compile_features(csg PRIVATE cxx_std_17) +find_program(CCACHE_FOUND ccache) +if(CCACHE_FOUND) + set( CMAKE_CXX_COMPILER_LAUNCHER ccache ) +endif() -SET(catch2_dir ${CMAKE_CURRENT_SOURCE_DIR}/subprojects/Catch2) +option(ENABLE_CSG "Build with CSG support" OFF) -if(NOT EXISTS "${catch2_dir}/CMakeLists.txt") - message(FATAL_ERROR "File ${catch2_dir}/CMakeLists.txt does not exist! The submodules were not downloaded! GIT_SUBMODULE was turned off or failed. Please update submodules and try again.") +# Download automatically, you can also just copy the conan.cmake file +if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake") + message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan") + file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/master/conan.cmake" + "${CMAKE_BINARY_DIR}/conan.cmake") endif() -add_subdirectory(${catch2_dir} ${CMAKE_CURRENT_BINARY_DIR}/catch_build) -list(APPEND CMAKE_MODULE_PATH "${catch2_dir}/contrib/") +include(${CMAKE_BINARY_DIR}/conan.cmake) + +conan_cmake_run(REQUIRES + catch2/2.12.1 + cgal/5.0.2 + pegtl/2.8.1@taocpp/stable + BASIC_SETUP) + +list(APPEND CMAKE_MODULE_PATH "${CONAN_LIB_DIRS_CATCH2}/cmake/Catch2") include(CTest) include(Catch) + +add_subdirectory(src/csg) + +target_include_directories(csg PRIVATE + ${CONAN_INCLUDE_DIRS_PEGTL}) + +target_compile_features(csg PRIVATE cxx_std_17) diff --git a/README.md b/README.md index d47eed4..ca548f4 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,3 @@ This has the MFIX-Exa repo as a submodule in order to test against existing ``in ## Run Tests > meson test -C build - -## Run on inputs file - -> ./build/src/mfix-parser subprojects/mfix/benchmarks/01-HCS/Size0001/inputs && echo "Parsing succeeded." diff --git a/conanfile.txt b/conanfile.txt new file mode 100644 index 0000000..4b842af --- /dev/null +++ b/conanfile.txt @@ -0,0 +1,7 @@ +[requires] +catch2/2.12.1 +cgal/5.0.2 +pegtl/2.8.1@taocpp/stable + +[generators] +pkg_config diff --git a/meson.build b/meson.build index f6a472d..4cd3c59 100644 --- a/meson.build +++ b/meson.build @@ -2,8 +2,12 @@ project('mfix-parser', 'cpp', version : '0.1', default_options : ['warning_level=3', 'cpp_std=c++2a']) -tao_inc = include_directories('subprojects/PEGTL/include') -catch2_inc = include_directories('subprojects/Catch2/single_include') +run_command('conan', 'install', '--install-folder', meson.build_root(), meson.source_root(), check: true) + +pegtl = dependency('pegtl', method: 'pkg-config') +catch2 = dependency('catch2', method: 'pkg-config') +cgal = dependency('cgal', method: 'pkg-config') + parser_inc = include_directories( 'src/csg', 'src/csg/impl', diff --git a/src/csg/CMakeLists.txt b/src/csg/CMakeLists.txt new file mode 100644 index 0000000..68d417d --- /dev/null +++ b/src/csg/CMakeLists.txt @@ -0,0 +1,21 @@ +################################################################################ +# CSG Parser +################################################################################ +add_library(csg) + +target_sources(csg PRIVATE + impl/parser.cpp + impl/levelset_3d.cpp + impl/levelset_2d.cpp + impl/csg.cpp + impl/matrix_functions.cpp + ) + +target_include_directories(csg INTERFACE ${CMAKE_SOURCE_DIR}) +target_link_libraries(csg PRIVATE + stdc++fs + ${CONAN_PKG_LIBS_CGAL} + ${CONAN_PKG_LIBS_MPIR} + ) + +add_subdirectory(tests) \ No newline at end of file diff --git a/src/csg/meson.build b/src/csg/meson.build index f708196..a65bc68 100644 --- a/src/csg/meson.build +++ b/src/csg/meson.build @@ -5,7 +5,7 @@ lib_csg_parser = static_library( 'impl/levelset_2d.cpp', 'impl/parser.cpp', 'impl/matrix_functions.cpp', - include_directories: tao_inc, + dependencies: [pegtl, cgal], install : true) if get_option('cpp_std')=='c++2a' diff --git a/src/csg/tests/CMakeLists.txt b/src/csg/tests/CMakeLists.txt new file mode 100644 index 0000000..e7282df --- /dev/null +++ b/src/csg/tests/CMakeLists.txt @@ -0,0 +1,28 @@ +################################################################################ +# CSG Parsing Tests +################################################################################ + +add_executable(unit_tests_csg EXCLUDE_FROM_ALL + levelset/boolean.t.cpp + levelset/primitives.t.cpp + levelset/transform.t.cpp + levelset/extrude.t.cpp + parser/boolean.t.cpp + parser/main.cpp + parser/nest.cpp + parser/other.t.cpp + parser/primitives.t.cpp + parser/transform.t.cpp + parser/extrude.t.cpp + ) + +target_include_directories(unit_tests_csg PRIVATE + .. + ../impl + ) + +target_link_libraries(unit_tests_csg csg) + +add_test(NAME run_csg_unittests + COMMAND ${CMAKE_COMMAND} -E env ${CMAKE_BINARY_DIR}/bin/unit_tests_csg + ) \ No newline at end of file diff --git a/src/csg/tests/meson.build b/src/csg/tests/meson.build index 82895da..b4f9e61 100644 --- a/src/csg/tests/meson.build +++ b/src/csg/tests/meson.build @@ -11,7 +11,8 @@ test_csg = executable( 'parser/primitives.t.cpp', 'parser/transform.t.cpp', 'parser/extrude.t.cpp', - include_directories: [parser_inc, catch2_inc], + include_directories: [parser_inc], + dependencies: [catch2, cgal], link_with: lib_csg_parser, override_options: 'cpp_std=c++2a', ) diff --git a/src/inputs/meson.build b/src/inputs/meson.build index a435c0a..3e993c7 100644 --- a/src/inputs/meson.build +++ b/src/inputs/meson.build @@ -5,7 +5,7 @@ lib_inputs_parser = static_library( 'parser.cpp', 'solver.cpp', 'time.cpp', - include_directories: tao_inc, + dependencies: [pegtl], install : true) subdir('tests') diff --git a/src/inputs/tests/meson.build b/src/inputs/tests/meson.build index 2a9d2a8..0d0fa24 100644 --- a/src/inputs/tests/meson.build +++ b/src/inputs/tests/meson.build @@ -3,7 +3,8 @@ test_inputs = executable( 'parser.t.cpp', 'solver.t.cpp', 'main.cpp', - include_directories: [parser_inc, catch2_inc], + include_directories: [parser_inc], + dependencies: [catch2], link_with: lib_inputs_parser ) test('unit_test_inputs', test_inputs) -- GitLab