From fe97e18b30238eedab0760f92edfbbae5b4413b5 Mon Sep 17 00:00:00 2001 From: "Wesierski, Lukasz" Date: Wed, 11 May 2022 12:09:18 +0000 Subject: [PATCH] Adding cache mode for BiFModule project Add to BiFModule project possibility to make and use prebuild pack to avoid on each build-time rebuilding of whole BiFModule built-in instructions. Feature this will reduce time on building IGC. --- IGC/BiFModule/CMakeLists.txt | 51 ++++++++---- IGC/BiFModule/cmake/BiFMCBuild.cmake | 26 ++++++ IGC/BiFModule/cmake/BiFMCChecksum.cmake | 40 +++++++++ IGC/BiFModule/cmake/BiFMCConst.cmake | 16 ++++ IGC/BiFModule/cmake/BiFMCGetListFiles.cmake | 26 ++++++ IGC/BiFModule/cmake/BiFMCInit.cmake | 34 ++++++++ IGC/BiFModule/cmake/BiFModuleCache.cmake | 92 +++++++++++++++++++++ IGC/CMakeLists.txt | 2 + 8 files changed, 271 insertions(+), 16 deletions(-) create mode 100644 IGC/BiFModule/cmake/BiFMCBuild.cmake create mode 100644 IGC/BiFModule/cmake/BiFMCChecksum.cmake create mode 100644 IGC/BiFModule/cmake/BiFMCConst.cmake create mode 100644 IGC/BiFModule/cmake/BiFMCGetListFiles.cmake create mode 100644 IGC/BiFModule/cmake/BiFMCInit.cmake create mode 100644 IGC/BiFModule/cmake/BiFModuleCache.cmake diff --git a/IGC/BiFModule/CMakeLists.txt b/IGC/BiFModule/CMakeLists.txt index f520090838da..2354eb6d10b6 100644 --- a/IGC/BiFModule/CMakeLists.txt +++ b/IGC/BiFModule/CMakeLists.txt @@ -12,6 +12,7 @@ # ====================================================================================================== # =============================================== Tools ================================================ +include(BiFModuleCache) # In new Clang versions VME types are built-in. Keep this flag until all OS's update Clang version to 8 if(NOT DEFINED VME_TYPES_DEFINED) @@ -246,16 +247,17 @@ function(igc_bif_build_bc) # OpenCL source compilation is triggered by CLANG change, change of source files, change of precompiled header, change of # forcibly included headers or change of additional dependencies. + add_custom_command( OUTPUT "${_bcTempFilePath}" - COMMAND "${CMAKE_COMMAND}" -E make_directory "${_outBcFileDir}" - COMMAND clang-tool -cc1 -x cl -fblocks -fpreserve-vec3-type -opencl-builtins "-triple=${_archTriple}" -w -emit-llvm-bc -o "${_bcTempFilePath}" ${_pchFlags} ${_incFileFlags} ${_includeDirsFlags} ${_defineFlags} ${_options_DEFAULT} ${_options_CL} "${_srcFilePath}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${CMAKE_COMMAND}" -E make_directory "${_outBcFileDir}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "$" -cc1 -x cl -fblocks -fpreserve-vec3-type -opencl-builtins "-triple=${_archTriple}" -w -emit-llvm-bc -o "${_bcTempFilePath}" ${_pchFlags} ${_incFileFlags} ${_includeDirsFlags} ${_defineFlags} ${_options_DEFAULT} ${_options_CL} "${_srcFilePath}" DEPENDS clang-tool ${_pchFilePath} ${_incFilePaths} "${_srcFilePath}" ${_dependencies} COMMENT "BiF: \"${_outBcFileName}\": Compiling OpenCL source: \"${_srcFileName}\"" ) add_custom_command( OUTPUT "${_bcIntFilePath}" - COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_bcTempFilePath}" "${_bcIntFilePath}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${CMAKE_COMMAND}" -E copy_if_different "${_bcTempFilePath}" "${_bcIntFilePath}" DEPENDS "${_bcTempFilePath}" COMMENT "BiF: \"${_outBcFileName}\": Updating intermediate .bc for \"${_srcFileName}\" if changed." ) @@ -276,14 +278,14 @@ function(igc_bif_build_bc) # Makes sure that LLVM is unzipped before. add_custom_command( OUTPUT "${_bcTempFilePath}" - COMMAND "${CMAKE_COMMAND}" -E make_directory "${_outBcFileDir}" - COMMAND ${LLVM_AS_EXE} -o "${_bcTempFilePath}" ${_options_DEFAULT} ${_options_LL} "${_srcFilePath}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${CMAKE_COMMAND}" -E make_directory "${_outBcFileDir}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "$" -o "${_bcTempFilePath}" ${_options_DEFAULT} ${_options_LL} "${_srcFilePath}" DEPENDS "${_srcFilePath}" ${_dependencies} COMMENT "BiF: \"${_outBcFileName}\": Compiling OpenCL source: \"${_srcFileName}\"" ) add_custom_command( OUTPUT "${_bcIntFilePath}" - COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_bcTempFilePath}" "${_bcIntFilePath}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${CMAKE_COMMAND}" -E copy_if_different "${_bcTempFilePath}" "${_bcIntFilePath}" DEPENDS "${_bcTempFilePath}" COMMENT "BiF: \"${_outBcFileName}\": Updating intermediate .bc for \"${_srcFileName}\" if changed." ) @@ -303,18 +305,24 @@ function(igc_bif_build_bc) set(_bcTempFilePath "${_bcIntFilePath}.tmp") math(EXPR _bcFileId "${_bcFileId} + 1") + if(EXISTS ${LLVM_LINK_EXE}) + set(bif-llvm-link_exe ${LLVM_LINK_EXE}) + else() + set(bif-llvm-link_exe $) + endif() + # LLVM linking is triggered by host LLVM package change (where tools are), change of intermediate .bc files or change of additional dependencies. # Makes sure that LLVM is unzipped before. add_custom_command( OUTPUT "${_bcTempFilePath}" - COMMAND "${CMAKE_COMMAND}" -E make_directory "${_outBcFileDir}" - COMMAND ${LLVM_LINK_EXE} -o "${_bcTempFilePath}" ${_options_DEFAULT} ${_options_BC} ${_bcFiles} + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${CMAKE_COMMAND}" -E make_directory "${_outBcFileDir}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${bif-llvm-link_exe}" -o "${_bcTempFilePath}" ${_options_DEFAULT} ${_options_BC} ${_bcFiles} DEPENDS ${_bcFiles} ${_dependencies} COMMENT "BiF: \"${_outBcFileName}\": Linking intermediate .bc into output .bc." ) add_custom_command( OUTPUT "${_bcIntFilePath}" - COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_bcTempFilePath}" "${_bcIntFilePath}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${CMAKE_COMMAND}" -E copy_if_different "${_bcTempFilePath}" "${_bcIntFilePath}" DEPENDS "${_bcTempFilePath}" COMMENT "BiF: \"${_outBcFileName}\": Updating output .bc if changed (after linking)." ) @@ -332,14 +340,14 @@ function(igc_bif_build_bc) # Makes sure that LLVM is unzipped before. add_custom_command( OUTPUT "${_bcTempFilePath}" - COMMAND "${CMAKE_COMMAND}" -E make_directory "${_outBcFileDir}" - COMMAND ${LLVM_OPT_EXE} -O2 -o "${_bcTempFilePath}" ${_options_DEFAULT} ${_options_OPT} ${_bcFiles} + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${CMAKE_COMMAND}" -E make_directory "${_outBcFileDir}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "$" -O2 -o "${_bcTempFilePath}" ${_options_DEFAULT} ${_options_OPT} ${_bcFiles} DEPENDS ${_bcFiles} ${_dependencies} COMMENT "BiF: \"${_outBcFileName}\": Optmizing output .bc." ) add_custom_command( OUTPUT "${_bcIntFilePath}" - COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_bcTempFilePath}" "${_bcIntFilePath}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${CMAKE_COMMAND}" -E copy_if_different "${_bcTempFilePath}" "${_bcIntFilePath}" DEPENDS "${_bcTempFilePath}" COMMENT "BiF: \"${_outBcFileName}\": Updating output .bc if changed (after optimization)." ) @@ -350,7 +358,7 @@ function(igc_bif_build_bc) # Final copy. add_custom_command( OUTPUT "${_outBcFilePath}" - COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${_bcFiles} "${_outBcFilePath}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${CMAKE_COMMAND}" -E copy_if_different ${_bcFiles} "${_outBcFilePath}" DEPENDS ${_bcFiles} COMMENT "BiF: \"${_outBcFileName}\": Copying output .bc." ) @@ -418,8 +426,8 @@ set(IGC_BUILD__BIF_OCL_INCLUDES ${IGC_BUILD__BIF_OCL_INCLUDES} ${IGC_BUILD__BIF_ add_custom_command( OUTPUT "${IGC_BUILD__BIF_OCL_FORCE_INC}" - COMMAND "${CMAKE_COMMAND}" -E make_directory "${IGC_BUILD__BIF_DIR}" - COMMAND "${PYTHON_EXECUTABLE}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${CMAKE_COMMAND}" -E make_directory "${IGC_BUILD__BIF_DIR}" + COMMAND "${CMAKE_COMMAND}" -E compare_files ${BiFModule_PREBUILD_SHA_PATH} ${BiFModule_SRC_SHA_PATH} || "${PYTHON_EXECUTABLE}" ARGS ${_concatScript} -new ${IGC_BUILD__BIF_OCL_FORCE_INC} ${IGC_BUILD__BIF_OCL_SHARED_INC} ${IGC_BUILD__BIF_OCL_SHARED_INC_PRE_RELEASE} DEPENDS ${_concatScript} DEPENDS ${IGC_BUILD__BIF_OCL_SHARED_INC} @@ -454,6 +462,9 @@ endif(IGC_OPTION__USE_KHRONOS_SPIRV_TRANSLATOR_IN_SC) igc_bif_find_cl_files(IGC_BUILD__BIF_OCL_COMMON_DEPENDS ${IGC_BUILD__BIF_OCL_COMMON_INC_DIRS} "${IGC_OPTION__BIF_SRC_OCL_DIR}/Implementation") +# Adding BiFModuleCacheInit to start before any of the custom target attached to IGC_BUILD__PROJ__BiFModule_OCL +list(APPEND IGC_BUILD__BIF_OCL_COMMON_DEPENDS ${BiFModule_Init}) + set(KHR_DEFINES "cl_khr_f16" "cl_khr_fp64" "cl_khr_gl_msaa_sharing" "cl_khr_mipmap_image" "cl_khr_depth_images" "cl_intel_subgroups_short" "cl_intel_subgroups_char" "cl_intel_subgroups_long" "cl_intel_subgroup_local_block_io" "cl_intel_64bit_global_atomics_placeholder" "cl_khr_subgroup_extended_types" "cl_khr_subgroup_non_uniform_vote" "cl_khr_subgroup_ballot" "cl_khr_subgroup_shuffle" @@ -597,13 +608,21 @@ endif() set(IGC_BUILD__PROJ__BiFModule_OCL "${IGC_BUILD__PROJ_NAME_PREFIX}BiFModuleOcl") set(IGC_BUILD__PROJ__BiFModule_OCL "${IGC_BUILD__PROJ__BiFModule_OCL}" PARENT_SCOPE) set(IGC_BUILD__PROJ_LABEL__BiFModule_OCL "BiFModule-OCL") +set(IGC_BUILD__PROJ_DEPENDS_BiFModule_OCL clang-tool "${IGC_BUILD__BIF_OCL_FORCE_INC}" "${IGC_BUILD__BIF_DIR}/OCLBiFImpl.bc" "${IGC_BUILD__BIF_DIR}/IGCsize_t_32.bc" "${IGC_BUILD__BIF_DIR}/IGCsize_t_64.bc" "${IGC_BUILD__BIF_DIR}/IBiF_Impl_int_spirv.bc") + add_custom_target("${IGC_BUILD__PROJ__BiFModule_OCL}" - DEPENDS clang-tool "${IGC_BUILD__BIF_DIR}/OCLBiFImpl.bc" "${IGC_BUILD__BIF_DIR}/IGCsize_t_32.bc" "${IGC_BUILD__BIF_DIR}/IGCsize_t_64.bc" "${IGC_BUILD__BIF_DIR}/IBiF_Impl_int_spirv.bc" + DEPENDS ${IGC_BUILD__PROJ_DEPENDS_BiFModule_OCL} SOURCES ${IGC_BUILD__BIF_OCL_COMMON_DEPENDS} ) set_property(TARGET "${IGC_BUILD__PROJ__BiFModule_OCL}" PROPERTY PROJECT_LABEL "${IGC_BUILD__PROJ_LABEL__BiFModule_OCL}") +generate_bif_src_checksum(${IGC_BUILD__PROJ__BiFModule_OCL}) + +generate_bif_prebuild_pack(${IGC_BUILD__PROJ__BiFModule_OCL} "${IGC_BUILD__PROJ_DEPENDS_BiFModule_OCL}") +set(IGC_BUILD__PROJ__BiFModuleCache_OCL "${IGC_BUILD__PROJ__BiFModuleCache_OCL}" PARENT_SCOPE) + + # =========================================== SPIRV Headers ============================================ add_library(IGCSPIRVHeaders INTERFACE) diff --git a/IGC/BiFModule/cmake/BiFMCBuild.cmake b/IGC/BiFModule/cmake/BiFMCBuild.cmake new file mode 100644 index 000000000000..f4d9d05e1751 --- /dev/null +++ b/IGC/BiFModule/cmake/BiFMCBuild.cmake @@ -0,0 +1,26 @@ +#=========================== begin_copyright_notice ============================ +# +# Copyright (C) 2022 Intel Corporation +# +# SPDX-License-Identifier: MIT +# +#============================ end_copyright_notice ============================= + +include(${CMAKE_CURRENT_LIST_DIR}/BiFMCConst.cmake) + +file(READ ${BiFModule_SRC_SHA_PATH} BiF_SRC_CHECKSUM) +if(EXISTS ${BiFModule_PreBuild_PATH}) + file(REMOVE_RECURSE ${BiFModule_PreBuild_PATH}) +endif() +file(MAKE_DIRECTORY ${BiFModule_PreBuild_PATH}) +string(REPLACE " " ";" bifDeps ${LIST_FILES}) +foreach(_bifDep ${bifDeps}) + if(${_bifDep} MATCHES ".*\\.[bch]+$") + message("[IGC\\BiFModuleCache] - Copying file ${_bifDep} to prebuild pack") + file(COPY "${_bifDep}" DESTINATION "${BiFModule_PreBuild_PATH}/") + endif() +endforeach() +file(WRITE "${BiFModule_PREBUILD_SHA_PATH}" ${BiF_SRC_CHECKSUM}) +message("[IGC\\BiFModuleCache] - Prebuild pack with checksum [${BiF_SRC_CHECKSUM}] is ready") + + diff --git a/IGC/BiFModule/cmake/BiFMCChecksum.cmake b/IGC/BiFModule/cmake/BiFMCChecksum.cmake new file mode 100644 index 000000000000..5e44bdf17b65 --- /dev/null +++ b/IGC/BiFModule/cmake/BiFMCChecksum.cmake @@ -0,0 +1,40 @@ +#=========================== begin_copyright_notice ============================ +# +# Copyright (C) 2022 Intel Corporation +# +# SPDX-License-Identifier: MIT +# +#============================ end_copyright_notice ============================= + +#Input vars +# @param BiFModule_SRC_LIS - list of all files to by +# @param BiFModule_SRC_SHA_PATH - path to dump the file with checksum for sources + +include(${CMAKE_CURRENT_LIST_DIR}/BiFMCConst.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/BiFMCGetListFiles.cmake) + +file(REMOVE ${BiFModule_SRC_SHA_PATH}) + +get_bif_src_list(${opencl-header} ${BiFModule_SRC} BiFModule_SRC_LIST) + +# Collect all checksum of all source files into one file +set(allFilesChecksum "") +foreach(_file ${BiFModule_SRC_LIST}) + file(SHA1 ${_file} fileChecksum) + set(allFilesChecksum "${allFilesChecksum}${fileChecksum}") + #message("[IGC\\BiFModuleCache] - File : ${_file} SHA1[${fileChecksum}]") +endforeach() + +message("[IGC\\BiFModuleCache] - Checksum will be for ${BiFModuleCacheTarget} target") +set(allFilesChecksum "${allFilesChecksum}-${BiFModuleCacheTarget}") + +file(WRITE "${BiFModule_SRC_SHA_PATH}.tmp" ${allFilesChecksum}) + +# Generate the checksum of all sources of BiFModule +file(SHA1 "${BiFModule_SRC_SHA_PATH}.tmp" BiF_SRC_CHECKSUM) + +file(REMOVE "${BiFModule_SRC_SHA_PATH}.tmp") + +message("[IGC\\BiFModuleCache] - Final source sha1 : ${BiF_SRC_CHECKSUM}") + +file(WRITE "${BiFModule_SRC_SHA_PATH}" ${BiF_SRC_CHECKSUM}) \ No newline at end of file diff --git a/IGC/BiFModule/cmake/BiFMCConst.cmake b/IGC/BiFModule/cmake/BiFMCConst.cmake new file mode 100644 index 000000000000..37c626fd88b2 --- /dev/null +++ b/IGC/BiFModule/cmake/BiFMCConst.cmake @@ -0,0 +1,16 @@ +#=========================== begin_copyright_notice ============================ +# +# Copyright (C) 2022 Intel Corporation +# +# SPDX-License-Identifier: MIT +# +#============================ end_copyright_notice ============================= + +# Needs defined var IGC_BUILD__BIF_ROOT_DIR + +set(BiFModule_CHECKSUM_FILE "BiFModule_PREB.sha") +set(BiFModule_SRC "${CMAKE_CURRENT_LIST_DIR}/../") +set(BiFModule_PreBuild_PATH "${IGC_BUILD__BIF_ROOT_DIR}prebuild") +set(BiFModule_SRC_SHA_PATH "${IGC_BUILD__BIF_ROOT_DIR}BiFModule_SRC.sha") +set(BiFModule_PREBUILD_SHA_PATH "${BiFModule_PreBuild_PATH}/${BiFModule_CHECKSUM_FILE}") +set(BiFModule_Init ${IGC_BUILD__BIF_ROOT_DIR}bifModuleInit) \ No newline at end of file diff --git a/IGC/BiFModule/cmake/BiFMCGetListFiles.cmake b/IGC/BiFModule/cmake/BiFMCGetListFiles.cmake new file mode 100644 index 000000000000..6eb9647c04ef --- /dev/null +++ b/IGC/BiFModule/cmake/BiFMCGetListFiles.cmake @@ -0,0 +1,26 @@ +#=========================== begin_copyright_notice ============================ +# +# Copyright (C) 2022 Intel Corporation +# +# SPDX-License-Identifier: MIT +# +#============================ end_copyright_notice ============================= + +function(get_bif_src_list opencl-h_SRC bifM_SRC listOut) + # Get all files inside BiFModule and make sha1 of them + message("[IGC\\BiFModuleCache] - Looking for files inside ${bifM_SRC}") + file(GLOB_RECURSE files ${bifM_SRC}*.*) + set(listSRC "") + foreach(_file ${files}) + list(APPEND listSRC ${_file}) + #message("[IGC\\BiFModuleCache] - File added ${_file}") + endforeach() + + # Get all opencl-c headers for clang + get_filename_component(opencl-headers-dir ${opencl-h_SRC} DIRECTORY) + list(APPEND listSRC ${opencl-headers-dir}/opencl-c-base.h) + list(APPEND listSRC ${opencl-h_SRC}) + + list(SORT listSRC) + set(${listOut} ${listSRC} PARENT_SCOPE) +endfunction() \ No newline at end of file diff --git a/IGC/BiFModule/cmake/BiFMCInit.cmake b/IGC/BiFModule/cmake/BiFMCInit.cmake new file mode 100644 index 000000000000..af6a10bb05e0 --- /dev/null +++ b/IGC/BiFModule/cmake/BiFMCInit.cmake @@ -0,0 +1,34 @@ +#=========================== begin_copyright_notice ============================ +# +# Copyright (C) 2022 Intel Corporation +# +# SPDX-License-Identifier: MIT +# +#============================ end_copyright_notice ============================= + +include(${CMAKE_CURRENT_LIST_DIR}/BiFMCConst.cmake) + +file(READ ${BiFModule_SRC_SHA_PATH} BiF_SRC_CHECKSUM) + + +if(EXISTS "${BiFModule_PREBUILD_SHA_PATH}") + file(READ "${BiFModule_PREBUILD_SHA_PATH}" BiF_PREBUILD_CHECKSUM) +else() + set(BiF_PREBUILD_CHECKSUM "Missing") +endif() + +message("[IGC\\BiFModuleCache] Source checksum - [${BiF_SRC_CHECKSUM}]") +message("[IGC\\BiFModuleCache] Pre-build checksum - [${BiF_PREBUILD_CHECKSUM}]") + +if("${BiF_SRC_CHECKSUM}" STREQUAL "${BiF_PREBUILD_CHECKSUM}") + message("[IGC\\BiFModuleCache] Checksum equal - using prebuilds from ${BiFModule_PreBuild_PATH}") + execute_process( + COMMAND "${CMAKE_COMMAND}" -E remove_directory ${IGC_BUILD__BIF_DIR}) + execute_process( + COMMAND "${CMAKE_COMMAND}" -E copy_directory ${BiFModule_PreBuild_PATH} ${IGC_BUILD__BIF_DIR}) + message("[IGC\\BiFModuleCache] Copied BiFModuleCache to ${IGC_BUILD__BIF_DIR}") +else() + message("[IGC\\BiFModuleCache] Checksum not equal - building from source") +endif() + +file(TOUCH ${BiFModule_Init}) diff --git a/IGC/BiFModule/cmake/BiFModuleCache.cmake b/IGC/BiFModule/cmake/BiFModuleCache.cmake new file mode 100644 index 000000000000..c3bb9d90d907 --- /dev/null +++ b/IGC/BiFModule/cmake/BiFModuleCache.cmake @@ -0,0 +1,92 @@ +#=========================== begin_copyright_notice ============================ +# +# Copyright (C) 2022 Intel Corporation +# +# SPDX-License-Identifier: MIT +# +#============================ end_copyright_notice ============================= + +string(REPLACE "$(Configuration)" "" IGC_BUILD__BIF_ROOT_DIR ${IGC_BUILD__BIF_DIR}) +message("[IGC\\BiFModuleCache] - IGC_BUILD__BIF_ROOT_DIR: ${IGC_BUILD__BIF_ROOT_DIR}") + +include(BiFMCConst) +include(BiFMCGetListFiles) + +set(BiFModule_SRC_LIST "") + +get_bif_src_list(${opencl-header} ${BiFModule_SRC} BiFModule_SRC_LIST) + +message("[IGC\\BiFModuleCache] - BiFModule_SRC: ${BiFModule_SRC}") + +if(NOT EXISTS ${IGC_BUILD__BIF_ROOT_DIR}) + file(MAKE_DIRECTORY ${IGC_BUILD__BIF_ROOT_DIR}) +endif() + +file(REMOVE ${BiFModule_SRC_SHA_PATH}) +file(REMOVE ${BiFModule_Init}) + +add_custom_command( + OUTPUT ${BiFModule_Init} + COMMAND ${CMAKE_COMMAND} + -Dopencl-header=${opencl-header} + -DIGC_BUILD__BIF_ROOT_DIR=${IGC_BUILD__BIF_ROOT_DIR} + -DIGC_BUILD__BIF_DIR=${IGC_BUILD__BIF_DIR} + -DBiFModuleCacheTarget=$,"Release","Non-Release"> + -P ${CMAKE_CURRENT_LIST_DIR}/BiFMCInit.cmake + COMMENT "Running BiFMCInit to prepare BiFModule caching" + DEPENDS "${BiFModule_SRC_SHA_PATH}" +) + +set(IGC_BUILD__PROJ__BiFModuleCache_INIT "${IGC_BUILD__PROJ_NAME_PREFIX}BiFModuleCache_INIT") +set(IGC_BUILD__PROJ__BiFModuleCache_INIT "${IGC_BUILD__PROJ__BiFModuleCache_INIT}" PARENT_SCOPE) +add_custom_target("${IGC_BUILD__PROJ__BiFModuleCache_INIT}" + DEPENDS "${BiFModule_Init}" +) + +# Function generates BiFModule-SRC checksum +# @param bifModuleTgt BiFModule target +function(generate_bif_src_checksum bifModuleTgt) + add_custom_command( + OUTPUT ${BiFModule_SRC_SHA_PATH} + COMMAND ${CMAKE_COMMAND} + -Dopencl-header=${opencl-header} + -DIGC_BUILD__BIF_ROOT_DIR=${IGC_BUILD__BIF_ROOT_DIR} + -DBiFModuleCacheTarget=$,"Release","Non-Release"> + -P ${CMAKE_CURRENT_LIST_DIR}/cmake/BiFMCChecksum.cmake + COMMENT "Running BiFMCChecksum to update checksum for BiFModule sources" + DEPENDS ${BiFModule_SRC_LIST} + ) + + set(IGC_BUILD__PROJ__BiFModuleCache_SRC_CHECKSUM_OCL "${IGC_BUILD__PROJ_NAME_PREFIX}BiFModuleCache_SRC_checksum") + set(IGC_BUILD__PROJ__BiFModuleCache_SRC_CHECKSUM_OCL "${IGC_BUILD__PROJ__BiFModuleCache_SRC_CHECKSUM_OCL}" PARENT_SCOPE) + add_custom_target("${IGC_BUILD__PROJ__BiFModuleCache_SRC_CHECKSUM_OCL}" + DEPENDS "${BiFModule_SRC_SHA_PATH}" + ) + +add_dependencies(${bifModuleTgt} ${IGC_BUILD__PROJ__BiFModuleCache_SRC_CHECKSUM_OCL}) + +endfunction() + + +# Function generates BiFModule-Prebuild pack +# @param bifModuleDepends BiFModule depends +# @param bifModuleTgt BiFModule target +function(generate_bif_prebuild_pack bifModuleTgt bifModuleDepends) + add_custom_command( + OUTPUT ${BiFModule_PREBUILD_SHA_PATH} + COMMAND ${CMAKE_COMMAND} + -DLIST_FILES="${bifModuleDepends}" + -DIGC_BUILD__BIF_ROOT_DIR=${IGC_BUILD__BIF_ROOT_DIR} + -DBiFModuleCacheTarget=$,"Release","Non-Release"> + -P ${CMAKE_CURRENT_LIST_DIR}/cmake/BiFMCBuild.cmake + COMMENT "Running BiFMCBuild to create BiFModule cache package" + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + DEPENDS "${BiFModule_SRC_SHA_PATH}" + ) + + set(IGC_BUILD__PROJ__BiFModuleCache_OCL "${IGC_BUILD__PROJ_NAME_PREFIX}BiFModuleCache") + set(IGC_BUILD__PROJ__BiFModuleCache_OCL "${IGC_BUILD__PROJ__BiFModuleCache_OCL}" PARENT_SCOPE) + add_custom_target("${IGC_BUILD__PROJ__BiFModuleCache_OCL}" + DEPENDS ${bifModuleTgt} "${BiFModule_PREBUILD_SHA_PATH}" + ) +endfunction() diff --git a/IGC/CMakeLists.txt b/IGC/CMakeLists.txt index cefd31e90003..92f7cb4050f7 100644 --- a/IGC/CMakeLists.txt +++ b/IGC/CMakeLists.txt @@ -53,6 +53,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED TRUE) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/BiFModule/cmake) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) include(igc_flags_utils) @@ -1657,6 +1658,7 @@ foreach(_libBuildSuffix ${IGC_BUILD__MAIN_IGC_LIB_SUFFIXES}) if(MSVC AND IGC_OPTION__BIF_LINK_BC) add_dependencies("${IGC_BUILD__PROJ${_libBuildSuffix}}" "${IGC_BUILD__PROJ__BiFModule_OCL}") + add_dependencies("${IGC_BUILD__PROJ${_libBuildSuffix}}" "${IGC_BUILD__PROJ__BiFModuleCache_OCL}") add_dependencies("${IGC_BUILD__PROJ${_libBuildSuffix}}" "${IGC_BUILD__PROJ__ElfPackager}") endif() endforeach()