2023-06-14 16:52:36 +10:00
|
|
|
# SPDX-FileCopyrightText: 2011-2022 Blender Foundation
|
|
|
|
|
#
|
2022-02-11 09:07:11 +11:00
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
2020-09-04 18:41:10 +02:00
|
|
|
|
|
|
|
|
###########################################################################
|
2021-09-17 15:15:14 +02:00
|
|
|
# SDL
|
2020-09-04 18:41:10 +02:00
|
|
|
###########################################################################
|
|
|
|
|
|
|
|
|
|
if(WITH_CYCLES_STANDALONE AND WITH_CYCLES_STANDALONE_GUI)
|
2021-09-17 15:15:14 +02:00
|
|
|
# We can't use the version from the Blender precompiled libraries because
|
|
|
|
|
# it does not include the video subsystem.
|
2022-04-06 22:25:40 +02:00
|
|
|
find_package(SDL2 REQUIRED)
|
2022-09-29 19:01:35 +02:00
|
|
|
set_and_warn_library_found("SDL" SDL2_FOUND WITH_CYCLES_STANDALONE_GUI)
|
2020-09-04 18:41:10 +02:00
|
|
|
|
2022-09-29 19:01:35 +02:00
|
|
|
if(SDL2_FOUND)
|
|
|
|
|
include_directories(
|
|
|
|
|
SYSTEM
|
|
|
|
|
${SDL2_INCLUDE_DIRS}
|
|
|
|
|
)
|
2020-09-04 18:41:10 +02:00
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
###########################################################################
|
|
|
|
|
# CUDA
|
|
|
|
|
###########################################################################
|
|
|
|
|
|
2022-04-07 20:27:23 +02:00
|
|
|
if(WITH_CYCLES_DEVICE_CUDA AND (WITH_CYCLES_CUDA_BINARIES OR NOT WITH_CUDA_DYNLOAD))
|
2020-09-04 18:41:10 +02:00
|
|
|
find_package(CUDA) # Try to auto locate CUDA toolkit
|
2022-09-29 19:01:35 +02:00
|
|
|
set_and_warn_library_found("CUDA compiler" CUDA_FOUND WITH_CYCLES_CUDA_BINARIES)
|
|
|
|
|
|
2020-09-04 18:41:10 +02:00
|
|
|
if(CUDA_FOUND)
|
2021-10-05 13:08:44 +02:00
|
|
|
message(STATUS "Found CUDA ${CUDA_NVCC_EXECUTABLE} (${CUDA_VERSION})")
|
2020-09-04 18:41:10 +02:00
|
|
|
else()
|
|
|
|
|
if(NOT WITH_CUDA_DYNLOAD)
|
|
|
|
|
message(STATUS "Additionally falling back to dynamic CUDA load")
|
|
|
|
|
set(WITH_CUDA_DYNLOAD ON)
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
2014-12-29 14:48:21 +05:00
|
|
|
endif()
|
2021-09-28 19:55:25 +02:00
|
|
|
|
|
|
|
|
###########################################################################
|
|
|
|
|
# HIP
|
|
|
|
|
###########################################################################
|
|
|
|
|
|
2023-04-24 19:05:30 +02:00
|
|
|
if(WITH_CYCLES_DEVICE_HIP)
|
2025-02-20 17:34:14 +01:00
|
|
|
if(WITH_CYCLES_HIP_BINARIES)
|
2023-05-05 19:36:55 +02:00
|
|
|
# Need at least HIP 5.5 to solve compiler bug affecting the kernel.
|
|
|
|
|
find_package(HIP 5.5.0)
|
|
|
|
|
set_and_warn_library_found("HIP compiler" HIP_FOUND WITH_CYCLES_HIP_BINARIES)
|
2023-02-20 11:51:16 +01:00
|
|
|
|
2023-05-05 19:36:55 +02:00
|
|
|
if(HIP_FOUND)
|
|
|
|
|
message(STATUS "Found HIP ${HIP_HIPCC_EXECUTABLE} (${HIP_VERSION})")
|
2023-04-19 18:18:05 +02:00
|
|
|
endif()
|
|
|
|
|
endif()
|
2023-04-24 19:05:30 +02:00
|
|
|
|
|
|
|
|
# HIP RT
|
|
|
|
|
if(WITH_CYCLES_DEVICE_HIP AND WITH_CYCLES_DEVICE_HIPRT)
|
2024-09-24 14:35:24 +02:00
|
|
|
if(DEFINED LIBDIR)
|
|
|
|
|
set(HIPRT_ROOT_DIR ${LIBDIR}/hiprt)
|
|
|
|
|
endif()
|
2023-04-24 19:05:30 +02:00
|
|
|
find_package(HIPRT)
|
|
|
|
|
set_and_warn_library_found("HIP RT" HIPRT_FOUND WITH_CYCLES_DEVICE_HIPRT)
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(NOT WITH_CYCLES_DEVICE_HIP)
|
|
|
|
|
set(WITH_CYCLES_DEVICE_HIPRT OFF)
|
2021-10-05 13:08:44 +02:00
|
|
|
endif()
|
|
|
|
|
|
2021-09-28 16:51:14 +02:00
|
|
|
if(NOT WITH_HIP_DYNLOAD)
|
|
|
|
|
set(WITH_HIP_DYNLOAD ON)
|
|
|
|
|
endif()
|
2020-09-04 18:41:10 +02:00
|
|
|
|
2021-12-07 15:11:35 +00:00
|
|
|
###########################################################################
|
|
|
|
|
# Metal
|
|
|
|
|
###########################################################################
|
|
|
|
|
|
|
|
|
|
if(WITH_CYCLES_DEVICE_METAL)
|
2021-12-13 13:48:36 +01:00
|
|
|
find_library(METAL_LIBRARY Metal)
|
|
|
|
|
|
|
|
|
|
# This file was added in the 12.0 SDK, use it as a way to detect the version.
|
2022-09-29 19:01:35 +02:00
|
|
|
if(METAL_LIBRARY)
|
|
|
|
|
if(EXISTS "${METAL_LIBRARY}/Headers/MTLFunctionStitching.h")
|
|
|
|
|
set(METAL_FOUND ON)
|
|
|
|
|
else()
|
|
|
|
|
message(STATUS "Metal version too old, must be SDK 12.0 or newer")
|
|
|
|
|
set(METAL_FOUND OFF)
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
set_and_warn_library_found("Metal" METAL_FOUND WITH_CYCLES_DEVICE_METAL)
|
|
|
|
|
if(METAL_FOUND)
|
2021-12-13 13:48:36 +01:00
|
|
|
message(STATUS "Found Metal: ${METAL_LIBRARY}")
|
2021-12-07 15:11:35 +00:00
|
|
|
endif()
|
|
|
|
|
endif()
|
2022-06-29 12:58:04 +02:00
|
|
|
|
|
|
|
|
###########################################################################
|
|
|
|
|
# oneAPI
|
|
|
|
|
###########################################################################
|
|
|
|
|
|
2023-06-14 18:20:45 +02:00
|
|
|
if(WITH_CYCLES_DEVICE_ONEAPI OR EMBREE_SYCL_SUPPORT)
|
2024-06-12 19:19:12 +02:00
|
|
|
# Find packages for even when WITH_CYCLES_DEVICE_ONEAPI is OFF, as it's
|
|
|
|
|
# needed for linking to Embree with SYCL support.
|
2022-06-29 12:58:04 +02:00
|
|
|
find_package(SYCL)
|
|
|
|
|
find_package(LevelZero)
|
|
|
|
|
|
2024-06-12 19:19:12 +02:00
|
|
|
if(WITH_CYCLES_DEVICE_ONEAPI)
|
|
|
|
|
set_and_warn_library_found("oneAPI" SYCL_FOUND WITH_CYCLES_DEVICE_ONEAPI)
|
|
|
|
|
set_and_warn_library_found("Level Zero" LEVEL_ZERO_FOUND WITH_CYCLES_DEVICE_ONEAPI)
|
|
|
|
|
if(NOT (SYCL_FOUND AND SYCL_VERSION VERSION_GREATER_EQUAL 6.0 AND LEVEL_ZERO_FOUND))
|
|
|
|
|
message(STATUS "SYCL 6.0+ or Level Zero not found, disabling WITH_CYCLES_DEVICE_ONEAPI")
|
|
|
|
|
set(WITH_CYCLES_DEVICE_ONEAPI OFF)
|
|
|
|
|
endif()
|
2022-06-29 12:58:04 +02:00
|
|
|
endif()
|
|
|
|
|
endif()
|
2023-06-14 18:20:45 +02:00
|
|
|
|
|
|
|
|
if(WITH_CYCLES_DEVICE_ONEAPI AND WITH_CYCLES_ONEAPI_BINARIES)
|
|
|
|
|
if(NOT OCLOC_INSTALL_DIR)
|
|
|
|
|
get_filename_component(_sycl_compiler_root ${SYCL_COMPILER} DIRECTORY)
|
|
|
|
|
get_filename_component(OCLOC_INSTALL_DIR "${_sycl_compiler_root}/../lib/ocloc" ABSOLUTE)
|
|
|
|
|
unset(_sycl_compiler_root)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(NOT EXISTS ${OCLOC_INSTALL_DIR})
|
|
|
|
|
set(OCLOC_FOUND OFF)
|
|
|
|
|
message(STATUS "oneAPI ocloc not found in ${OCLOC_INSTALL_DIR}."
|
|
|
|
|
" A different ocloc directory can be set using OCLOC_INSTALL_DIR cmake variable.")
|
|
|
|
|
set_and_warn_library_found("ocloc" OCLOC_FOUND WITH_CYCLES_ONEAPI_BINARIES)
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|