[Bf-blender-cvs] [766d4303724] cycles_oneapi: CMake: Build oneAPI kernel via add_custom_command()
Stefan Werner
noreply at git.blender.org
Mon Apr 4 09:56:54 CEST 2022
Commit: 766d4303724a36cc82e02bd05bd4dea9167d8446
Author: Stefan Werner
Date: Sun Apr 3 23:44:08 2022 +0200
Branches: cycles_oneapi
https://developer.blender.org/rB766d4303724a36cc82e02bd05bd4dea9167d8446
CMake: Build oneAPI kernel via add_custom_command()
Bringing Linux and Windows calls to dpcpp compiler closer together.
Addtionally moving oneAPI DLL to scripts/addons/cycles/lib.
===================================================================
M build_files/cmake/platform/platform_unix.cmake
M intern/cycles/cmake/external_libs.cmake
M intern/cycles/device/CMakeLists.txt
M intern/cycles/device/oneapi/device.cpp
M intern/cycles/device/oneapi/device_impl.h
M intern/cycles/device/oneapi/queue.h
D intern/cycles/device/oneapi/sycl.h
D intern/cycles/device/oneapi/util.cpp
D intern/cycles/device/oneapi/util.h
M intern/cycles/kernel/CMakeLists.txt
D intern/cycles/kernel/device/oneapi/CMakeLists.txt
M intern/cycles/kernel/device/oneapi/kernel.h
D intern/cycles/kernel/device/oneapi/vs2019_aot_config_file.props.cmake
D intern/cycles/kernel/device/oneapi/vs2019_config_file.props.cmake
M source/creator/CMakeLists.txt
===================================================================
diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake
index cc168476d5d..3be468daccc 100644
--- a/build_files/cmake/platform/platform_unix.cmake
+++ b/build_files/cmake/platform/platform_unix.cmake
@@ -268,6 +268,13 @@ if(WITH_CYCLES AND WITH_CYCLES_OSL)
endif()
endif()
+if(WITH_CYCLES_DEVICE_ONEAPI)
+ set(CYCLES_LEVEL_ZERO ${LIBDIR}/level-zero CACHE PATH "Path to Level Zero installation")
+ if(EXISTS ${CYCLES_LEVEL_ZERO} AND NOT LEVEL_ZERO_ROOT_DIR)
+ set(LEVEL_ZERO_ROOT_DIR ${CYCLES_LEVEL_ZERO})
+ endif()
+endif()
+
if(WITH_OPENVDB)
find_package_wrapper(OpenVDB)
find_package_wrapper(Blosc)
diff --git a/intern/cycles/cmake/external_libs.cmake b/intern/cycles/cmake/external_libs.cmake
index 483b2365658..5d507c1599a 100644
--- a/intern/cycles/cmake/external_libs.cmake
+++ b/intern/cycles/cmake/external_libs.cmake
@@ -72,7 +72,7 @@ if(CYCLES_STANDALONE_REPOSITORY)
_set_default(TBB_ROOT_DIR "${_cycles_lib_dir}/tbb")
_set_default(TIFF_ROOT "${_cycles_lib_dir}/tiff")
_set_default(ZLIB_ROOT "${_cycles_lib_dir}/zlib")
- _set_default(LEVEL_ZERO_ROOT_DIR "${_cycles_lib_dir}/level_zero")
+ _set_default(LEVEL_ZERO_ROOT_DIR "${_cycles_lib_dir}/level-zero")
# Ignore system libraries
set(CMAKE_IGNORE_PATH "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES};${CMAKE_SYSTEM_INCLUDE_PATH};${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES};${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}")
diff --git a/intern/cycles/device/CMakeLists.txt b/intern/cycles/device/CMakeLists.txt
index ea7005ab254..efc6a514ba1 100644
--- a/intern/cycles/device/CMakeLists.txt
+++ b/intern/cycles/device/CMakeLists.txt
@@ -84,15 +84,12 @@ set(SRC_HIP
)
set(SRC_ONEAPI
- oneapi/sycl.h
oneapi/device_impl.cpp
oneapi/device_impl.h
oneapi/device.cpp
oneapi/device.h
oneapi/queue.cpp
oneapi/queue.h
- oneapi/util.cpp
- oneapi/util.h
)
set(SRC_DUMMY
@@ -175,135 +172,6 @@ if(WITH_CYCLES_DEVICE_HIP AND WITH_HIP_DYNLOAD)
)
endif()
-# Build kernel here for linking with device below
-if (WITH_CYCLES_DEVICE_ONEAPI)
- include(ExternalProject)
-
- add_definitions(-DWITH_ONEAPI)
- if (WITH_CYCLES_ONEAPI_SYCL_HOST_ENABLED)
- add_definitions(-DWITH_ONEAPI_SYCL_HOST_ENABLED)
- endif()
- set(oneapi_kernel_library_filename ${CMAKE_SHARED_LIBRARY_PREFIX}cycles_kernel_oneapi${CMAKE_SHARED_LIBRARY_SUFFIX})
-
- # Pass a lot of include directories
- get_property(CORRECT_CYCLES_INCLUDE_DIRS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
- string(REPLACE ";" "&" CORRECT_CYCLES_INCLUDE_DIRS_ESCAPED "${CORRECT_CYCLES_INCLUDE_DIRS}")
-
- # Get sycl library directory
- get_filename_component(SYCL_LIBRARY_DIR "${SYCL_LIBRARY}" DIRECTORY)
-
- set (ONEAPI_KERNEL_BUILD_TYPE ${CMAKE_BUILD_TYPE})
- if (WITH_CYCLES_ONEAPI_BINARIES AND NOT GENERATOR_IS_MULTI_CONFIG)
- #NOTE(sirginko) Disable this, when GPU AOT will work with Debug information (for Debug and RelWithDebInfo builds)
- message(STATUS "Change ONEAPI_KERNEL_BUILD_TYPE value from \"${ONEAPI_KERNEL_BUILD_TYPE}\" to \"Release\", because other builds don't work for GPU AOT yet")
- set(ONEAPI_KERNEL_BUILD_TYPE "Release")
- endif()
-
- if (GENERATOR_IS_MULTI_CONFIG AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
- set(ONEAPI_KERNEL_CMAKE_GENERATOR_TOOLSET "Intel(R) oneAPI DPC++ Compiler 2022")
- ExternalProject_Add(
- oneapi_kernel
- DOWNLOAD_COMMAND ""
- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../kernel/device/oneapi
- CMAKE_ARGS
- -DCMAKE_CXX_COMPILER:STRING=${SYCL_DPCPP_COMPILER}
- -DCMAKE_GENERATOR_TOOLSET=${ONEAPI_KERNEL_CMAKE_GENERATOR_TOOLSET}
- -DWITH_CYCLES_ONEAPI_BINARIES:BOOL=${WITH_CYCLES_ONEAPI_BINARIES}
- -DCYCLES_ONEAPI_SYCL_TARGET:STRING=${CYCLES_ONEAPI_SYCL_TARGET}
- -DCYCLES_ONEAPI_AOT_TARGETS:STRING=${CYCLES_ONEAPI_AOT_TARGETS}
- -DCYCLES_ONEAPI_GPU_COMPILATION_OPTIONS:STRING=${CYCLES_ONEAPI_GPU_COMPILATION_OPTIONS}
- -DWITH_CYCLES_ONEAPI_SYCL_HOST_ENABLED:BOOL=${WITH_CYCLES_ONEAPI_SYCL_HOST_ENABLED}
- -DWITH_NANOVDB:BOOL=${WITH_NANOVDB}
- -DNANOVDB_INCLUDE_DIR=${NANOVDB_INCLUDE_DIR}
- -DSYCL_INCLUDE_DIR=${SYCL_INCLUDE_DIR}
- -DSYCL_LIBRARY_DIR=${SYCL_LIBRARY_DIR}
- -DLEVEL_ZERO_LIBRARY=${LEVEL_ZERO_LIBRARY}
- -DLEVEL_ZERO_INCLUDE_DIR=${LEVEL_ZERO_INCLUDE_DIR}
- -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=TRUE
- -DCYCLES_INCLUDE_DIRS_ESCAPED:STRING=${CORRECT_CYCLES_INCLUDE_DIRS_ESCAPED}&${CMAKE_CURRENT_SOURCE_DIR}/..
- -DORIGINALCMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}
- INSTALL_COMMAND ""
- BUILD_ALWAYS TRUE
- STEP_TARGETS build
- EXCLUDE_FROM_ALL TRUE
- )
- else()
- ExternalProject_Add(
- oneapi_kernel
- DOWNLOAD_COMMAND ""
- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../kernel/device/oneapi
- CMAKE_ARGS
- -DCMAKE_BUILD_TYPE:STRING=${ONEAPI_KERNEL_BUILD_TYPE}
- -DWITH_CYCLES_ONEAPI_BINARIES:BOOL=${WITH_CYCLES_ONEAPI_BINARIES}
- -DCYCLES_ONEAPI_SYCL_TARGET:STRING=${CYCLES_ONEAPI_SYCL_TARGET}
- -DCYCLES_ONEAPI_AOT_TARGETS:STRING=${CYCLES_ONEAPI_AOT_TARGETS}
- -DWITH_CYCLES_ONEAPI_SYCL_HOST_ENABLED:BOOL=${WITH_CYCLES_ONEAPI_SYCL_HOST_ENABLED}
- -DWITH_NANOVDB:BOOL=${WITH_NANOVDB}
- -DNANOVDB_INCLUDE_DIR=${NANOVDB_INCLUDE_DIR}
- -DCMAKE_CXX_COMPILER:STRING=${SYCL_DPCPP_COMPILER}
- -DSYCL_INCLUDE_DIR=${SYCL_INCLUDE_DIR}
- -DSYCL_LIBRARY_DIR=${SYCL_LIBRARY_DIR}
- -DLEVEL_ZERO_LIBRARY=${LEVEL_ZERO_LIBRARY}
- -DLEVEL_ZERO_INCLUDE_DIR=${LEVEL_ZERO_INCLUDE_DIR}
- -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=TRUE
- -DCYCLES_INCLUDE_DIRS_ESCAPED:STRING=${CORRECT_CYCLES_INCLUDE_DIRS_ESCAPED}&${CMAKE_CURRENT_SOURCE_DIR}/..
- -DORIGINALCMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}
- INSTALL_COMMAND ""
- BUILD_ALWAYS TRUE
- STEP_TARGETS build
- EXCLUDE_FROM_ALL TRUE
- )
- endif()
-
- ExternalProject_Get_Property(oneapi_kernel binary_dir)
-
- if (GENERATOR_IS_MULTI_CONFIG AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
- # make intermediate copy of the DLL since we can't use generator expression in delayed_install
- add_custom_command(TARGET oneapi_kernel-build POST_BUILD
- COMMAND "${CMAKE_COMMAND}" -E copy_if_different
- "${binary_dir}/$<CONFIG>/${oneapi_kernel_library_filename}"
- "${binary_dir}/${oneapi_kernel_library_filename}"
- )
- endif()
-
- # The idea of using device as library, is that we compile device cpp files with oneAPI implementation code and then use
- # the code via common C++ interface from .h files. So the rest of the project can be compiled with g++/clang/msbuild
- add_library(cycles_kernel_oneapi SHARED IMPORTED)
-
- if (GENERATOR_IS_MULTI_CONFIG AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
- string(REPLACE ".dll" ".lib" oneapi_kernel_library_filename_lib ${oneapi_kernel_library_filename})
- set_target_properties(cycles_kernel_oneapi PROPERTIES
- POSITION_INDEPENDENT_CODE ON
- )
- foreach(CONFIGURATION IN ITEMS ${CMAKE_CONFIGURATION_TYPES})
- string(TOUPPER ${CONFIGURATION} CONFIG)
- set_target_properties(cycles_kernel_oneapi PROPERTIES
- IMPORTED_LOCATION_${CONFIG} "${binary_dir}/${CONFIGURATION}/${oneapi_kernel_library_filename}"
- IMPORTED_IMPLIB_${CONFIG} "${binary_dir}/${CONFIGURATION}/${oneapi_kernel_library_filename_lib}"
- )
- endforeach()
- else()
- set_target_properties(cycles_kernel_oneapi PROPERTIES
- IMPORTED_LOCATION ${binary_dir}/${oneapi_kernel_library_filename}
- POSITION_INDEPENDENT_CODE ON
- )
- endif()
-
- if (GENERATOR_IS_MULTI_CONFIG AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
- if(WITH_BLENDER)
- set(CYCLES_DEVICE_ONEAPI_SHARED_LIBRARY_CYCLES_PATH "${binary_dir}/$<CONFIG>/${oneapi_kernel_library_filename}" CACHE INTERNAL "")
- endif()
- else()
- delayed_install(${binary_dir} "${oneapi_kernel_library_filename}" ${CYCLES_INSTALL_PATH}/source/kernel/kernels/oneapi)
- if(WITH_BLENDER)
- set(CYCLES_DEVICE_ONEAPI_SHARED_LIBRARY_CYCLES_PATH "${CYCLES_INSTALL_PATH}/source/kernel/kernels/oneapi/${oneapi_kernel_library_filename}" CACHE INTERNAL "")
- endif()
- endif()
-
- add_dependencies(cycles_kernel_oneapi oneapi_kernel-build)
-endif()
-#]]
-
add_definitions(${GL_DEFINITIONS})
if(WITH_CYCLES_DEVICE_CUDA)
@@ -324,6 +192,9 @@ if(WITH_CYCLES_DEVICE_METAL)
${SRC_METAL}
)
endif()
+if (WITH_CYCLES_DEVICE_ONEAPI)
+ add_definitions(-DWITH_ONEAPI)
+endif()
if(WITH_OPENIMAGEDENOISE)
list(APPEND LIB
@@ -334,16 +205,6 @@ endif()
include_directories(${INC})
include_directories(SYSTEM ${INC_SYS})
-if (WITH_CYCLES_DEVICE_ONEAPI)
- include_directories(SYSTEM ${SYCL_INCLUDE_DIR}/sycl ${SYCL_INCLUDE_DIR})
- get_filename_component(SYCL_LIBRARY_DIR "${SYCL_LIBRARY}" DIRECTORY)
- if (GENERATOR_IS_MULTI_CONFIG AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
- link_libraries("${SYCL_LIBRARY_DIR}/sycl$<$<CONFIG:Debug>:d>${CMAKE_LINK_LIBRARY_SUFFIX}")
- else()
- link_libraries(${SYCL_LIBRARY})
- endif()
-endif()
-
cycles_add_library(cycles_device "${LIB}" ${SRC})
if(WITH_CYCLES_DEVICE_ONEAPI)
diff --git a/intern/cycles/device/oneapi/device.cpp b/intern/cycles/device/oneapi/device.cpp
index ffdb79534ee..9677a631815 100644
--- a/intern/cycles/device/oneapi/device.cpp
+++ b/intern/cycles/device/oneapi/device.cpp
@@ -8,9 +8,8 @@
#ifdef WITH_ONEAPI
# include "device/device.h"
# include "device/oneapi/device_impl.h"
-# include "device/oneapi/sycl.h"
-# include "device/oneapi/util.h"
+# include "util/path.h"
# include "util/string.h"
# ifdef __linux__
@@ -26,12 +25,12 @@ static oneAPIDLLInterface oneapi_dll;
#ifdef _WIN32
# define LOAD_SYCL_SHARED_LIBRARY() (void *)(LoadLibrary(TEXT("sycl.dll")))
-# define LOAD_ONEAPI_SHARED_LIBRARY() (void *)(LoadLibrary(TEXT("cycles_kernel_oneapi.dll")))
+# define LOAD_ONEAPI_SHARED_LIBRARY(path) (void *)(LoadLibrary(path))
# define FREE_SHARED_LIBRARY(handle) FreeLibrary((HMODULE)handle)
# define GET_SHARED_LIBRARY_SYMBOL(handle, name) GetProcAddress((HMODULE)handle, name)
#elif __linux__
# define LOAD_SYCL_SHARED_LIBRARY() dlopen("libsycl.so", RTL
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list