diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aa2f601ee0bce7cef03c8e236226b98719ac1bfd..89dc2b25a6027b90eb55e9c7a96a58555b58d0b0 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 6bec6ea439fcf7903d5425bf346dd9e905466492..511dcc032f3c753653e18a3cf0ccacce5eb0f06b 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 d47eed48f655922f82bee0e10789d6ab4a5d0056..ca548f41e3fd625ea84f500a74df4688078c5713 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 0000000000000000000000000000000000000000..4b842afacb027c53932930982bdf480911c01ea7 --- /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 f6a472d3acd4b0983273b293ca36e2e7affd0660..4cd3c5947e36d503e32b37c67aefaea7d241d6e7 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 0000000000000000000000000000000000000000..68d417d8bdc47a180cde7485ffe66a56c9bae9c9 --- /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 f7081965816f3963ab816627beb90138dc138b3f..a65bc68d4a8b92292b025ffcbf5304028c0532bc 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 0000000000000000000000000000000000000000..e7282dffec9a68f6cb863eba7240b02a941557ee --- /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 82895dac4a19912bd27e566778ecf118edaddc1f..b4f9e61677118253c23b3a3e465d6353f5aa8163 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 a435c0ac4fd146e7ecf97a3632d292691b8c2bf4..3e993c7f3c1acda088d6d430784399061e0e795c 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 2a9d2a85ad9dfefba7ec13db11fd8b8b5d6a26e5..0d0fa2409ffad2376f85d50c18bc449e7929ed42 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)