Implicit surface rendering via ray tracing
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

123 lines
4.9 KiB

# Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of NVIDIA CORPORATION nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#------------------------------------------------------------------------------
# Try to find NVML.
# Once done this will define
#
# NVML_FOUND - whether all of the components of NVML were found
# NVML_INCLUDE_DIRS - same as the CUDA include dir
# NVML_LIBRARIES - the linker library for NVML
#
# The NVML headers and linker library are distributed as part of the CUDA SDK.
# We use the variables set by finding CUDA
# (see https://cmake.org/cmake/help/v3.3/module/FindCUDA.html)
# However, the shared library (DLL on Windows) should be found at runtime.
#
# Please note that on Windows, NVML is only available for 64-bit systems.
set(NVML_FOUND OFF)
# Fix directory separators in a TeamCity continuous integration context.
if(CUDA_TOOLKIT_ROOT_DIR)
string(REPLACE "\\" "/" CUDA_TOOLKIT_ROOT_DIR ${CUDA_TOOLKIT_ROOT_DIR})
endif()
find_package(CUDA)
# Finding CUDA doesn't guarantee that NVML was installed with CUDA, since
# one can turn that off during installation. Verify that NVML in fact
# exists under CUDA_TOOLKIT_ROOT_DIR:
if(WIN32) # Windows
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(_ARCH "x64")
else()
message(WARNING "FindNVML.cmake was called with a 32-bit platform on Windows, but NVML is not available for 32-bit systems on Windows. Did you mean to use a 64-bit platform?")
# Attempt to set the right path for 32-bit Windows, though,
# although this is unlikely to change.
set(_ARCH "Win32")
endif()
set(_NVML_LIBRARY_PATH "${CUDA_TOOLKIT_ROOT_DIR}/lib/${_ARCH}/nvml.lib")
else() # Linux
set(_NVML_LIBRARY_PATH "nvidia-ml")
endif()
set(_NVML_IN_CUDA_DIR ON)
if((NOT EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/include/nvml.h") OR (WIN32 AND (NOT EXISTS "${_NVML_LIBRARY_PATH}")))
set(_NVML_IN_CUDA_DIR OFF)
endif()
if(_NVML_IN_CUDA_DIR)
# Add .lib files
set(NVML_LIBRARIES ${_NVML_LIBRARY_PATH})
# Include directory
set(NVML_INCLUDE_DIRS ${CUDA_TOOLKIT_ROOT_DIR}/include)
set(NVML_FOUND ON)
else()
Message(STATUS "No CUDA SDK detected with NVML installed. Looking for NVML locally and in NVML_LOCATION (${NVML_LOCATION})")
# if no CUDA, let's try to find nvml locally in our nvpro_core. This file is
# located in nvpro_core/cmake/find.
find_path( NVML_INCLUDE_DIRS nvml.h
${NVML_LOCATION}
$ENV{NVML_LOCATION}
${CMAKE_CURRENT_LIST_DIR}/../../third_party/binaries/nvml
)
if(NVML_INCLUDE_DIRS)
Message(STATUS "Found it here : ${NVML_INCLUDE_DIRS}")
set( NVML_FOUND ON )
# Add .lib files
if(WIN32) # Windows
set(NVML_LIBRARIES "${NVML_INCLUDE_DIRS}/lib/${_ARCH}/nvml.lib")
else() # Linux
set(NVML_LIBRARIES "nvidia-ml")
endif()
else()
message(WARNING "
NVML not found. To explicitly locate it, set NVML_LOCATION,
which should be a folder containing nvml.h."
)
endif()
endif()
# In the non-Windows case, we use the system nvidia-ml library. Check if it
# exists; if it doesn't, we point the user to where to install it.
if(NOT WIN32)
find_library(_NVML_LIBRARY_PATH ${NVML_LIBRARIES})
if(NOT _NVML_LIBRARY_PATH)
message(WARNING "CMake couldn't locate the ${NVML_LIBRARIES} library, so compilation will likely fail. You may need to install NVML using your OS' package manager; for instance, by running `sudo apt install libnvidia-ml-dev`.")
endif()
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(NVML DEFAULT_MSG
NVML_INCLUDE_DIRS
NVML_LIBRARIES
)
mark_as_advanced(
NVML_INCLUDE_DIRS
NVML_LIBRARIES
)