Page MenuHome
Paste P2868

(An Untitled Masterwork)
ActivePublic

Authored by Sergey Sharybin (sergey) on Mar 31 2022, 11:15 AM.
From b8103a1f4a030a70630ab042530907bc3b98fa5f Mon Sep 17 00:00:00 2001
From: Sergey Sharybin <sergey@blender.org>
Date: Thu, 31 Mar 2022 11:09:15 +0200
Subject: [PATCH] Cycles: Simplify development environment configuration on
Linux
Do not require PATH and LD_LIBRARY_PATH variables to be manually
modified on the host system: pass them to the subproject.
More ideally in the future DPCPP will work similar to ICC and this
will not be needed.
---
build_files/cmake/Modules/FindSYCL.cmake | 20 +++++++++++++++++++-
intern/cycles/device/CMakeLists.txt | 13 +++++++++++++
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/build_files/cmake/Modules/FindSYCL.cmake b/build_files/cmake/Modules/FindSYCL.cmake
index 0b42da8cf4f..70129849de4 100644
--- a/build_files/cmake/Modules/FindSYCL.cmake
+++ b/build_files/cmake/Modules/FindSYCL.cmake
@@ -10,6 +10,13 @@
# SYCL_ROOT_DIR, The base directory to search for SYCL files.
# This can also be an environment variable.
# SYCL_FOUND, If false, then don't try to use SYCL.
+#
+# This module also defines the following variables needed to configure environment for DPC++
+# compiler. Hopefully in the the future DPC++ will work the same way as ICC and will not require
+# an explicit paths configurations.
+#
+# SYCL_COMPILER_BIN_DIR - directory with toolchain binaries (such as dpcpp, sycl-post-link
+# SYCL_LIBRARY_DIRS - directories where libraries needed by the DPC++ are located.
IF(NOT SYCL_ROOT_DIR AND NOT $ENV{SYCL_ROOT_DIR} STREQUAL "")
SET(SYCL_ROOT_DIR $ENV{SYCL_ROOT_DIR})
@@ -58,9 +65,20 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(SYCL DEFAULT_MSG _SYCL_LIBRARY _SYCL_INCLUDE_D
IF(SYCL_FOUND)
SET(SYCL_LIBRARY ${_SYCL_LIBRARY})
- get_filename_component(_SYCL_INCLUDE_PARENT_DIR ${_SYCL_INCLUDE_DIR} DIRECTORY)
+ GET_FILENAME_COMPONENT(_SYCL_INCLUDE_PARENT_DIR ${_SYCL_INCLUDE_DIR} DIRECTORY)
SET(SYCL_INCLUDE_DIR ${_SYCL_INCLUDE_DIR} ${_SYCL_INCLUDE_PARENT_DIR})
+
+ GET_FILENAME_COMPONENT(SYCL_COMPILER_BIN_DIR ${SYCL_DPCPP_COMPILER} DIRECTORY)
+ GET_FILENAME_COMPONENT(_SYCL_ACTUAL_ROOT_DIR ${SYCL_COMPILER_BIN_DIR} DIRECTORY)
+
+ SET(SYCL_LIBRARY_DIRS
+ ${_SYCL_ACTUAL_ROOT_DIR}/lib
+ ${_SYCL_ACTUAL_ROOT_DIR}/compiler/lib/intel64_lin
+ )
+
+ UNSET(_SYCL_INCLUDE_PARENT_DIR)
+ UNSET(_SYCL_ACTUAL_ROOT_DIR)
ELSE()
SET(SYCL_SYCL_FOUND FALSE)
ENDIF()
diff --git a/intern/cycles/device/CMakeLists.txt b/intern/cycles/device/CMakeLists.txt
index b29b0ff41dc..82ea4b17c40 100644
--- a/intern/cycles/device/CMakeLists.txt
+++ b/intern/cycles/device/CMakeLists.txt
@@ -199,6 +199,17 @@ if (WITH_CYCLES_DEVICE_ONEAPI)
set(ONEAPI_KERNEL_BUILD_TYPE "Debug")
endif()
+ # Workaround for DPCPP not being able to find binaries and libraries needed to compile.
+ # Only do it on Linux since Windows appears to work just fine.
+ if(UNIX AND NOT APPLE)
+ string(REPLACE ";" ":" SYCL_LIBRARY_DIRS_ENV "${SYCL_LIBRARY_DIRS}")
+ set(ONEAPI_KERNEL_CMAKE_COMMAND
+ ${CMAKE_COMMAND} -E env PATH=${SYCL_COMPILER_BIN_DIR}:$ENV{PATH} LD_LIBRARY_PATH=${SYCL_LIBRARY_DIRS_ENV}:$ENV{LD_LIBRARY_PATH} ${CMAKE_COMMAND})
+ unset(SYCL_LIBRARY_DIRS_ENV)
+ else()
+ set(ONEAPI_KERNEL_CMAKE_COMMAND ${CMAKE_COMMAND})
+ 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(
@@ -222,6 +233,7 @@ if (WITH_CYCLES_DEVICE_ONEAPI)
-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}
+ CMAKE_COMMAND ${ONEAPI_KERNEL_CMAKE_COMMAND}
INSTALL_COMMAND ""
BUILD_ALWAYS TRUE
STEP_TARGETS build
@@ -248,6 +260,7 @@ if (WITH_CYCLES_DEVICE_ONEAPI)
-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}
+ CMAKE_COMMAND ${ONEAPI_KERNEL_CMAKE_COMMAND}
INSTALL_COMMAND ""
BUILD_ALWAYS TRUE
STEP_TARGETS build
--
2.35.1