From c0f49d6112ec447a333da1508a855d8aad34dadd Mon Sep 17 00:00:00 2001 From: Kenneth Moreland Date: Thu, 12 Nov 2015 14:25:34 -0700 Subject: [PATCH] Update vtkm_configure_device macro * Support a REQUIRED flag that only gives an error if that flag is given. * Move common configuration required for all devices (such as boost) to a special device named Base. * Make CUDA always capitalized to be consistent with the other CMake variables. * Rather than call include_directories, set a variable named VTKm_INCLUDE_DIRS. This is consistent with how most CMake packages work. * Make a CMake variable named VTKm_LIBRARIES containing all the libraries the configured devices need. * Automatically configure supported devices when loading the VTK-m package in CMake. --- CMake/UseVTKmBase.cmake | 48 ++++++++++++++++++++++ CMake/UseVTKmCUDA.cmake | 78 ++++++++++++++++++++++++++++++++++++ CMake/UseVTKmCuda.cmake | 84 --------------------------------------- CMake/UseVTKmSerial.cmake | 27 ++++--------- CMake/UseVTKmTBB.cmake | 43 ++++++++++---------- CMake/VTKmConfig.cmake.in | 19 +++++++++ CMake/VTKmMacros.cmake | 10 +++-- CMakeLists.txt | 10 +++-- 8 files changed, 188 insertions(+), 131 deletions(-) create mode 100644 CMake/UseVTKmBase.cmake create mode 100644 CMake/UseVTKmCUDA.cmake delete mode 100644 CMake/UseVTKmCuda.cmake diff --git a/CMake/UseVTKmBase.cmake b/CMake/UseVTKmBase.cmake new file mode 100644 index 000000000..d1241f0b3 --- /dev/null +++ b/CMake/UseVTKmBase.cmake @@ -0,0 +1,48 @@ +##============================================================================ +## Copyright (c) Kitware, Inc. +## All rights reserved. +## See LICENSE.txt for details. +## This software is distributed WITHOUT ANY WARRANTY; without even +## the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +## PURPOSE. See the above copyright notice for more information. +## +## Copyright 2015 Sandia Corporation. +## Copyright 2015 UT-Battelle, LLC. +## Copyright 2015 Los Alamos National Security. +## +## Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +## the U.S. Government retains certain rights in this software. +## +## Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National +## Laboratory (LANL), the U.S. Government retains certain rights in +## this software. +##============================================================================ + +# This is the base configuration for using the VTK-m library. All other +# device configurations rely on this. + +if (VTKm_Base_initialize_complete) + return() +endif (VTKm_Base_initialize_complete) + +# Find the Boost library. +if(NOT Boost_FOUND) + find_package(BoostHeaders ${VTKm_REQUIRED_BOOST_VERSION}) +endif() + +if (NOT Boost_FOUND) + message(STATUS "Boost not found") + set(VTKm_Base_FOUND) +else() + set(VTKm_Base_FOUND TRUE) +endif () + +# Set up all these dependent packages (if they were all found). +if (VTKm_Base_FOUND) + set(VTKm_INCLUDE_DIRS + ${VTKm_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + ) + + set(VTKm_Base_initialize_complete TRUE) +endif (VTKm_Base_FOUND) diff --git a/CMake/UseVTKmCUDA.cmake b/CMake/UseVTKmCUDA.cmake new file mode 100644 index 000000000..219886150 --- /dev/null +++ b/CMake/UseVTKmCUDA.cmake @@ -0,0 +1,78 @@ +##============================================================================ +## Copyright (c) Kitware, Inc. +## All rights reserved. +## See LICENSE.txt for details. +## This software is distributed WITHOUT ANY WARRANTY; without even +## the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +## PURPOSE. See the above copyright notice for more information. +## +## Copyright 2014 Sandia Corporation. +## Copyright 2014 UT-Battelle, LLC. +## Copyright 2014 Los Alamos National Security. +## +## Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +## the U.S. Government retains certain rights in this software. +## +## Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National +## Laboratory (LANL), the U.S. Government retains certain rights in +## this software. +##============================================================================ + +if (VTKm_CUDA_initialize_complete) + return() +endif (VTKm_CUDA_initialize_complete) + +vtkm_configure_device(Base) + +if (VTKm_Base_FOUND) + + set(VTKm_CUDA_FOUND ${VTKm_ENABLE_CUDA}) + if (NOT VTKm_CUDA_FOUND) + message(STATUS "This build of VTK-m does not include CUDA.") + endif () + + #--------------------------------------------------------------------------- + # Find CUDA library. + #--------------------------------------------------------------------------- + if (VTKm_CUDA_FOUND) + find_package(CUDA) + mark_as_advanced(CUDA_BUILD_CUBIN + CUDA_BUILD_EMULATION + CUDA_HOST_COMPILER + CUDA_SDK_ROOT_DIR + CUDA_SEPARABLE_COMPILATION + CUDA_TOOLKIT_ROOT_DIR + CUDA_VERBOSE_BUILD + ) + + if (NOT CUDA_FOUND) + message(STATUS "CUDA not found") + set(VTKm_CUDA_FOUND) + endif () + endif () + + #--------------------------------------------------------------------------- + # Find Thrust library. + #--------------------------------------------------------------------------- + if (VTKm_CUDA_FOUND) + find_package(Thrust) + + if (NOT THRUST_FOUND) + message(STATUS "Thrust not found") + set(VTKm_CUDA_FOUND) + endif () + endif () + +endif () # VTKm_Base_FOUND + +#----------------------------------------------------------------------------- +# Set up all these dependent packages (if they were all found). +#----------------------------------------------------------------------------- +if (VTKm_CUDA_FOUND) + set(VTKm_INCLUDE_DIRS + ${VTKm_INCLUDE_DIRS} + ${THRUST_INCLUDE_DIRS} + ) + + set(VTKm_CUDA_initialize_complete TRUE) +endif (VTKm_CUDA_FOUND) diff --git a/CMake/UseVTKmCuda.cmake b/CMake/UseVTKmCuda.cmake deleted file mode 100644 index 04f046196..000000000 --- a/CMake/UseVTKmCuda.cmake +++ /dev/null @@ -1,84 +0,0 @@ -##============================================================================ -## Copyright (c) Kitware, Inc. -## All rights reserved. -## See LICENSE.txt for details. -## This software is distributed WITHOUT ANY WARRANTY; without even -## the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -## PURPOSE. See the above copyright notice for more information. -## -## Copyright 2014 Sandia Corporation. -## Copyright 2014 UT-Battelle, LLC. -## Copyright 2014 Los Alamos National Security. -## -## Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, -## the U.S. Government retains certain rights in this software. -## -## Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National -## Laboratory (LANL), the U.S. Government retains certain rights in -## this software. -##============================================================================ - -if (VTKm_Cuda_initialize_complete) - return() -endif (VTKm_Cuda_initialize_complete) - -set(VTKm_Cuda_FOUND ${VTKm_ENABLE_CUDA}) -if (NOT VTKm_Cuda_FOUND) - message(STATUS "This build of VTKm does not include Cuda.") -endif (NOT VTKm_Cuda_FOUND) - -# Find the Boost library. -if (VTKm_Cuda_FOUND) - if(NOT Boost_FOUND) - find_package(BoostHeaders ${VTKm_REQUIRED_BOOST_VERSION}) - endif() - - if (NOT Boost_FOUND) - message(STATUS "Boost not found") - set(VTKm_Cuda_FOUND) - endif (NOT Boost_FOUND) -endif (VTKm_Cuda_FOUND) - -#----------------------------------------------------------------------------- -# Find CUDA library. -#----------------------------------------------------------------------------- -if (VTKm_Cuda_FOUND) - find_package(CUDA) - mark_as_advanced(CUDA_BUILD_CUBIN - CUDA_BUILD_EMULATION - CUDA_HOST_COMPILER - CUDA_SDK_ROOT_DIR - CUDA_SEPARABLE_COMPILATION - CUDA_TOOLKIT_ROOT_DIR - CUDA_VERBOSE_BUILD - ) - - if (NOT CUDA_FOUND) - message(STATUS "CUDA not found") - set(VTKm_Cuda_FOUND) - endif (NOT CUDA_FOUND) -endif () - -#----------------------------------------------------------------------------- -# Find Thrust library. -#----------------------------------------------------------------------------- -if (VTKm_Cuda_FOUND) - find_package(Thrust) - - if (NOT THRUST_FOUND) - message(STATUS "Thrust not found") - set(VTKm_Cuda_FOUND) - endif (NOT THRUST_FOUND) -endif () - -#----------------------------------------------------------------------------- -# Set up all these dependent packages (if they were all found). -#----------------------------------------------------------------------------- -if (VTKm_Cuda_FOUND) - cuda_include_directories( - ${Boost_INCLUDE_DIRS} - ${THRUST_INCLUDE_DIRS} - ${VTKm_INCLUDE_DIRS} - ) - set(VTKm_Cuda_initialize_complete TRUE) -endif (VTKm_Cuda_FOUND) diff --git a/CMake/UseVTKmSerial.cmake b/CMake/UseVTKmSerial.cmake index 76479bedc..e96bbbfd0 100644 --- a/CMake/UseVTKmSerial.cmake +++ b/CMake/UseVTKmSerial.cmake @@ -22,26 +22,15 @@ if (VTKm_Serial_initialize_complete) return() endif (VTKm_Serial_initialize_complete) -# Find the Boost library. -if (NOT VTKm_Serial_FOUND) - if(NOT Boost_FOUND) - find_package(BoostHeaders ${VTKm_REQUIRED_BOOST_VERSION}) - endif() +vtkm_configure_device(Base) - if (NOT Boost_FOUND) - message(STATUS "Boost not found") - set(VTKm_Serial_FOUND FALSE) - else(NOT Boost_FOUND) - set(VTKm_Serial_FOUND TRUE) - endif (NOT Boost_FOUND) -endif (NOT VTKm_Serial_FOUND) +if (VTKm_Base_FOUND) + # Serial only relies on base configuration + set(VTKm_Serial_FOUND TRUE) +else () # !VTKm_Base_FOUND + set(VTKm_Serial_FOUND) +endif () -# Set up all these dependent packages (if they were all found). if (VTKm_Serial_FOUND) - include_directories( - ${Boost_INCLUDE_DIRS} - ${VTKm_INCLUDE_DIRS} - ) - set(VTKm_Serial_initialize_complete TRUE) -endif (VTKm_Serial_FOUND) +endif () diff --git a/CMake/UseVTKmTBB.cmake b/CMake/UseVTKmTBB.cmake index e008ea982..df48a35e2 100644 --- a/CMake/UseVTKmTBB.cmake +++ b/CMake/UseVTKmTBB.cmake @@ -22,36 +22,37 @@ if (VTKm_TBB_initialize_complete) return() endif (VTKm_TBB_initialize_complete) -#----------------------------------------------------------------------------- -# Find TBB. -#----------------------------------------------------------------------------- -if (NOT VTKm_TBB_FOUND) - find_package(TBB REQUIRED) - set (VTKm_TBB_FOUND ${TBB_FOUND}) -endif() +vtkm_configure_device(Base) -#----------------------------------------------------------------------------- -# Find the Boost library. -#----------------------------------------------------------------------------- -if (VTKm_TBB_FOUND) - if(NOT Boost_FOUND) - find_package(BoostHeaders ${VTKm_REQUIRED_BOOST_VERSION}) +if (VTKm_Base_FOUND) + + set(VTKm_TBB_FOUND ${VTKm_ENABLE_TBB}) + if (NOT VTKm_TBB_FOUND) + message(STATUS "This build of VTK-m does not include TBB.") + endif () + + #--------------------------------------------------------------------------- + # Find TBB. + #--------------------------------------------------------------------------- + if (VTKm_TBB_FOUND) + find_package(TBB) + if (NOT TBB_FOUND) + message(STATUS "TBB not found") + set(VTKm_TBB_FOUND) + endif () endif() - if (NOT Boost_FOUND) - message(STATUS "Boost not found") - set(VTKm_TBB_FOUND FALSE) - endif() -endif() +endif () #----------------------------------------------------------------------------- # Set up all these dependent packages (if they were all found). #----------------------------------------------------------------------------- if (VTKm_TBB_FOUND) - include_directories( - ${Boost_INCLUDE_DIRS} + set(VTKm_INCLUDE_DIRS ${VTKm_INCLUDE_DIRS} ${TBB_INCLUDE_DIRS} - ) + ) + set(VTKm_LIBRARIES ${TBB_LIBRARIES}) + set(VTKm_TBB_initialize_complete TRUE) endif() diff --git a/CMake/VTKmConfig.cmake.in b/CMake/VTKmConfig.cmake.in index 627df6113..896b0523a 100644 --- a/CMake/VTKmConfig.cmake.in +++ b/CMake/VTKmConfig.cmake.in @@ -18,6 +18,12 @@ ## this software. ##============================================================================ +# When this file is run by CMake (usually through the find_package command), +# The following variables will be defined: +# +# VTKm_INCLUDE_DIRS - Directories containing VTK-m and dependent headers +# VTKm_LIBRARIES - The libraries required when using VTK-m + # This file should be installed in the include directory. # Find the root directory. get_filename_component(_dir "${CMAKE_CURRENT_LIST_FILE}" PATH) @@ -35,6 +41,19 @@ set(VTKm_REQUIRED_BOOST_VERSION "@VTKm_REQUIRED_BOOST_VERSION@") set(VTKm_CMAKE_MODULE_PATH "@VTKm_CMAKE_MODULE_PATH_CONFIG@") +set(VTKm_ENABLE_CUDA "@VTKm_ENABLE_CUDA@") +set(VTKm_ENABLE_TBB "@VTKm_ENABLE_TBB@") + # VTKm requires some CMake Find modules not included with CMake, so # include the CMake modules distributed with VTKm. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${VTKm_CMAKE_MODULE_PATH}) + +include(VTKmMacros) + +vtkm_configure_device(Serial) +if(VTKm_ENABLE_CUDA) + vtkm_configure_device(CUDA) +endif() +if(VTKm_ENABLE_TBB) + vtkm_configure_device(TBB) +endif() diff --git a/CMake/VTKmMacros.cmake b/CMake/VTKmMacros.cmake index 2c5d82b61..01ab1acdd 100644 --- a/CMake/VTKmMacros.cmake +++ b/CMake/VTKmMacros.cmake @@ -421,7 +421,7 @@ function(vtkm_save_benchmarks) #create the benchmarks driver when we are called, since #the driver expects the files to be in the same #directory as the test driver - #TODO: This is probably ok to use for benchmarks as well + #TODO: This is probably ok to use for benchmarks as well create_test_sourcelist(bench_sources BenchmarkDriver.cxx ${ARGN}) #store the absolute path for the driver and all the test @@ -553,7 +553,11 @@ macro(vtkm_configure_device device) set(VTKm_ENABLE_${device_uppercase} ON) include("UseVTKm${device}") if(NOT VTKm_${device}_FOUND) - message(SEND_ERROR "Could not configure for using VTKm with ${device}") - endif(NOT VTKm_${device}_FOUND) + if ("${ARGV1}" STREQUAL "REQUIRED") + message(SEND_ERROR "Could not configure for using VTKm with ${device}") + else() + message(STATUS "Could not configure for using VTKm with ${device}") + endif() + endif() endmacro(vtkm_configure_device) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2dfb8313a..4cead0a42 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,12 +112,14 @@ endif() #----------------------------------------------------------------------------- # Set up devices selected. vtkm_configure_device(Serial) -if (VTKm_ENABLE_CUDA) - vtkm_configure_device(Cuda) -endif (VTKm_ENABLE_CUDA) if (VTKm_ENABLE_TBB) - vtkm_configure_device(TBB) + vtkm_configure_device(TBB REQUIRED) endif (VTKm_ENABLE_TBB) +if (VTKm_ENABLE_CUDA) + vtkm_configure_device(CUDA REQUIRED) + cuda_include_directories(${VTKm_INCLUDE_DIRS}) +endif (VTKm_ENABLE_CUDA) +include_directories(${VTKm_INCLUDE_DIRS}) #-----------------------------------------------------------------------------