[Bf-blender-cvs] [15ee45fa029] cycles_oneapi: deps/cmake: cleanup igc build

Ray Molenkamp noreply at git.blender.org
Tue Jun 7 18:24:23 CEST 2022


Commit: 15ee45fa029de175b5e366b0b1e9243a89dae543
Author: Ray Molenkamp
Date:   Tue Jun 7 10:24:15 2022 -0600
Branches: cycles_oneapi
https://developer.blender.org/rB15ee45fa029de175b5e366b0b1e9243a89dae543

deps/cmake: cleanup igc build

The way patches were applied was somewhat
fragile, by applying the patches in the
dependencies directly, one can now rebuild
just IGC without having to remove all deps
from disk to get back to a clean slate state.

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

M	build_files/build_environment/cmake/igc.cmake
M	build_files/build_environment/cmake/versions.cmake

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

diff --git a/build_files/build_environment/cmake/igc.cmake b/build_files/build_environment/cmake/igc.cmake
index e8ca0d63eb0..faae8d00611 100644
--- a/build_files/build_environment/cmake/igc.cmake
+++ b/build_files/build_environment/cmake/igc.cmake
@@ -1,11 +1,68 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-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)
+
+#
+# igc_opencl_clang contains patches that need to be applied
+# to external_igc_llvm and igc_spirv_translator, we unpack
+# igc_opencl_clang first, then have the patch stages of 
+# external_igc_llvm and igc_spirv_translator apply them.
+#
+
+ExternalProject_Add(external_igc_opencl_clang
+  URL file://${PACKAGE_DIR}/${IGC_OPENCL_CLANG_FILE}
+  DOWNLOAD_DIR ${DOWNLOAD_DIR}
+  URL_HASH ${IGC_OPENCL_CLANG_HASH_TYPE}=${IGC_OPENCL_CLANG_HASH}
+  PREFIX ${BUILD_DIR}/igc_opencl_clang
+  CONFIGURE_COMMAND echo .
+  BUILD_COMMAND echo .
+  INSTALL_COMMAND echo .
+  PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/ < ${PATCH_DIR}/igc_opencl_clang.diff
+)
+
+set(IGC_OPENCL_CLANG_PATCH_DIR ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches)
+set(IGC_LLVM_SOURCE_DIR ${BUILD_DIR}/igc_llvm/src/external_igc_llvm)
+set(IGC_SPIRV_TRANSLATOR_SOURCE_DIR ${BUILD_DIR}/igc_spirv_translator/src/external_igc_spirv_translator)
+
+ExternalProject_Add(external_igc_llvm
+  URL file://${PACKAGE_DIR}/${IGC_LLVM_FILE}
+  DOWNLOAD_DIR ${DOWNLOAD_DIR}
+  URL_HASH ${IGC_LLVM_HASH_TYPE}=${IGC_LLVM_HASH}
+  PREFIX ${BUILD_DIR}/igc_llvm
+  CONFIGURE_COMMAND echo .
+  BUILD_COMMAND echo .
+  INSTALL_COMMAND echo .
+  PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0001-OpenCL-3.0-support.patch &&
+    ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0002-Remove-__IMAGE_SUPPORT__-macro-for-SPIR.patch &&
+    ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0003-Avoid-calling-ParseCommandLineOptions-in-BackendUtil.patch &&
+    ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0004-OpenCL-support-cl_ext_float_atomics.patch &&
+    ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0005-OpenCL-Add-cl_khr_integer_dot_product.patch &&
+    ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/llvm/0001-Memory-leak-fix-for-Managed-Static-Mutex.patch &&
+    ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/llvm/0002-Remove-repo-name-in-LLVM-IR.patch
+)
+add_dependencies(
+  external_igc_llvm
+  external_igc_opencl_clang
+)
+
+ExternalProject_Add(external_igc_spirv_translator
+  URL file://${PACKAGE_DIR}/${IGC_SPIRV_TRANSLATOR_FILE}
+  DOWNLOAD_DIR ${DOWNLOAD_DIR}
+  URL_HASH ${IGC_SPIRV_TRANSLATOR_HASH_TYPE}=${IGC_SPIRV_TRANSLATOR_HASH}
+  PREFIX ${BUILD_DIR}/igc_spirv_translator
+  CONFIGURE_COMMAND echo .
+  BUILD_COMMAND echo .
+  INSTALL_COMMAND echo .
+  PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${IGC_SPIRV_TRANSLATOR_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/spirv/0001-update-SPIR-V-headers-for-SPV_INTEL_split_barrier.patch &&
+    ${PATCH_CMD} -p 1 -d ${IGC_SPIRV_TRANSLATOR_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/spirv/0002-Add-support-for-split-barriers-extension-SPV_INTEL_s.patch &&
+    ${PATCH_CMD} -p 1 -d ${IGC_SPIRV_TRANSLATOR_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/spirv/0003-Support-cl_bf16_conversions.patch
+)
+add_dependencies(
+  external_igc_spirv_translator
+  external_igc_opencl_clang
+)
 
 if(WIN32)
   set(IGC_GENERATOR "Ninja")
@@ -33,18 +90,7 @@ ExternalProject_Add(external_igc
   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
+  # 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.
@@ -54,18 +100,7 @@ ExternalProject_Add(external_igc
     ${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
+    ${CMAKE_COMMAND} -E create_symlink ${BUILD_DIR}/igc_vcintrinsics/src/external_igc_vcintrinsics/ ${BUILD_DIR}/igc/src/vc-intrinsics
   PREFIX ${BUILD_DIR}/igc
   INSTALL_DIR ${LIBDIR}/igc
   CMAKE_GENERATOR ${IGC_GENERATOR}
diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake
index 902b0e7517c..ff5ea8bf8aa 100644
--- a/build_files/build_environment/cmake/versions.cmake
+++ b/build_files/build_environment/cmake/versions.cmake
@@ -578,6 +578,16 @@ set(IGC_LLVM_HASH 53a0719f3f4b0388013cfffd7b10c7d5682eece1929a9553c722348d1f866e
 set(IGC_LLVM_HASH_TYPE SHA256)
 set(IGC_LLVM_FILE ${IGC_LLVM_VERSION}.tar.gz)
 
+# WARNING WARNING WARNING
+#
+# IGC_OPENCL_CLANG contains patches for some of its dependencies.
+#
+# Whenever IGC_OPENCL_CLANG_VERSION changes, one *MUST* inspect
+# IGC_OPENCL_CLANG's patches folder and update igc.cmake to account for
+# any added or removed patches.
+#
+# WARNING WARNING WARNING
+
 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)



More information about the Bf-blender-cvs mailing list