Commit 43e1f7ef authored by David Frank's avatar David Frank Committed by Tobias Lasser
Browse files

Replace git submodules with CPM

parent da5edeeb
Pipeline #399363 passed with stages
in 28 minutes and 8 seconds
......@@ -5,7 +5,7 @@ stages:
- sanitizer
- coverage
- docs
- docker
- docker
### variables ###
......@@ -19,18 +19,18 @@ variables:
UBUNTU_IMAGE: "elsa/ubuntu:20.04"
GPU_ONLY_IMAGE: "elsa/cuda-clang:10.0"
COVERAGE_IMAGE: "elsa/coverage:10.2"
CPM_SOURCE_CACHE: "/tmp/.cache/CPM"
### Cache setup ###
# Caches should only be used for caching
# between pipelines not jobs, artifacts should be prefered for that
# Therefore, we cache the submodules, so that they don't have to be
# downloaded so frequently
# We store the CPM cache, for a given branch.
# TODO dfrank: Is it possible to cache it project wide?
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- thirdparty/
- .git/modules
- $CPM_SOURCE_CACHE
### job templates ###
......@@ -54,9 +54,9 @@ cache:
- when: always
#### Build job templates ####
.job_template: &build_job_artifact
<<: *run_always
<<: *run_always
stage: compile
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME"
......@@ -70,8 +70,8 @@ cache:
- cd build
- cmake .. -GNinja -DELSA_BENCHMARKS=ON -DELSA_CREATE_JUNIT_REPORTS=ON -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-lc++abi"
- ninja
- ninja build-benchmarks
- ninja build-examples
- ninja build-benchmarks
- ninja build-examples
.buildjob_script_normal:
script: &buildjob_normal
......@@ -79,14 +79,14 @@ cache:
- cd build
- cmake .. -GNinja -DELSA_BENCHMARKS=ON -DELSA_CREATE_JUNIT_REPORTS=ON
- ninja
- ninja build-benchmarks
- ninja build-examples
- ninja build-benchmarks
- ninja build-examples
#### Test job templates ####
.testjob_template: &test_job_artifact
<<: *run_always
script:
<<: *run_always
script:
- cd build
- ninja tests
artifacts:
......@@ -98,14 +98,14 @@ cache:
junit: "build/test_reports/test_*.xml"
#### Install job templates ####
.installjob_clang_anchors:
script: &installjob_script_clang
- git clone https://gitlab.lrz.de/IP/elsa_testing.git /tmp/elsa_testing
- cd /tmp/elsa_testing
- mkdir -p build/ && cd build/
- cmake .. -GNinja -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-lc++abi"
- ninja
- ninja
.installjob_default_anchors:
script: &installjob_script
......@@ -113,24 +113,23 @@ cache:
- cd /tmp/elsa_testing
- mkdir -p build/ && cd build/
- cmake .. -GNinja
- ninja
- ninja
.installjob_anchors: &install_job
<<: *run_on_merge_requests
<<: *run_on_merge_requests
before_script: &installjob_before_script
- cd build
- ninja install
cache: &install_cache
key: "$CI_COMMIT_REF_SLUG-$CI_JOB_NAME"
paths:
- thirdparty/
- .git/modules
- /tmp/elsa_testing
- $CPM_SOURCE_CACHE
- /tmp/elsa_testing
### static test ###
clang-format:
<<: *run_always
<<: *run_always
stage: static-test
image: $CLANG_FORMAT_IMAGE
script:
......@@ -141,7 +140,7 @@ clang-format:
- clang
clang-tidy:
<<: *run_always
<<: *run_always
stage: static-test
image: $CLANG_TIDY_IMAGE
script:
......@@ -207,8 +206,8 @@ build-gpu-only:
- cd build
- cmake .. -GNinja -DELSA_BENCHMARKS=ON -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-lc++abi" -DELSA_CUDA_VECTOR=ON
- ninja
- ninja build-benchmarks
- ninja build-examples
- ninja build-benchmarks
- ninja build-examples
tags:
- linux
- elsa
......@@ -340,7 +339,7 @@ install-gpu-only:
image: $GPU_ONLY_IMAGE
dependencies:
- build-gpu-only
script:
script:
- git clone https://gitlab.lrz.de/IP/elsa_testing.git /tmp/elsa_testing
- cd /tmp/elsa_testing
- mkdir -p build/ && cd build/
......@@ -373,7 +372,7 @@ asan-ubsan:
<<: *run_on_merge_requests
stage: sanitizer
image: $CUDA_IMAGE
dependencies: []
dependencies: []
script:
- mkdir -p build
- cd build
......@@ -388,23 +387,22 @@ asan-ubsan:
### test coverage ###
# Enforce GCC for test coverage, as our coverage only works with gcov and acts weird with clang
# Enforce GCC for test coverage, as our coverage only works with gcov and acts weird with clang
test-coverage:
<<: *run_on_merge_requests
stage: coverage
image: $COVERAGE_IMAGE
dependencies: []
dependencies: []
script:
- mkdir -p build
- cd build
- CXX=g++ cmake .. -GNinja -DELSA_BUILD_PYTHON_BINDINGS=OFF -DCMAKE_BUILD_TYPE=Debug -DELSA_COVERAGE=ON
- CXX=g++ cmake .. -GNinja -DELSA_BUILD_PYTHON_BINDINGS=OFF -DCMAKE_BUILD_TYPE=Debug -DELSA_COVERAGE=ON
- ninja tests
- ninja test_coverage
cache:
key: "$CI_COMMIT_REF_SLUG-$CI_JOB_NAME"
paths:
- thirdparty/
- .git/modules
- $CPM_SOURCE_CACHE
- build/
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME-coverage"
......@@ -441,7 +439,7 @@ deploy-docs:
.deploy-docker:
<<: *nightly_job
stage: docker
dependencies: []
dependencies: []
rules:
- if: '$CI_COMMIT_BRANCH == "master" && $CI_PIPELINE_SOURCE == "schedule"'
- changes:
......@@ -462,7 +460,7 @@ deploy-docs:
image: $CLANG9_IMAGE
rules:
- when: never
script:
script:
- mkdir -p build
- cd build
- cmake .. -GNinja -DELSA_BENCHMARKS=ON -DELSA_CREATE_JUNIT_REPORTS=ON -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-lc++abi"
......@@ -473,7 +471,7 @@ deploy-docs:
image: $GCC_IMAGE
rules:
- when: never
script:
script:
- *buildjob_normal
- ninja tests
- *installjob_script
[submodule "thirdparty/Catch2"]
path = thirdparty/Catch2
url = https://github.com/catchorg/Catch2.git
[submodule "thirdparty/eigen3"]
path = thirdparty/eigen3
url = https://gitlab.com/libeigen/eigen.git
[submodule "thirdparty/spdlog"]
path = thirdparty/spdlog
url = https://github.com/gabime/spdlog.git
[submodule "thirdparty/quickvec"]
path = thirdparty/quickvec
url = https://gitlab.lrz.de/IP/quickvec.git
[submodule "thirdparty/pybind11"]
path = thirdparty/pybind11
url = https://github.com/pybind/pybind11.git
......@@ -21,7 +21,6 @@ option(ELSA_CREATE_JUNIT_REPORTS "Enable creating JUnit style reports when runni
option(ELSA_COVERAGE "Enable test coverage computation and reporting" OFF)
option(ELSA_BENCHMARKS "Enable elsa benchmark test cases" OFF)
option(GIT_SUBMODULE "Enable updating the submodules during build" ${ELSA_MASTER_PROJECT})
option(ELSA_INSTALL "Enable generating the install targets for make install" ${ELSA_MASTER_PROJECT})
option(ELSA_BUILD_EXAMPLES "Enable building of examples" ${ELSA_MASTER_PROJECT})
......@@ -47,42 +46,82 @@ set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
# set default built type to "Release" (if no other specified)
set(DEFAULT_BUILD_TYPE "Release")
include(SetDefaultBuildType)
# Forbid extensions (such as gnu++) for this project
set(CMAKE_CXX_EXTENSIONS OFF)
# Forbid extensions (such as gnu++) for this project
set(CMAKE_CXX_EXTENSIONS OFF)
# Include CPM dependency manager
include(CPM)
# ------------ dependencies ------------
# ------------
# Setup list of submodules for elsa
list(APPEND ELSA_SUBMODULES Catch2 eigen3 pybind11 spdlog)
if(ELSA_CUDA_VECTOR)
list(APPEND ELSA_SUBMODULES quickvec)
endif(ELSA_CUDA_VECTOR)
# only add the dependencies if elsa is stand-alone
if(ELSA_MASTER_PROJECT)
# include the git submodule update
include(UpdateGitSubmodules)
# setup Eigen Library
set(EIGEN3_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/thirdparty/eigen3")
find_package(Eigen3 3.3 REQUIRED)
message(STATUS "Using eigen3 submodule at ${EIGEN3_INCLUDE_DIR}")
CPMAddPackage(
NAME eigen3
GIT_REPOSITORY https://gitlab.com/libeigen/eigen
# Currently we're on a random master branch commit, until Eigen 3.4 will be released we kind of have to
# stick with it, see also https://gitlab.lrz.de/IP/elsa/-/issues/91 for a little discussion on it
GIT_TAG c1b0aea65
DOWNLOAD_ONLY YES # Eigen's CMakelists are not intended for library use
)
# Add the Eigen library target to link against
if(eigen3_ADDED)
add_library(Eigen3::Eigen INTERFACE IMPORTED)
target_include_directories(Eigen3::Eigen INTERFACE ${eigen3_SOURCE_DIR})
endif()
# setup spdlog Library
set(Spdlog_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/thirdparty/spdlog")
find_package(Spdlog REQUIRED)
message(STATUS "Using spdlog submodule at ${Spdlog_INCLUDE_DIR}")
CPMAddPackage(
NAME Spdlog
GITHUB_REPOSITORY gabime/spdlog
VERSION 1.7.0 # 1.7.0 Fallback if it dosen't work
OPTIONS "SPDLOG_INSTALL ON"
)
# setup Dnnl library
find_package(Dnnl)
# Adding quickvec
if(ELSA_CUDA_VECTOR)
find_package(CUDA REQUIRED)
find_package(Quickvec REQUIRED)
message(STATUS "Using Quickvec submodule at ${Quickvec_INCLUDE_DIR}")
include(CheckLanguage)
check_language(CUDA)
if(CMAKE_CUDA_COMPILER)
enable_language(CUDA)
CPMAddPackage(
NAME Quickvec
GIT_REPOSITORY https://gitlab.lrz.de/IP/quickvec.git
GIT_TAG master
)
if(Quickvec_ADDED)
message(STATUS "CUDA support enabled")
message(STATUS "Enabling DataHandlerGPU")
message(STATUS "The default container type will be on the GPU")
set(ELSA_BUILD_WITH_QUICKVEC TRUE)
add_definitions(-DELSA_CUDA_VECTOR)
else()
message(STATUS "CUDA compiler not found or not compiling with clang!")
message(STATUS "Compiling without a DataHandlerGPU")
message(STATUS "The default container type will be CPU")
set(ELSA_BUILD_WITH_QUICKVEC FALSE)
set(ELSA_CUDA_VECTOR OFF)
endif()
endif()
endif()
if (${ELSA_BUILD_PYTHON_BINDINGS})
CPMAddPackage(
NAME pybind11
GITHUB_REPOSITORY pybind/pybind11
VERSION 2.6.0
)
endif()
else()
message(STATUS " No dependencies added for elsa, as it is not stand-alone")
......@@ -94,41 +133,9 @@ include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
set(INSTALL_CONFIG_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/elsa)
# include the InstallElsaModule function
include(InstallElsaModule)
add_subdirectory(thirdparty/pybind11)
# ------------ setup VectorCUDA --------
# ------------
if(ELSA_CUDA_VECTOR)
set(CMAKE_CXX_EXTENSIONS OFF)
include(CheckLanguage)
check_language(CUDA)
if (CMAKE_CUDA_COMPILER AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
enable_language(CUDA)
message(STATUS "CUDA support enabled")
message(STATUS "Enabling DataHandlerGPU")
message(STATUS "The default container type will be on the GPU")
set(ELSA_BUILD_WITH_QUICKVEC TRUE)
add_definitions(-DELSA_CUDA_VECTOR)
add_subdirectory(thirdparty/quickvec)
else()
set(ELSA_BUILD_WITH_QUICKVEC FALSE)
message(STATUS "CUDA compiler not found or not compiling with clang!")
message(STATUS "Compiling without a DataHandlerGPU")
message(STATUS "The default container type will be CPU")
set(ELSA_CUDA_VECTOR OFF)
endif()
endif()
# ------------ Setup Tools -----------
# ------------
......@@ -146,10 +153,15 @@ endif(NOT ELSA_MASTER_PROJECT)
if(ELSA_TESTING OR ELSA_BENCHMARKS)
enable_testing()
add_subdirectory(thirdparty/Catch2)
CPMAddPackage(
NAME Catch2
GITHUB_REPOSITORY catchorg/Catch2
VERSION 2.10.1 # <-- Current, update to: 2.13.1
)
# add the CMake modules for automatic test discovery
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/thirdparty/Catch2/contrib" ${CMAKE_MODULE_PATH})
set(CMAKE_MODULE_PATH "${Catch2_SOURCE_DIR}/contrib" ${CMAKE_MODULE_PATH})
if(ELSA_TESTING)
message(STATUS "elsa testing is enabled")
......@@ -162,12 +174,17 @@ if(ELSA_TESTING OR ELSA_BENCHMARKS)
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
USES_TERMINAL
COMMENT "Build and run all the tests.")
if(ELSA_COVERAGE)
message(STATUS "elsa test coverage is enabled")
include(CodeCoverage)
APPEND_COVERAGE_COMPILER_FLAGS()
set(COVERAGE_LCOV_EXCLUDES '${PROJECT_SOURCE_DIR}/thirdparty/*' '/usr/*')
set(COVERAGE_LCOV_EXCLUDES
'${CPM_SOURCE_CACHE}/*'
'${PROJECT_BINARY_DIR}/_deps/'
'${PROJECT_SOURCE_DIR}/thirdparty/*'
'/usr/*')
SETUP_TARGET_FOR_COVERAGE_LCOV(NAME test_coverage EXECUTABLE ctest)
else(ELSA_COVERAGE)
......@@ -178,19 +195,17 @@ else(ELSA_TESTING OR ELSA_BENCHMARKS)
message(STATUS " elsa testing is disabled")
endif(ELSA_TESTING OR ELSA_BENCHMARKS)
# ------------ add code/docs -----------
# ------------
# the bindings generator should be added before elsa, as we check whether the target can be built
if (ELSA_BUILD_PYTHON_BINDINGS)
add_subdirectory(tools/bindings_generation EXCLUDE_FROM_ALL)
# Warn if python bindings and code coverage is activated
# Warn if python bindings and code coverage is activated
if(ELSA_COVERAGE)
message(WARNING "Python bindings are generated for a coverage build, consider turning one off (set \
either \"ELSA_BUILD_PYTHON_BINDINGS\" or \"ELSA_COVERAGE\"to OFF via command line")
either \"ELSA_BUILD_PYTHON_BINDINGS\" or \"ELSA_COVERAGE\"to OFF via command line")
endif()
endif()
......@@ -200,12 +215,12 @@ add_subdirectory(elsa)
# the documentation
add_subdirectory(docs EXCLUDE_FROM_ALL)
# the examples
if(ELSA_BUILD_EXAMPLES)
# the examples
add_subdirectory(examples EXCLUDE_FROM_ALL)
endif(ELSA_BUILD_EXAMPLES)
# Add benchmarks after elsa code, such that CUDA is detected correctly and we just add it in the benchmarks
# Add benchmarks after elsa code, such that CUDA is detected correctly and we just add it in the benchmarks
if (ELSA_BENCHMARKS)
message(STATUS "elsa benchmarks are enabled")
add_subdirectory(benchmarks)
......
......@@ -37,6 +37,17 @@ blogpost](https://chris.beams.io/posts/git-commit/)):
- Wrap the body at 72 characters
- Use the body to explain what and why vs. how
## Dependency Management
As of December 2020, we switched to [CPM](https://github.com/TheLartians/CPM.cmake) for our dependency management.
Hopefully, you don't really have to know and it doesn't get the way. See the [root CMakeLists.txt file](./CMakeLists.txt),
as an example for our usage.
It is recommended to set `CPM_SOURCE_CACHE` (see [here](https://github.com/TheLartians/CPM.cmake#cpm_source_cache) for
more info). It's an environment variable, that will save all dependencies outside of the build directory and -
for all projects using CPM - only one version of the dependency. This way no re-downloading is necessary.
Set it in your e.g. `.bashrc`.
## Testing
You can run the elsa unit tests by running `ctest` in the build folder. To specify which tests run,
filter with `ctest -R regular_expression`.
......
......@@ -20,7 +20,7 @@ Requirements
elsa requires a **C++17 compliant compiler**, such as GCC, Clang or Microsoft Visual Studio in recent versions.
Current testing includes gcc7, gcc9, and clang8.
The main third party dependencies (Eigen3, spdlog, Catch2) are integrated via git submodules.
The main third party dependencies (Eigen3, spdlog, Catch2) are integrated via [CPM](https://github.com/TheLartians/CPM.cmake).
For CUDA support, you need a CUDA capable graphics card as well as an installation of the CUDA toolkit.
Current testing includes CUDA 9.2 combined with gcc7.
......
set(CPM_DOWNLOAD_VERSION 0.27.5)
if(CPM_SOURCE_CACHE)
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
else()
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
endif()
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}")
file(DOWNLOAD
https://github.com/TheLartians/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
${CPM_DOWNLOAD_LOCATION}
)
endif()
include(${CPM_DOWNLOAD_LOCATION})
# update/init git submodules if necessary
# idea from https://cliutils.gitlab.io/modern-cmake/chapters/projects/submodule.html
find_package(Git QUIET)
# Return early if git is not found, or submodule flag is not set, or if this is not a git project
if(NOT GIT_FOUND OR NOT GIT_SUBMODULE OR NOT EXISTS "${PROJECT_SOURCE_DIR}/.git")
return()
endif()
# Loop over all submodules
foreach(module ${ELSA_SUBMODULES})
set(SUBMODULE_GIT_PATH "${PROJECT_SOURCE_DIR}/.git/modules/thirdparty/${module}")
set(SUBMODULE_PATH "${PROJECT_SOURCE_DIR}/thirdparty/${module}")
set(GIT_SUBMODULE_RESULT "0")
if(NOT EXISTS ${SUBMODULE_GIT_PATH})
message(STATUS "Init submodule ${module}")
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --force thirdparty/${module}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE GIT_SUBMODULE_RESULT
ERROR_QUIET)
# If init for some reason didn't work, we deinit and init again
# This seems to resolve some problems
# This usually happens in the pipeline, if we copy over the thirdparty stuff, but not the .git/modules
# folder
if(NOT GIT_SUBMODULE_RESULT EQUAL "0")
message(STATUS "Init failed, trying to deinit it and init again")
# reset error
set(GIT_SUBMODULE_RESULT "0")
# Deinit it
execute_process(COMMAND ${GIT_EXECUTABLE} submodule deinit --force thirdparty/${module}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_QUIET ERROR_QUIET)
# And reinit and update it
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init thirdparty/${module}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE GIT_SUBMODULE_RESULT)
if(NOT GIT_SUBMODULE_RESULT EQUAL "0")
message(WARNING "Init submodule ${module} failed with ${GIT_SUBMODULE_RESULT}")
else()
message(STATUS "Reinit worked")
endif()
endif()
endif()
if(NOT EXISTS "${SUBMODULE_PATH}/CMakeLists.txt")
message(STATUS "Update submodule ${module}")
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --force thirdparty/${module}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE GIT_SUBMODULE_RESULT)
endif()
# Check return value for error
if(NOT GIT_SUBMODULE_RESULT EQUAL "0")
message(WARNING "Updating submodule ${module} failed with ${GIT_SUBMODULE_RESULT}")
endif()
# If we still have no CMakeLists file something is wrong
if(NOT EXISTS "${PROJECT_SOURCE_DIR}/thirdparty/${module}/CMakeLists.txt")
message(FATAL_ERROR "The git submodule ${module} is not present! Either GIT_SUBMODULE was turned off or failed. Please update submodules and try again.")
endif()
endforeach()
......@@ -147,7 +147,7 @@ if (ELSA_BUILD_PYTHON_BINDINGS)
--extra-arg=-I${CMAKE_CURRENT_LIST_DIR}
--extra-arg=-I${PROJECT_SOURCE_DIR}/tools/bindings_generation/hints
--extra-arg=-I${PROJECT_SOURCE_DIR}/elsa/logging
--extra-arg=-I${PROJECT_SOURCE_DIR}/thirdparty/spdlog/include
--extra-arg=-I${Spdlog_SOURCE_DIR}/include
--extra-arg=-std=c++17
--extra-arg=-w
--extra-arg=--cuda-host-only
......
......@@ -47,7 +47,7 @@ set(MODULE_SOURCES
Geometry.cpp
StrongTypes.cpp)
if(${ELSA_CUDA_VECTOR})
if(${ELSA_BUILD_WITH_QUICKVEC})
set(MODULE_HEADERS
${MODULE_HEADERS}
Handlers/DataHandlerGPU.h
......@@ -72,7 +72,7 @@ if(OpenMP_CXX_FOUND)
endif()
# link Quickvec for DataHandlerGPU
if(ELSA_CUDA_VECTOR AND Quickvec_FOUND)
if(${ELSA_BUILD_WITH_QUICKVEC})
target_link_libraries(${ELSA_MODULE_TARGET_NAME} PUBLIC Quickvec::quickvec)
target_compile_definitions(${ELSA_MODULE_TARGET_NAME} PUBLIC ELSA_ENABLE_CUDA_VECTOR)
endif()
......
......@@ -29,6 +29,7 @@ target_include_directories(${ELSA_MODULE_TARGET_NAME}
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
# Add spdlog as header only libary
target_link_libraries(${ELSA_MODULE_TARGET_NAME} PUBLIC spdlog::spdlog_header_only)
# require C++17
......
Subproject commit a2c8dce85c554aa30607914c57be300feaa3b05f
Subproject commit c1b0aea653f6fec269264230f67b59cad5517937
Subproject commit d96c34516d276f4c33d25df23d5934af1c5b2406
Subproject commit a5bf6e06bb213d75bdcbfc39af0ec21b5dd08963
Subproject commit 616caa5d30172b65cc3a06800894c575d70cb8e6
From ef3cc72cb65e2d500459c178c63e349bacfa834f Mon Sep 17 00:00:00 2001
From: Luke Peterson <hazelnusse@gmail.com>
Date: Thu, 8 Oct 2020 12:16:53 -0700
Subject: [PATCH 3/3] Remove error counting in OpenMP parallelize_gemm
This resolves a compilation error associated with
Eigen::eigen_assert_exception. It also eliminates the counting of
exceptions that may occur in the OpenMP parallel section. If an
unhandled exception occurs in this section, the behavior is non-conforming
according to the OpenMP specification.
---
Eigen/src/Core/products/Parallelizer.h | 14 +++++---------
test/CMakeLists.txt | 2 +-
2 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/Eigen/src/Core/products/Parallelizer.h b/Eigen/src/Core/products/Parallelizer.h
index 67b2442b5..a3cc05b77 100644
--- a/Eigen/src/Core/products/Parallelizer.h