diff --git a/CMakeLists.txt b/CMakeLists.txt index 4fb85d091..2e3956ac2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,8 +10,11 @@ if(NOT DEFINED ENV{FOAM_SRC}) message(FATAL_ERROR "You must source OpenFOAM before building OGL") endif() -# Configuration options +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) +# Configuration options include(cmake/build_type_helpers.cmake) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules/") @@ -23,17 +26,23 @@ option(OGL_USE_FOAM_FOUNDATION_VERSION option(OGL_BUILD_UNITTEST "Build OGL unittests" FALSE) option(OGL_CUDA_ARCHITECTURES "Which cuda architecture to build for" "native") option(OGL_DP_LABELS "Compile for 64bit label size" FALSE) -option(GINKGO_BUILD_CUDA "Build Ginkgo with cuda backend" FALSE) -option(GINKGO_BUILD_HIP "Build Ginkgo with hip backend" FALSE) -option(GINKGO_BUILD_SYCL "Build Ginkgo with sycl backend" FALSE) -option(GINKGO_BUILD_OMP "Build Ginkgo with omp backend" FALSE) option(GINKGO_BUILD_REFERENCE "Build Ginkgo with reference backend" TRUE) option(OGL_ALLOW_REFERENCE_ONLY "Enable builds of Ginkgo with reference backend only" FALSE) -option(GINKGO_FORCE_GPU_AWARE_MPI "Build Ginkgo using device aware MPI" TRUE) option(GINKGO_WITH_OGL_EXTENSIONS "Whether ginkgo was build with OGL extension" FALSE) +option(GINKGO_FORCE_GPU_AWARE_MPI "Build Ginkgo using device aware MPI" TRUE) +option(GINKGO_BUILD_CUDA "Build Ginkgo with cuda backend" FALSE) +option(GINKGO_BUILD_HIP "Build Ginkgo with hip backend" FALSE) +option(GINKGO_BUILD_SYCL "Build Ginkgo with sycl backend" FALSE) +option(GINKGO_BUILD_OMP "Build Ginkgo with omp backend" FALSE) + +set(GINKGO_BUILD_MPI ON CACHE INTERNAL "") +set(GINKGO_BUILD_TESTS OFF CACHE INTERNAL "") +set(GINKGO_BUILD_EXAMPLES OFF CACHE INTERNAL "") +set(GINKGO_BUILD_BENCHMARKS OFF CACHE INTERNAL "") + if(NOT OGL_ALLOW_REFERENCE_ONLY) if((NOT GINKGO_BUILD_CUDA) AND (NOT GINKGO_BUILD_HIP) @@ -46,7 +55,7 @@ if(NOT OGL_ALLOW_REFERENCE_ONLY) endif() set(GINKGO_CHECKOUT_VERSION - "fc86d48b78cebd2b2c5833a2dcf0fe40f615cf19" + "sparse-communicator-cmake-modernization-ogl" CACHE STRING "Use specific version of ginkgo") include(CheckIncludeFileCXX) @@ -60,24 +69,6 @@ ginkgo_find_package(Ginkgo "Ginkgo::ginkgo" FALSE 1.7.0) add_subdirectory(third_party) -# If ginkgo is not found at this point, look for the third_party installation -if(NOT ${OGL_USE_EXTERNAL_GINKGO}) - find_package( - Ginkgo - CONFIG - 1.7.0 - REQUIRED - PATHS - $ENV{FOAM_USER_LIBBIN}/cmake/Ginkgo - ${CMAKE_CURRENT_BINARY_DIR}/third_party/ginkgo/build/install/lib/cmake) -endif() - -# C++ 14 standard or later is required to interface with Ginkgo OGL itself uses -# some c++ 17 features - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -O0 -ggdb") set(CMAKE_CXX_FLAGS_RELEASE @@ -204,8 +195,7 @@ target_include_directories( target_link_libraries( OGL PRIVATE $ENV{FOAM_LIBBIN}/libOpenFOAM.so $ENV{FOAM_LIBBIN}/libfiniteVolume.so - $ENV{FOAM_LIBBIN}/$ENV{FOAM_MPI}/libPstream.so - PUBLIC Ginkgo::ginkgo stdc++fs) + $ENV{FOAM_LIBBIN}/$ENV{FOAM_MPI}/libPstream.so Ginkgo::ginkgo stdc++fs) if(${GINKGO_WITH_OGL_EXTENSIONS}) target_compile_definitions(OGL PRIVATE GINKGO_WITH_OGL_EXTENSIONS=1) @@ -237,4 +227,12 @@ add_custom_target( COMMAND find . -name CMakeLists.txt -exec cmake-format -i {} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) -install(TARGETS OGL DESTINATION $ENV{FOAM_USER_LIBBIN}) +install(TARGETS OGL + ginkgo + ginkgo_device + ginkgo_hip + ginkgo_cuda + ginkgo_omp + ginkgo_dpcpp + ginkgo_reference + DESTINATION $ENV{FOAM_USER_LIBBIN}) diff --git a/CMakePresets.json b/CMakePresets.json index 890dd7613..b62aed332 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -13,7 +13,8 @@ "generator": "Ninja", "binaryDir": "${sourceDir}/build/Release", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_INSTALL_PREFIX": "$env{FOAM_USER_LIBBIN}/.." } }, { diff --git a/third_party/ginkgo/CMakeLists.txt b/third_party/ginkgo/CMakeLists.txt index 6e46f7456..144b55592 100644 --- a/third_party/ginkgo/CMakeLists.txt +++ b/third_party/ginkgo/CMakeLists.txt @@ -1,20 +1,16 @@ # TODO pass flags from main CMAKE file -ginkgo_load_git_package( - ginkgo_external - "https://github.com/ginkgo-project/ginkgo.git" - ${GINKGO_CHECKOUT_VERSION} - "-DGINKGO_BUILD_CUDA=${GINKGO_BUILD_CUDA}" - "-DGINKGO_BUILD_HIP=${GINKGO_BUILD_HIP}" - "-DGINKGO_BUILD_OMP=${GINKGO_BUILD_OMP}" - "-DGINKGO_BUILD_MPI=ON" - "-DGINKGO_BUILD_TESTS=OFF" - "-DGINKGO_BUILD_EXAMPLES=OFF" - "-DGINKGO_BUILD_BENCHMARKS=OFF" - "-DGINKGO_BUILD_REFERENCE=${GINKGO_BUILD_REFERENCE}" - "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" - "-DCMAKE_CUDA_ARCHITECTURES=${OGL_CUDA_ARCHITECTURES}" - "-DGINKGO_BUILD_HWLOC=OFF" - "-DGINKGO_FORCE_GPU_AWARE_MPI=${GINKGO_FORCE_GPU_AWARE_MPI}" - "-DCMAKE_INSTALL_PREFIX=$ENV{FOAM_USER_LIBBIN}/.." - "-DBUILD_SHARED_LIBS=ON" - "-DCMAKE_CXX_STANDARD=17") +include(FetchContent) + +if(NOT ${OGL_USE_EXTERNAL_GINKGO}) + FetchContent_Declare( + Ginkgo + QUITE + GIT_SHALLOW ON + GIT_REPOSITORY "https://github.com/ginkgo-project/ginkgo.git" + GIT_TAG ${GINKGO_CHECKOUT_VERSION} + ) + + FetchContent_MakeAvailable(Ginkgo) + +endif() +