Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Molenkamp <github@lazydodo.com>2022-06-07 19:24:15 +0300
committerRay Molenkamp <github@lazydodo.com>2022-06-07 19:24:15 +0300
commit15ee45fa029de175b5e366b0b1e9243a89dae543 (patch)
tree6e7feab1b4ef228236d408aae3fd8f277269b204 /build_files
parentcba113a953c610fabd4507a80b2781f311e43c8a (diff)
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.
Diffstat (limited to 'build_files')
-rw-r--r--build_files/build_environment/cmake/igc.cmake89
-rw-r--r--build_files/build_environment/cmake/versions.cmake10
2 files changed, 72 insertions, 27 deletions
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)