Update ascent and deps for 0.8.x (#29954)

* Update package versions for Ascent/SDK

* Umpire build static for cuda from dray

* Propagate cuda_arch for ascent and dray packages.

* Ascent: Update dependency versions for ascent@0.8:

* VTK-h: Patch +shared+cuda for VTK-h 0.8.x

* Ascent: Patch to allow @0.8: +shared+cuda

* Turn off building ascent tests.

* Update ascent patch

* WIP: Ascent: Update patch to configure MPI build with CUDA

* Ascent: Tests require vtk-m+testlib

* WIP: Ascent: Constrain 0.7 for vtk-h

* Ascent: Directly depend on VTK-m
This commit is contained in:
kwryankrattiger 2022-04-27 14:39:18 -05:00 committed by GitHub
parent f7a9456553
commit 893c5271ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 372 additions and 49 deletions

View File

@ -0,0 +1,256 @@
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 730ea3b4..2d3adc93 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -387,6 +387,13 @@ stages:
# static linking unit tests eats up alot of disk space,
# so skip building tests in CI to keep us away from clif
ENABLE_TESTS: OFF
+ cuda-11.4.0-shared:
+ containerImage: ${{ variables.ubuntu_18_cuda_11_4_0_tag }}
+ BUILD_SHARED_LIBS: ON
+ CMAKE_BUILD_TYPE: Release
+ ENABLE_BABELFLOW: OFF
+ # shared linking unit tests shouldn't eat disk space,
+ ENABLE_TESTS: ON
container: $[ variables['containerImage'] ]
steps:
- checkout: self
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index bd0187e0..ec3553c7 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -50,10 +50,6 @@ else()
cmake_minimum_required(VERSION 3.9)
endif()
-if(ENABLE_CUDA AND BUILD_SHARED_LIBS)
- message(FATAL_ERROR "Static libraries are required when building with CUDA")
-endif()
-
if(ENABLE_CUDA)
# ask politely a few times for SEPARABLE COMPILATION
set (CMAKE_CUDA_SEPARABLE_COMPILATION ON CACHE BOOL "" )
diff --git a/src/ascent/CMakeLists.txt b/src/ascent/CMakeLists.txt
index fe9ce937..7f94a82b 100644
--- a/src/ascent/CMakeLists.txt
+++ b/src/ascent/CMakeLists.txt
@@ -187,6 +187,10 @@ if(ASCENT_JIT_ENABLED)
set_source_files_properties(runtimes/expressions/ascent_array_internals.cpp PROPERTIES LANGUAGE CUDA)
set_source_files_properties(runtimes/expressions/ascent_derived_jit.cpp PROPERTIES LANGUAGE CUDA)
endif()
+ list(APPEND ascent_device_sources
+ runtimes/expressions/ascent_array.cpp
+ runtimes/expressions/ascent_array_internals.cpp
+ runtimes/expressions/ascent_derived_jit.cpp)
endif()
if(VTKM_FOUND)
@@ -213,6 +217,11 @@ if(VTKM_FOUND)
runtimes/flow_filters/ascent_runtime_conduit_to_vtkm_parsing.cpp
runtimes/ascent_main_runtime.cpp)
+ set(ascent_vtkm_device_sources
+ ${ascent_vtkh_dep_sources}
+ runtimes/flow_filters/ascent_runtime_blueprint_filters.cpp)
+ list(APPEND ascent_device_sources ${ascent_vtkm_device_sources})
+
foreach( _itm ${ascent_vtkh_dep_headers} )
list(APPEND ascent_headers ${_itm})
endforeach()
@@ -239,6 +248,7 @@ endif()
if(GENTEN_FOUND)
list(APPEND ascent_headers runtimes/flow_filters/ascent_runtime_genten_filters.hpp)
list(APPEND ascent_sources runtimes/flow_filters/ascent_runtime_genten_filters.cpp)
+ list(APPEND ascent_device_sources runtimes/flow_filters/ascent_runtime_genten_filters.cpp)
endif()
##############################
@@ -351,24 +361,7 @@ if (ENABLE_SERIAL)
endif()
if(VTKM_FOUND)
- set(ascent_device_sources ${ascent_vtkh_dep_sources})
- list(APPEND ascent_device_sources runtimes/flow_filters/ascent_runtime_blueprint_filters.cpp)
-
- vtkm_add_target_information(ascent DEVICE_SOURCES ${ascent_device_sources})
- endif()
-
- if(ASCENT_JIT_ENABLED)
- if(CUDA_FOUND)
- list(APPEND ascent_device_sources runtimes/expressions/ascent_array.cpp)
- list(APPEND ascent_device_sources runtimes/expressions/ascent_array_internals.cpp)
- list(APPEND ascent_device_sources runtimes/expressions/ascent_derived_jit.cpp)
- endif()
- endif()
-
- if(GENTEN_FOUND)
- if(CUDA_FOUND)
- list(APPEND ascent_device_sources runtimes/flow_filters/ascent_runtime_genten_filters.cpp)
- endif()
+ vtkm_add_target_information(ascent DEVICE_SOURCES ${ascent_vtkm_device_sources})
endif()
# install target for serial ascent lib
@@ -380,35 +373,43 @@ if (ENABLE_SERIAL)
)
- if(VTKM_FOUND AND CUDA_FOUND)
+ # Static linking CUDA
+ if(VTKM_FOUND AND CUDA_FOUND AND NOT BUILD_SHARED_LIBS)
set(locations_on_disk "")
set(binary_dir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/ascent.dir")
set(targets_to_link rover
- vtkh_rendering
- vtkh_compositing
- vtkh_filters
- vtkh_core
- vtkh_lodepng
- vtkh_utils
- vtkm_io
- vtkm_rendering
- vtkm_filter_common
- vtkm_filter_contour
- vtkm_filter_gradient
- vtkm_filter_extra
- vtkm_worklet
- vtkm_source
- vtkm_cont
- vtkm_cont_testing
- vtkm_lodepng
- vtkmdiympi_nompi
- )
+ vtkh_rendering
+ vtkh_compositing
+ vtkh_filters
+ vtkh_core
+ vtkh_lodepng
+ vtkh_utils
+ vtkmdiympi_nompi
+ vtkm_io
+ vtkm_rendering
+ vtkm_filter_common
+ vtkm_filter_contour
+ vtkm_filter_gradient
+ vtkm_filter_extra
+ vtkm_worklet
+ vtkm_source
+ vtkm_cont
+ vtkm_lodepng
+ )
+
+ if(ENABLE_TESTS)
+ if (NOT TARGET vtkm_cont_testing)
+ message(FATAL_ERROR "ENABLE_TESTS requires a VTKm that provides vtkm_cont_testing")
+ endif ()
+ list(APPEND targets_to_link
+ vtkm_cont_testing)
+ endif()
source_objects(${binary_dir}
"${ascent_device_sources}"
- "${CMAKE_BINARY_DIR}/lib/librover.a"
+ "$<TARGET_FILE:rover>"
"${targets_to_link}"
locations_on_disk)
@@ -502,7 +503,7 @@ if(MPI_FOUND)
endif()
if(VTKM_FOUND)
- vtkm_add_target_information(ascent_mpi DEVICE_SOURCES ${ascent_device_sources})
+ vtkm_add_target_information(ascent_mpi DEVICE_SOURCES ${ascent_vtkm_device_sources})
endif()
blt_add_target_compile_flags(TO ascent_mpi FLAGS "-DASCENT_MPI_ENABLED")
@@ -514,35 +515,48 @@ if(MPI_FOUND)
RUNTIME DESTINATION lib
)
- if(VTKM_FOUND AND CUDA_FOUND)
+ # Static linking CUDA
+ if(VTKM_FOUND AND CUDA_FOUND AND NOT BUILD_SHARED_LIBS)
set(locations_on_disk "")
-
set(binary_dir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/ascent_mpi.dir")
- set(targets_to_link rover
- vtkh_rendering_mpi
- vtkh_compositing_mpi
- vtkh_filters_mpi
- vtkh_core_mpi
- vtkh_lodepng
- vtkh_utils_mpi
- vtkm_io
- vtkm_rendering
- vtkm_filter_common
- vtkm_filter_contour
- vtkm_filter_gradient
- vtkm_filter_extra
- vtkm_worklet
- vtkm_source
- vtkm_cont
- vtkm_cont_testing
- vtkm_lodepng
- vtkmdiympi_nompi
- )
+ set(targets_to_link
+ rover
+ vtkh_rendering_mpi
+ vtkh_compositing_mpi
+ vtkh_filters_mpi
+ vtkh_core_mpi
+ vtkh_utils_mpi
+ vtkm_io
+ vtkm_rendering
+ vtkm_filter_common
+ vtkm_filter_contour
+ vtkm_filter_gradient
+ vtkm_filter_extra
+ vtkm_worklet
+ vtkm_source
+ vtkm_cont
+ vtkm_lodepng
+ )
+
+ if(TARGET vtkmdiympi_nompi)
+ list(APPEND targets_to_link vtkmdiympi_nompi)
+ endif()
+ if(TARGET vtkmdiympi)
+ list(APPEND targets_to_link vtkmdiympi)
+ endif()
+
+ if(ENABLE_TESTS)
+ if (NOT TARGET vtkm_cont_testing)
+ message(FATAL_ERROR "ENABLE_TESTS requires a VTKm that provides vtkm_cont_testing")
+ endif ()
+ list(APPEND targets_to_link
+ vtkm_cont_testing)
+ endif()
source_objects(${binary_dir}
"${ascent_device_sources}"
- "${CMAKE_BINARY_DIR}/lib/librover_mpi.a"
+ "$<TARGET_FILE:rover_mpi>"
"${targets_to_link}"
locations_on_disk)
diff --git a/src/cmake/thirdparty/SetupVTKm.cmake b/src/cmake/thirdparty/SetupVTKm.cmake
index 5dbd9aa3..b0dbde2c 100644
--- a/src/cmake/thirdparty/SetupVTKm.cmake
+++ b/src/cmake/thirdparty/SetupVTKm.cmake
@@ -26,6 +26,11 @@ if(ENABLE_CUDA AND NOT VTKm_ENABLE_CUDA)
message(FATAL_ERROR "Ascent CUDA support requires VTK-m with CUDA support (ENABLE_CUDA == TRUE, however VTKm_ENABLE_CUDA == FALSE")
endif()
+if(ENABLE_CUDA AND BUILD_SHARED_LIBS)
+ if(VTKm_VERSION VERSION_LESS "1.7.0")
+ message(FATAL_ERROR "Cannot build shared libs with CUDA when VTKm is < v1.7.0")
+ endif()
+endif()
set(VTKM_FOUND TRUE)

View File

@ -44,11 +44,15 @@ class Ascent(CMakePackage, CudaPackage):
branch='develop',
submodules=True)
version('0.7.1',
tag='v0.7.1',
version('0.8.0',
tag='v0.8.0',
submodules=True,
preferred=True)
version('0.7.1',
tag='v0.7.1',
submodules=True)
version('0.7.0',
tag='v0.7.0',
submodules=True)
@ -95,13 +99,30 @@ class Ascent(CMakePackage, CudaPackage):
# so folks can build 0.7.1 with those compilers
patch("ascent-gcc-11-pr753.patch", when="@0.7.1")
# patch for allowing +shared+cuda
# https://github.com/Alpine-DAV/ascent/pull/903
patch('ascent-shared-cuda-pr903.patch', when='@0.8.0')
##########################################################################
# package dependencies
###########################################################################
def propagate_cuda_arch(package, spec=None):
if not spec:
spec = ''
for cuda_arch in CudaPackage.cuda_arch_values:
depends_on('{0} +cuda cuda_arch={1}'
.format(package, cuda_arch),
when='{0} +cuda cuda_arch={1}'
.format(spec, cuda_arch))
# Certain CMake versions have been found to break for our use cases
depends_on("cmake@3.14.1:3.14,3.18.2:", type='build')
#######################
# Conduit
#######################
depends_on("conduit@:0.7.2", when="@:0.7.1")
depends_on("conduit@0.8.2:", when="@0.8:")
depends_on("conduit+python", when="+python")
depends_on("conduit~python", when="~python")
depends_on("conduit+mpi", when="+mpi")
@ -135,13 +156,19 @@ class Ascent(CMakePackage, CudaPackage):
#############################
depends_on("vtk-h", when="+vtkh")
depends_on("vtk-h@:0.7", when="@:0.7 +vtkh")
depends_on("vtk-h@0.8.1:", when="@0.8: +vtkh")
# propagate relevent variants to vtk-h
depends_on("vtk-h+openmp", when="+vtkh+openmp")
depends_on("vtk-h~openmp", when="+vtkh~openmp")
depends_on("vtk-h+cuda", when="+vtkh+cuda")
depends_on("vtk-h~cuda", when="+vtkh~cuda")
propagate_cuda_arch('vtk-h', '+vtkh')
depends_on("vtk-h+shared", when="+vtkh+shared")
depends_on("vtk-h~shared", when="+vtkh~shared")
# When using VTK-h ascent also needs VTK-m
depends_on("vtk-m", when="+vtkh")
depends_on("vtk-m+testlib", when="+vtkh+test^vtk-m")
# mfem
depends_on("mfem~threadsafe~openmp+conduit", when="+mfem")
@ -157,9 +184,11 @@ class Ascent(CMakePackage, CudaPackage):
# devil ray variants with mpi
# we have to specify both because mfem makes us
depends_on('dray~test~utils', when='+dray')
depends_on('dray@0.1.8:', when='@0.8: +dray')
# propagate relevent variants to dray
depends_on('dray+cuda', when='+dray+cuda')
depends_on('dray~cuda', when='+dray~cuda')
propagate_cuda_arch('dray', '+dray')
depends_on('dray+mpi', when='+dray+mpi')
depends_on('dray~mpi', when='+dray~mpi')
depends_on('dray+shared', when='+dray+shared')
@ -184,7 +213,7 @@ class Ascent(CMakePackage, CudaPackage):
###########
# Conflicts
###########
conflicts("+shared", when="+cuda",
conflicts("+shared", when="@:0.7 +cuda",
msg="Ascent needs to be built with ~shared for CUDA builds.")
def setup_build_environment(self, env):

View File

@ -44,7 +44,6 @@ class Dray(Package, CudaPackage):
version('0.1.1', sha256='e5daa49ee3367c087f5028dc5a08655298beb318014c6f3f65ef4a08fcbe346c')
version('0.1.0', sha256='8b341138e1069361351e0a94478608c5af479cca76e2f97d556229aed45c0169')
variant('cuda', default=False, description='Build with CUDA backend')
variant('openmp', default=True, description='Build OpenMP backend')
variant("shared", default=True, description="Build as shared libs")
variant("test", default=True, description='Build unit tests')
@ -55,7 +54,15 @@ class Dray(Package, CudaPackage):
# set to false for systems that implicitly link mpi
variant('blt_find_mpi', default=True, description='Use BLT CMake Find MPI logic')
depends_on('cuda', when='+cuda')
def propagate_cuda_arch(package, spec=None):
if not spec:
spec = ''
for cuda_arch in CudaPackage.cuda_arch_values:
depends_on('{0} +cuda cuda_arch={1}'
.format(package, cuda_arch),
when='{0} +cuda cuda_arch={1}'
.format(spec, cuda_arch))
depends_on('mpi', when='+mpi')
depends_on('cmake@3.9:', type='build')
@ -64,34 +71,34 @@ class Dray(Package, CudaPackage):
depends_on("conduit~shared", when="~shared")
depends_on("conduit+shared", when="+shared")
depends_on("apcomp~shared+openmp+mpi", when="~shared+openmp+mpi")
depends_on("apcomp+shared+openmp+mpi", when="+shared+openmp+mpi")
depends_on("apcomp~shared~openmp+mpi", when="~shared~openmp+mpi")
depends_on("apcomp+shared~openmp+mpi", when="+shared~openmp+mpi")
depends_on("apcomp~shared+openmp~mpi", when="~shared+openmp~mpi")
depends_on("apcomp+shared+openmp~mpi", when="+shared+openmp~mpi")
depends_on("apcomp~shared~openmp~mpi", when="~shared~openmp~mpi")
depends_on("apcomp+shared~openmp~mpi", when="+shared~openmp~mpi")
depends_on("apcomp~mpi", when="~mpi")
depends_on("apcomp+mpi", when="+mpi")
depends_on("apcomp~openmp", when="~openmp")
depends_on("apcomp+openmp", when="+openmp")
depends_on("apcomp~shared", when="~shared")
depends_on("apcomp+shared", when="+shared")
depends_on("raja@:0.13", when="@:0.1.6")
depends_on("raja+cuda~openmp+shared", when="+cuda~openmp+shared")
depends_on("raja+cuda+openmp+shared", when="+cuda+openmp+shared")
depends_on("raja+cuda~openmp~shared", when="+cuda~openmp~shared")
depends_on("raja+cuda+openmp~shared", when="+cuda+openmp~shared")
depends_on("raja~cuda~openmp+shared", when="~cuda~openmp+shared")
depends_on("raja~cuda+openmp+shared", when="~cuda+openmp+shared")
depends_on("raja~cuda~openmp~shared", when="~cuda~openmp~shared")
depends_on("raja~cuda+openmp~shared", when="~cuda+openmp~shared")
depends_on("raja~cuda", when="~cuda")
depends_on("raja+cuda", when="+cuda")
propagate_cuda_arch('raja')
depends_on("raja~shared", when="~shared")
depends_on("raja+shared", when="+shared")
depends_on("raja~openmp", when="~openmp")
depends_on("raja+openmp", when="+openmp")
depends_on("umpire@:4.9", when="@:0.1.6")
depends_on("umpire+cuda+shared", when="+cuda+shared")
depends_on("umpire+cuda~shared", when="+cuda~shared")
# Only use umpire cuda if not shared.
depends_on("umpire+cuda", when="+cuda")
depends_on("umpire~cuda", when="~cuda")
depends_on("umpire+cuda~shared", when="+cuda+shared")
depends_on("umpire~cuda+shared", when="~cuda+shared")
depends_on("umpire~cuda~shared", when="~cuda~shared")
propagate_cuda_arch('umpire')
depends_on("umpire~shared", when="~shared")
depends_on("mfem+shared+conduit~threadsafe", when="+shared")
depends_on("mfem~shared+conduit~threadsafe", when="~shared")
depends_on("mfem+conduit~threadsafe")
depends_on("mfem+shared", when="+shared")
depends_on("mfem~shared", when="~shared")
def setup_build_environment(self, env):
env.set('CTEST_OUTPUT_ON_FAILURE', '1')

View File

@ -125,14 +125,12 @@ def exclude_variants(variants, exclude):
dav_sdk_depends_on('sensei@develop +vtkio +python ~miniapps', when='+sensei',
propagate=dict(propagate_to_sensei))
dav_sdk_depends_on('ascent+mpi+fortran+openmp+python+shared+vtkh+dray',
dav_sdk_depends_on('ascent+mpi+fortran+openmp+python+shared+vtkh+dray~test',
when='+ascent',
propagate=['adios2'] + cuda_arch_variants)
propagate=['adios2', 'cuda'] + cuda_arch_variants)
# Need to explicitly turn off conduit hdf5_compat in order to build
# hdf5@1.12 which is required for SDK
depends_on('ascent ^conduit ~hdf5_compat', when='+ascent +hdf5')
depends_on('ascent~cuda', when='+ascent~cuda')
depends_on('ascent+cuda', when='+ascent+cuda ^vtk-m@1.7:')
# Disable configuring with @develop. This should be removed after ascent
# releases 0.8 and ascent can build with conduit@0.8: and vtk-m@1.7:
conflicts('ascent@develop')
@ -153,15 +151,11 @@ def exclude_variants(variants, exclude):
dav_sdk_depends_on('visit', when='+visit')
dav_sdk_depends_on('vtk-m+shared+mpi+openmp+rendering',
dav_sdk_depends_on('vtk-m@1.7:+shared+mpi+openmp+rendering',
when='+vtkm',
propagate=['cuda'] + cuda_arch_variants)
depends_on('vtk-m +rocm', when='+vtkm +rocm ^vtk-m@1.7:')
for amdgpu_target in amdgpu_target_variants:
depends_on('vtk-m {0}'.format(amdgpu_target),
when='+vtkm {0} ^vtk-m@1.7:'.format(amdgpu_target))
# depends_on('vtk-m ~rocm', when='+vtkm +rocm ^vtk-m@:1.6')
propagate=['cuda', 'rocm']
+ cuda_arch_variants
+ amdgpu_target_variants)
# +python is currently broken in sz
# dav_sdk_depends_on('sz+shared+fortran+python+random_access',

View File

@ -39,6 +39,8 @@ class VtkH(Package, CudaPackage):
maintainers = ['cyrush']
version('develop', branch='develop', submodules=True)
version('0.8.1', sha256="0cb1c84087e2b9385477fba3e7e197d6eabe1d366bd3bc87d7824e50dcdbe057")
version('0.8.0', sha256="8366ebfe094c258555f343ba1f9bbad1d8e4804f844768b639f6ff13a6390f29")
version('0.7.1', sha256="f28f7e6fb0f854a2293265b67cbdfb350b42c13ac08ffffe9cd246f3fe9fb77a")
version('0.7.0', sha256="1b3c15c1340c5f66edcc2962ffe2f0d86e155f45a4932cf9c407261c203fbc19")
version('0.6.9', sha256="8111f59c3528f02cb3c5083c17a1737dff9472266b156732794612471f3393c7")
@ -61,7 +63,6 @@ class VtkH(Package, CudaPackage):
variant("shared", default=True, description="Build vtk-h as shared libs")
variant("mpi", default=True, description="build mpi support")
variant("serial", default=True, description="build serial (non-mpi) libraries")
variant("cuda", default=False, description="build cuda support")
variant("openmp", default=(sys.platform != 'darwin'),
description="build openmp support")
variant("logging", default=False, description="Build vtk-h with logging enabled")
@ -71,20 +72,23 @@ class VtkH(Package, CudaPackage):
depends_on("cmake@3.14.1:3.14,3.18.2:", type='build')
depends_on("mpi", when="+mpi")
depends_on("cuda", when="+cuda")
depends_on("vtk-m@:1.6~tbb+openmp", when="+openmp")
depends_on("vtk-m@:1.6~tbb~openmp", when="~openmp")
depends_on("vtk-m~tbb")
depends_on("vtk-m@:1.6", when="@:0.7")
depends_on("vtk-m@1.7:", when="@0.8:")
depends_on("vtk-m+openmp", when="+openmp")
depends_on("vtk-m~openmp", when="~openmp")
depends_on("vtk-m~cuda", when="~cuda")
depends_on("vtk-m+cuda", when="+cuda")
for _arch in CudaPackage.cuda_arch_values:
depends_on("vtk-m@:1.6+cuda~tbb+openmp cuda_arch={0}".format(_arch), when="+cuda+openmp cuda_arch={0}".format(_arch))
depends_on("vtk-m@:1.6+cuda~tbb~openmp cuda_arch={0}".format(_arch), when="+cuda~openmp cuda_arch={0}".format(_arch))
depends_on("vtk-m cuda_arch={0}".format(_arch), when="+cuda cuda_arch={0}".format(_arch))
depends_on("vtk-m@:1.6~tbb+openmp~shared", when="+openmp~shared")
depends_on("vtk-m@:1.6~tbb~openmp~shared", when="~openmp~shared")
depends_on("vtk-m+shared", when="+shared")
depends_on("vtk-m~shared", when="~shared")
depends_on("vtk-m@:1.6+cuda~tbb+openmp~shared", when="+cuda+openmp~shared")
depends_on("vtk-m@:1.6+cuda~tbb~openmp~shared", when="+cuda~openmp~shared")
patch('vtk-h-shared-cuda.patch', when='@0.8.0,0.8.1 +cuda')
def install(self, spec, prefix):
with working_dir('spack-build', create=True):

View File

@ -0,0 +1,32 @@
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1379294..6de15c3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -61,11 +61,6 @@ if(NOT ENABLE_SERIAL AND NOT ENABLE_MPI)
"Please set ENABLE_SERIAL, ENABLE_MPI or both to ON")
endif()
-
-if(ENABLE_CUDA AND BUILD_SHARED_LIBS)
- message(FATAL_ERROR "Static libraries are required when building with CUDA")
-endif()
-
if(ENABLE_CUDA)
# ask politely a few times for SEPARABLE COMPILATION
set (CMAKE_CUDA_SEPARABLE_COMPILATION ON CACHE BOOL "" )
diff --git a/src/cmake/thirdparty/SetupVTKm.cmake b/src/cmake/thirdparty/SetupVTKm.cmake
index 1bc5b56..e242738 100644
--- a/src/cmake/thirdparty/SetupVTKm.cmake
+++ b/src/cmake/thirdparty/SetupVTKm.cmake
@@ -64,6 +64,11 @@ if(ENABLE_CUDA AND NOT VTKm_ENABLE_CUDA)
message(FATAL_ERROR "VTK-h CUDA support requires VTK-m with CUDA support (ENABLE_CUDA == TRUE, however VTKm_ENABLE_CUDA == FALSE")
endif()
+if(ENABLE_CUDA AND BUILD_SHARED_LIBS)
+ if(VTKm_VERSION VERSION_LESS "1.7.0")
+ message(FATAL_ERROR "Cannot build shared libs with CUDA when VTKm is < v1.7.0")
+ endif()
+endif()
set(VTKM_FOUND TRUE)

View File

@ -105,6 +105,7 @@ class VtkM(CMakePackage, CudaPackage, ROCmPackage):
# Can build +shared+cuda after @1.7:
conflicts("+shared", when="@:1.6 +cuda_native")
conflicts("+cuda~cuda_native~kokkos", msg="Cannot have +cuda without a cuda device")
conflicts("+cuda~cuda_native", when="@:1.5", msg="Cannot have +cuda without a cuda device")
conflicts("+cuda", when="cuda_arch=none",
msg="vtk-m +cuda requires that cuda_arch be set")