[Bf-blender-cvs] [1b7811d30ad] cycles_oneapi: deps_builder: intel graphics compiler

Ray Molenkamp noreply at git.blender.org
Mon May 23 20:55:15 CEST 2022


Commit: 1b7811d30ad4b4920556266711548b4151f6bbb4
Author: Ray Molenkamp
Date:   Mon May 23 12:55:10 2022 -0600
Branches: cycles_oneapi
https://developer.blender.org/rB1b7811d30ad4b4920556266711548b4151f6bbb4

deps_builder: intel graphics compiler

building for linux only, with extra caveat
the flex version on centos 7 is NOT sufficient
and will cause a build error. It needs to be
upgraded to atleast 2.6.4

===================================================================

M	build_files/build_environment/CMakeLists.txt
M	build_files/build_environment/cmake/download.cmake
A	build_files/build_environment/cmake/igc.cmake
A	build_files/build_environment/cmake/macros.cmake
M	build_files/build_environment/cmake/versions.cmake
A	build_files/build_environment/patches/igc_opencl_clang.diff

===================================================================

diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt
index 3e33b86f513..500362e1217 100644
--- a/build_files/build_environment/CMakeLists.txt
+++ b/build_files/build_environment/CMakeLists.txt
@@ -33,6 +33,7 @@ include(cmake/versions.cmake)
 include(cmake/options.cmake)
 include(cmake/boost_build_options.cmake)
 include(cmake/download.cmake)
+include(cmake/macros.cmake)
 
 if(ENABLE_MINGW64)
   include(cmake/setup_mingw64.cmake)
@@ -100,6 +101,9 @@ if(NOT APPLE)
     include(cmake/dpcpp.cmake)
     include(cmake/dpcpp_deps.cmake)
   endif()
+  if(NOT WIN32)
+    include(cmake/igc.cmake)
+  endif()
 endif()
 
 # OpenColorIO and dependencies.
diff --git a/build_files/build_environment/cmake/download.cmake b/build_files/build_environment/cmake/download.cmake
index 891f292993e..1b749107511 100644
--- a/build_files/build_environment/cmake/download.cmake
+++ b/build_files/build_environment/cmake/download.cmake
@@ -107,3 +107,11 @@ download_source(OPENCLHEADERS)
 download_source(ICDLOADER)
 download_source(MP11)
 download_source(SPIRV_HEADERS)
+download_source(IGC)
+download_source(IGC_LLVM)
+download_source(IGC_OPENCL_CLANG)
+download_source(IGC_VCINTRINSICS)
+download_source(IGC_SPIRV_HEADERS)
+download_source(IGC_SPIRV_TOOLS)
+download_source(IGC_SPIRV_TRANSLATOR)
+
diff --git a/build_files/build_environment/cmake/igc.cmake b/build_files/build_environment/cmake/igc.cmake
new file mode 100644
index 00000000000..cbdad0f2e5a
--- /dev/null
+++ b/build_files/build_environment/cmake/igc.cmake
@@ -0,0 +1,79 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# CAUTION: igc requires flex 2.6.4 this is not by default available on centos 7
+
+unpack_only(igc_llvm)
+unpack_only(igc_opencl_clang)
+unpack_only(igc_vcintrinsics)
+unpack_only(igc_spirv_headers)
+unpack_only(igc_spirv_tools)
+unpack_only(igc_spirv_translator)
+
+if(WIN32)
+  set(IGC_GENERATOR "Ninja")
+  set(IGC_TARGET Windows64)
+else()
+  set(IGC_GENERATOR "Unix Makefiles")
+  set(IGC_TARGET Linux64)
+endif()
+
+set(IGC_EXTRA_ARGS
+  -DIGC_OPTION__ARCHITECTURE_TARGET=${IGC_TARGET}
+  -DIGC_OPTION__ARCHITECTURE_HOST=${IGC_TARGET}
+)
+
+ExternalProject_Add(external_igc
+  URL file://${PACKAGE_DIR}/${IGC_FILE}
+  DOWNLOAD_DIR ${DOWNLOAD_DIR}
+  URL_HASH ${IGC_HASH_TYPE}=${IGC_HASH}
+  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/igc ${DEFAULT_CMAKE_FLAGS} ${IGC_EXTRA_ARGS}
+
+  #
+  # The patch logic is.... fragile... the patches live inside external_igc but
+  # are applied to projects outside its base folder, leading into the situation
+  # you have to remove all external igc_ folders if you rebuild igc or it'll try
+  # to reapply all patches... and fail...
+  #
+  # Ideally we apply all patches while we unpack the deps, but due to the dependency
+  # order we can't access igc source tree yet. 
+  #
+  # Only "neat" solution i see is copying all patches to our patch folder.
+  #
+  # igc is pretty set in its way where sub projects ought to live, for some it offers
+  # hooks to supply alternatives folders, other are just hardocded with no way to configure
+  # we symlink everything here, since it's less work than trying to convince the cmake
+  # scripts to accept alternative locations.
+  #
+  PATCH_COMMAND ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_llvm/src/external_igc_llvm/ ${BUILD_DIR}/igc/src/llvm-project &&
+    ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/ ${BUILD_DIR}/igc/src/llvm-project/llvm/projects/opencl-clang &&
+    ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_spirv_translator/src/external_igc_spirv_translator/ ${BUILD_DIR}/igc/src/llvm-project/llvm/projects/llvm-spirv &&
+    ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_spirv_tools/src/external_igc_spirv_tools/ ${BUILD_DIR}/igc/src/SPIRV-Tools &&
+    ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_spirv_headers/src/external_igc_spirv_headers/ ${BUILD_DIR}/igc/src/SPIRV-Headers &&
+    ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_vcintrinsics/src/external_igc_vcintrinsics/ ${BUILD_DIR}/igc/src/vc-intrinsics &&
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/ < ${PATCH_DIR}/igc_opencl_clang.diff &&
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc/src/llvm-project/ < ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches/clang/0001-OpenCL-3.0-support.patch &&
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc/src/llvm-project/ < ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches/clang/0002-Remove-__IMAGE_SUPPORT__-macro-for-SPIR.patch &&
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc/src/llvm-project/ < ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches/clang/0003-Avoid-calling-ParseCommandLineOptions-in-BackendUtil.patch &&
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc/src/llvm-project/ < ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches/clang/0004-OpenCL-support-cl_ext_float_atomics.patch &&
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc/src/llvm-project/ < ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches/clang/0005-OpenCL-Add-cl_khr_integer_dot_product.patch &&
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc/src/llvm-project/ < ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches/llvm/0001-Memory-leak-fix-for-Managed-Static-Mutex.patch &&
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc/src/llvm-project/ < ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches/llvm/0002-Remove-repo-name-in-LLVM-IR.patch &&
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc/src/llvm-project/llvm/projects/llvm-spirv < ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches/spirv/0001-update-SPIR-V-headers-for-SPV_INTEL_split_barrier.patch &&
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc/src/llvm-project/llvm/projects/llvm-spirv < ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches/spirv/0002-Add-support-for-split-barriers-extension-SPV_INTEL_s.patch &&
+    PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc/src/llvm-project/llvm/projects/llvm-spirv < ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches/spirv/0003-Support-cl_bf16_conversions.patch
+  PREFIX ${BUILD_DIR}/igc
+  INSTALL_DIR ${LIBDIR}/igc
+  CMAKE_GENERATOR ${IGC_GENERATOR}
+)
+
+add_dependencies(
+  external_igc
+  external_igc_vcintrinsics
+  external_igc_llvm
+  external_igc_opencl_clang
+  external_igc_vcintrinsics
+  external_igc_spirv_headers
+  external_igc_spirv_tools
+  external_igc_spirv_translator
+)
+
diff --git a/build_files/build_environment/cmake/macros.cmake b/build_files/build_environment/cmake/macros.cmake
new file mode 100644
index 00000000000..82fc151a038
--- /dev/null
+++ b/build_files/build_environment/cmake/macros.cmake
@@ -0,0 +1,18 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# shorthand to only unpack a certain dependency
+macro(unpack_only name)
+  string(TOUPPER ${name} UPPER_NAME)
+  set(TARGET_FILE ${${UPPER_NAME}_FILE})
+  set(TARGET_HASH_TYPE ${${UPPER_NAME}_HASH_TYPE})
+  set(TARGET_HASH ${${UPPER_NAME}_HASH})
+  ExternalProject_Add(external_${name}
+    URL file://${PACKAGE_DIR}/${TARGET_FILE}
+    URL_HASH ${TARGET_HASH_TYPE}=${TARGET_HASH}
+    DOWNLOAD_DIR ${DOWNLOAD_DIR}
+    PREFIX ${BUILD_DIR}/${name}
+    CONFIGURE_COMMAND echo .
+    BUILD_COMMAND echo .
+    INSTALL_COMMAND echo .
+  )
+endmacro()
diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake
index 39b58d47f9f..3026e00e002 100644
--- a/build_files/build_environment/cmake/versions.cmake
+++ b/build_files/build_environment/cmake/versions.cmake
@@ -559,3 +559,55 @@ set(SPIRV_HEADERS_FILE SPIR-V-Headers-${SPIRV_HEADERS_VERSION}.tar.gz)
 ### DPCPP DEPS END ###
 ######################
 
+##########################################
+### Intel Graphics Compiler DEPS BEGIN ###
+##########################################
+# The following deps are build time requirements for the intel graphics
+# compiler, the versions used are taken from the following location
+# https://github.com/intel/intel-graphics-compiler/releases
+
+set(IGC_VERSION 1.0.11222)
+set(IGC_URI https://github.com/intel/intel-graphics-compiler/archive/refs/tags/igc-${IGC_VERSION}.tar.gz)
+set(IGC_HASH d92f0608dcbb52690855685f9447282e5c09c0ba98ae35fabf114fcf8b1e9fcf)
+set(IGC_HASH_TYPE SHA256)
+set(IGC_FILE igc-${IGC_VERSION}.tar.gz)
+
+set(IGC_LLVM_VERSION llvmorg-11.1.0)
+set(IGC_LLVM_URI https://github.com/llvm/llvm-project/archive/refs/tags/${IGC_LLVM_VERSION}.tar.gz)
+set(IGC_LLVM_HASH 53a0719f3f4b0388013cfffd7b10c7d5682eece1929a9553c722348d1f866e79)
+set(IGC_LLVM_HASH_TYPE SHA256)
+set(IGC_LLVM_FILE ${IGC_LLVM_VERSION}.tar.gz)
+
+set(IGC_OPENCL_CLANG_VERSION bbdd1587f577397a105c900be114b56755d1f7dc)
+set(IGC_OPENCL_CLANG_URI https://github.com/intel/opencl-clang/archive/${IGC_OPENCL_CLANG_VERSION}.tar.gz)
+set(IGC_OPENCL_CLANG_HASH d08315f1b0d8a6fef33de2b3e6aa7356534c324910634962c72523d970773efc)
+set(IGC_OPENCL_CLANG_HASH_TYPE SHA256)
+set(IGC_OPENCL_CLANG_FILE opencl-clang-${IGC_OPENCL_CLANG_VERSION}.tar.gz)
+
+set(IGC_VCINTRINSICS_VERSION v0.4.0)
+set(IGC_VCINTRINSICS_URI https://github.com/intel/vc-intrinsics/archive/refs/tags/${IGC_VCINTRINSICS_VERSION}.tar.gz)
+set(IGC_VCINTRINSICS_HASH c8b92682ad5031cf9d5b82a40e7d5c0e763cd9278660adbcaa69aab988e4b589)
+set(IGC_VCINTRINSICS_HASH_TYPE SHA256)
+set(IGC_VCINTRINSICS_FILE vc-intrinsics-${IGC_VCINTRINSICS_VERSION}.tar.gz)
+
+set(IGC_SPIRV_HEADERS_VERSION sdk-1.3.204.1)
+set(IGC_SPIRV_HEADERS_URI https://github.com/KhronosGroup/SPIRV-Headers/archive/refs/tags/${IGC_SPIRV_HEADERS_VERSION}.tar.gz)
+set(IGC_SPIRV_HEADERS_HASH 262864053968c217d45b24b89044a7736a32361894743dd6cfe788df258c746c)
+set(IGC_SPIRV_HEADERS_HASH_TYPE SHA256)
+set(IGC_SPIRV_HEADERS_FILE SPIR-V-Headers-${IGC_SPIRV_HEADERS_VERSION}.tar.gz)
+
+set(IGC_SPIRV_TOOLS_VERSION sdk-1.3.204.1)
+set(IGC_SPIRV_TOOLS_URI https://github.com/KhronosGroup/SPIRV-Tools/archive/refs/tags/${IGC_SPIRV_TOOLS_VERSION}.tar.gz)
+set(IGC_SPIRV_TOOLS_H

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list