From eb1d87a668c792c222ba0893a47feff9e70cb6ac Mon Sep 17 00:00:00 2001 From: Pavel V Chupin Date: Wed, 31 Mar 2021 17:14:39 -0700 Subject: [PATCH 1/9] [SYCL][Cmake] Redesign opencl dependencies * Moved from ExternalProject to FetchContent: * External dependencies are downloaded at configure stage, not build * All dependencies targets become available earlier and become reusable * All dependencies are consolidated under _deps directory * Simplified cmake files for better maintenance * Outline opencl deps into separate opencl/CMakeLists.txt * Update other targets to new deps accordingly * Added comments inlined for not very clear logic in our cmake build system Signed-off-by: Pavel V Chupin --- opencl/CMakeLists.txt | 45 ++++++++ sycl/CMakeLists.txt | 151 ++++--------------------- sycl/plugins/cuda/CMakeLists.txt | 11 +- sycl/plugins/level_zero/CMakeLists.txt | 17 ++- sycl/plugins/opencl/CMakeLists.txt | 15 +-- sycl/source/CMakeLists.txt | 10 +- sycl/tools/CMakeLists.txt | 8 +- sycl/tools/sycl-ls/CMakeLists.txt | 10 +- 8 files changed, 108 insertions(+), 159 deletions(-) create mode 100644 opencl/CMakeLists.txt diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt new file mode 100644 index 0000000000000..c35c298d62239 --- /dev/null +++ b/opencl/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 3.14) + +include(FetchContent) + +# OpenCL Headers +if(NOT OpenCL_INCLUDE_DIRS) + message(STATUS "Will fetch OpenCL headers from github.com") + + FetchContent_Declare(ocl-headers + GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-Headers.git + GIT_TAG 23710f1b99186065c1768fc3098ba681adc0f253 + ) + + FetchContent_MakeAvailable(ocl-headers) + FetchContent_GetProperties(ocl-headers) + set(OpenCL_INCLUDE_DIRS ${ocl-headers_SOURCE_DIR}) +else() + message(STATUS "OpenCL headers are added manually ${OpenCL_INCLUDE_DIRS}") +endif() + +target_compile_definitions(Headers INTERFACE -DCL_TARGET_OPENCL_VERSION=220) +add_library(OpenCL-Headers ALIAS Headers) + +# OpenCL Library (ICD Loader) + +# Set OPENCL_ICD_LOADER_HEADERS_DIR, as prerequisite for ICD build +set(OPENCL_ICD_LOADER_HEADERS_DIR ${OpenCL_INCLUDE_DIRS} CACHE PATH "Path to OpenCL Headers") + +if(NOT OpenCL_LIBRARY) + message(STATUS "Will fetch OpenCL ICD Loader from github.com") + + FetchContent_Declare(ocl-icd + GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-ICD-Loader.git + GIT_TAG 5f8249691ec8c25775789498951f8e9eb62c201d + ) + + FetchContent_MakeAvailable(ocl-icd) + FetchContent_GetProperties(ocl-icd) + set(OpenCL_LIBRARY ${ocl-icd_SOURCE_DIR}) +else() + message(STATUS "OpenCL ICD Loader is added manually ${OpenCL_LIBRARY}") +endif() + +add_library(OpenCL-ICD ALIAS OpenCL) + diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt index 7530f2213d236..888825cdeef61 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt @@ -71,130 +71,23 @@ set(SYCL_INCLUDE_DIR "include") set(SYCL_INCLUDE_BUILD_DIR ${LLVM_BINARY_DIR}/${SYCL_INCLUDE_DIR}) set(SYCL_INCLUDE_DEPLOY_DIR ${CMAKE_INSTALL_PREFIX}/${SYCL_INCLUDE_DIR}) -# Find OpenCL headers and libraries installed in the system and use them to -# build SYCL runtime. -# WARNING: use with caution, building SYCL runtime with OpenCL implementation -# instead of Khronos ICD loader might cause build and/or portability issues. -option(OpenCL_BUILD_WITH_SYSTEM_SDK "Build SYCL with OpenCL coming from the build system" OFF) - -if( (OpenCL_INCLUDE_DIR AND OpenCL_LIBRARY) OR OpenCL_BUILD_WITH_SYSTEM_SDK) - find_package(OpenCL) -endif() - -include(ExternalProject) - -# By default, whenever cmake is re-run, the external project's sources will be -# updated, which might be annoying - let's have a possibility to disable that as -# not every external project which is used here is being updated often -# Single toggle to control all external projects -option(SYCL_EXTERNAL_PROJECTS_SKIP_AUTO_UPDATE - "Perform automatic update step for external projects (OpenCL Headers, OpenCL ICD, etc.)" OFF) -# More precise controls for each particular external project are documented -# near each ExternalProject_Add - -if( NOT OpenCL_INCLUDE_DIRS ) - message(STATUS "OpenCL_INCLUDE_DIRS is missing. Will try to download OpenCL headers from github.com") - set(OpenCL_INCLUDE_DIRS "${CMAKE_CURRENT_BINARY_DIR}/OpenCL/inc") - if (NOT DEFINED SYCL_EP_OCL_HEADERS_SKIP_AUTO_UPDATE) - set(SYCL_EP_OCL_HEADERS_SKIP_AUTO_UPDATE ${SYCL_EXTERNAL_PROJECTS_SKIP_AUTO_UPDATE}) - endif() - ExternalProject_Add(ocl-headers - GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-Headers.git - GIT_TAG 23710f1b99186065c1768fc3098ba681adc0f253 - UPDATE_DISCONNECTED ${SYCL_EP_OCL_HEADERS_SKIP_AUTO_UPDATE} - SOURCE_DIR ${OpenCL_INCLUDE_DIRS} - CONFIGURE_COMMAND "" - BUILD_COMMAND ${CMAKE_COMMAND} -E copy_directory ${OpenCL_INCLUDE_DIRS}/CL ${SYCL_INCLUDE_BUILD_DIR}/sycl/CL - INSTALL_COMMAND "" - STEP_TARGETS build - COMMENT "Downloading OpenCL headers." - LOG_DOWNLOAD 1 - LOG_UPDATE 1 - LOG_BUILD 1 - ) - add_definitions(-DCL_TARGET_OPENCL_VERSION=220) -else() - add_custom_target( ocl-headers ALL - DEPENDS ${OpenCL_INCLUDE_DIRS} - COMMAND ${CMAKE_COMMAND} -E copy_directory ${OpenCL_INCLUDE_DIRS}/CL ${SYCL_INCLUDE_BUILD_DIR}/sycl/CL - COMMENT "Copying OpenCL headers ..." - ) -endif() - -if( NOT OpenCL_LIBRARIES ) - message(STATUS "OpenCL_LIBRARIES is missing. Will try to download OpenCL ICD Loader from github.com") - if(MSVC) - set(OpenCL_LIBRARIES - "${LLVM_LIBRARY_OUTPUT_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}OpenCL${CMAKE_STATIC_LIBRARY_SUFFIX}") - list(APPEND AUX_CMAKE_FLAGS -DOPENCL_ICD_LOADER_REQUIRE_WDK=OFF) - else() - set(OpenCL_LIBRARIES - "${LLVM_LIBRARY_OUTPUT_INTDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}OpenCL${CMAKE_SHARED_LIBRARY_SUFFIX}") - endif() - if (CMAKE_C_COMPILER) - list(APPEND AUX_CMAKE_FLAGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}) - endif() - if (CMAKE_CXX_COMPILER) - list(APPEND AUX_CMAKE_FLAGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}) - endif() - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/icd_build) - set(OpenCL_ICD_LOADER_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/OpenCL/icd") - if (NOT DEFINED SYCL_EP_OCL_ICD_SKIP_AUTO_UPDATE) - set(SYCL_EP_OCL_ICD_SKIP_AUTO_UPDATE ${SYCL_EXTERNAL_PROJECTS_SKIP_AUTO_UPDATE}) - endif() - ExternalProject_Add(ocl-icd - GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-ICD-Loader.git - GIT_TAG 5f8249691ec8c25775789498951f8e9eb62c201d - UPDATE_DISCONNECTED ${SYCL_EP_OCL_ICD_SKIP_AUTO_UPDATE} - SOURCE_DIR ${OpenCL_ICD_LOADER_SOURCE_DIR} - BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/icd_build" - INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/icd_install" - CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} - -DOPENCL_ICD_LOADER_HEADERS_DIR=${OpenCL_INCLUDE_DIRS} - -DCMAKE_INSTALL_PREFIX= - -DCMAKE_INSTALL_LIBDIR:PATH=lib${LLVM_LIBDIR_SUFFIX} - ${AUX_CMAKE_FLAGS} - STEP_TARGETS configure,build,install - DEPENDS ocl-headers - BUILD_BYPRODUCTS ${OpenCL_LIBRARIES} - LOG_DOWNLOAD 1 - LOG_UPDATE 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_INSTALL 1 - ) - ExternalProject_Add_Step(ocl-icd llvminstall - COMMAND ${CMAKE_COMMAND} -E copy_directory / ${LLVM_BINARY_DIR} - COMMENT "Installing ocl-icd into the LLVM binary directory" - DEPENDEES install - ) - # Optionally install the ICD library along with LLVM. - option(OpenCL_INSTALL_KHRONOS_ICD_LOADER - "Install the Khronos ICD Loader built as part of LLVM" OFF) - if (OpenCL_INSTALL_KHRONOS_ICD_LOADER) - install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/icd_install/" - DESTINATION "." - COMPONENT opencl-icd - ) - endif() -else() - file(GLOB ICD_LOADER_SRC "${OpenCL_LIBRARIES}*") - file(COPY ${ICD_LOADER_SRC} DESTINATION ${LLVM_LIBRARY_OUTPUT_INTDIR}) - add_custom_target(ocl-icd DEPENDS ${OpenCL_LIBRARIES} COMMENT "Copying OpenCL ICD Loader ...") -endif() - -set(OPENCL_INCLUDE "${OpenCL_INCLUDE_DIRS}") - -add_library (OpenCL-Headers INTERFACE) -add_library (OpenCL::Headers ALIAS OpenCL-Headers) -target_include_directories(OpenCL-Headers - INTERFACE ${OPENCL_INCLUDE} -) -install(DIRECTORY ${OPENCL_INCLUDE}/CL - DESTINATION ${SYCL_INCLUDE_DEPLOY_DIR}/sycl - COMPONENT opencl-headers -) +# LLVM build sets this OFF by default, but we need OpenCL to be built as shared +# library. +set(BUILD_SHARED_LIBS ON) +# second argument is not used, it's required since first arg is not a real +# subdirectory +add_subdirectory(../opencl ${CMAKE_CURRENT_BINARY_DIR}/opencl_deps) + +# Copy OpenCL Headers into sycl headers build directory +# Compiler does automatic lookup bin/../include based on clang binary location, +# e.g. when run LIT tests +file(COPY ${OPENCL_ICD_LOADER_HEADERS_DIR}/CL + DESTINATION ${SYCL_INCLUDE_BUILD_DIR}/sycl) + +# Include OpenCL Headers into final bundle. +install(DIRECTORY ${OPENCL_ICD_LOADER_HEADERS_DIR}/CL + DESTINATION ${SYCL_INCLUDE_DEPLOY_DIR}/sycl + COMPONENT OpenCL-Headers) option(SYCL_BUILD_PI_CUDA "Enables the CUDA backend for the Plugin Interface" OFF) @@ -207,13 +100,13 @@ string(TIMESTAMP __SYCL_COMPILER_VERSION "%Y%m%d") set(version_header "${sycl_inc_dir}/CL/sycl/version.hpp") configure_file("${version_header}.in" "${version_header}") -# Copy SYCL headers +# Copy SYCL headers from sources to build directory add_custom_target(sycl-headers ALL COMMAND ${CMAKE_COMMAND} -E copy_directory ${sycl_inc_dir}/sycl ${SYCL_INCLUDE_BUILD_DIR}/sycl COMMAND ${CMAKE_COMMAND} -E copy_directory ${sycl_inc_dir}/CL ${SYCL_INCLUDE_BUILD_DIR}/sycl/CL COMMENT "Copying SYCL headers ...") -# Configure SYCL headers +# Copy SYCL headers from sources to install directory install(DIRECTORY "${sycl_inc_dir}/sycl" DESTINATION ${SYCL_INCLUDE_DEPLOY_DIR} COMPONENT sycl-headers) install(DIRECTORY "${sycl_inc_dir}/CL" DESTINATION ${SYCL_INCLUDE_DEPLOY_DIR}/sycl COMPONENT sycl-headers) @@ -353,7 +246,7 @@ set( SYCL_TOOLCHAIN_DEPLOY_COMPONENTS sycl-post-link sycl-ls clang-resource-headers - opencl-headers + OpenCL-Headers sycl-headers sycl-headers-extras sycl @@ -363,8 +256,8 @@ set( SYCL_TOOLCHAIN_DEPLOY_COMPONENTS ${XPTIFW_LIBS} ) -if(OpenCL_INSTALL_KHRONOS_ICD_LOADER AND TARGET ocl-icd) - list(APPEND SYCL_TOOLCHAIN_DEPLOY_COMPONENTS opencl-icd) +if(OpenCL_INSTALL_KHRONOS_ICD_LOADER AND TARGET OpenCL-ICD) + list(APPEND SYCL_TOOLCHAIN_DEPLOY_COMPONENTS OpenCL-ICD) endif() if(SYCL_BUILD_PI_CUDA) diff --git a/sycl/plugins/cuda/CMakeLists.txt b/sycl/plugins/cuda/CMakeLists.txt index 1c230b795a10e..41fe8e6cc5bf1 100644 --- a/sycl/plugins/cuda/CMakeLists.txt +++ b/sycl/plugins/cuda/CMakeLists.txt @@ -10,7 +10,7 @@ find_package(CUDA 10.1 REQUIRED) add_library(cudadrv SHARED IMPORTED GLOBAL) set_target_properties( - cudadrv PROPERTIES + cudadrv PROPERTIES IMPORTED_LOCATION ${CUDA_CUDA_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES ${CUDA_INCLUDE_DIRS} ) @@ -22,10 +22,6 @@ add_library(pi_cuda SHARED "pi_cuda.cpp" ) -add_dependencies(pi_cuda - ocl-headers -) - add_dependencies(sycl-toolchain pi_cuda) set_target_properties(pi_cuda PROPERTIES LINKER_LANGUAGE CXX) @@ -33,11 +29,14 @@ set_target_properties(pi_cuda PROPERTIES LINKER_LANGUAGE CXX) target_include_directories(pi_cuda PRIVATE ${sycl_inc_dir} + ${OPENCL_ICD_LOADER_HEADERS_DIR} PUBLIC ${CUDA_INCLUDE_DIRS} ) -target_link_libraries(pi_cuda PUBLIC OpenCL-Headers cudadrv) +target_link_libraries(pi_cuda + PRIVATE OpenCL-Headers + PUBLIC cudadrv) add_common_options(pi_cuda) diff --git a/sycl/plugins/level_zero/CMakeLists.txt b/sycl/plugins/level_zero/CMakeLists.txt index 28cf7d7800dec..00599d5851528 100755 --- a/sycl/plugins/level_zero/CMakeLists.txt +++ b/sycl/plugins/level_zero/CMakeLists.txt @@ -21,6 +21,11 @@ if (NOT DEFINED LEVEL_ZERO_LIBRARY OR NOT DEFINED LEVEL_ZERO_INCLUDE_DIR) if (NOT DEFINED SYCL_EP_LEVEL_ZERO_LOADER_SKIP_AUTO_UPDATE) set(SYCL_EP_LEVEL_ZERO_LOADER_SKIP_AUTO_UPDATE ${SYCL_EXTERNAL_PROJECTS_SKIP_AUTO_UPDATE}) endif() + + #TODO: Replace ExternalProject with FetchContent for better maintainance and + # cmake files simplification + include(ExternalProject) + ExternalProject_Add(level-zero-loader GIT_REPOSITORY https://github.com/oneapi-src/level-zero.git GIT_TAG v1.0.16 @@ -40,7 +45,7 @@ if (NOT DEFINED LEVEL_ZERO_LIBRARY OR NOT DEFINED LEVEL_ZERO_INCLUDE_DIR) LOG_BUILD 1 LOG_INSTALL 1 STEP_TARGETS configure,build,install - DEPENDS ocl-headers + DEPENDS OpenCL-Headers BUILD_BYPRODUCTS ${LEVEL_ZERO_LOADER} ) ExternalProject_Add_Step(level-zero-loader llvminstall @@ -91,8 +96,8 @@ target_include_directories(LevelZeroLoader-Headers INTERFACE "${LEVEL_ZERO_INCLUDE_DIR}" ) + include_directories("${sycl_inc_dir}") -include_directories(${OPENCL_INCLUDE}) add_library(pi_level_zero SHARED "${sycl_inc_dir}/CL/sycl/detail/pi.h" @@ -125,9 +130,13 @@ endif() if (TARGET level-zero-loader) add_dependencies(pi_level_zero level-zero-loader) endif() - add_dependencies(sycl-toolchain pi_level_zero) - target_link_libraries(pi_level_zero PRIVATE "${LEVEL_ZERO_LOADER}") +add_dependencies(sycl-toolchain pi_level_zero) +target_link_libraries(pi_level_zero + PRIVATE "${LEVEL_ZERO_LOADER}" + PRIVATE OpenCL-Headers +) + if (UNIX) target_link_libraries(pi_level_zero PRIVATE pthread) endif() diff --git a/sycl/plugins/opencl/CMakeLists.txt b/sycl/plugins/opencl/CMakeLists.txt index ca54251c656f5..4b8dab7342db0 100644 --- a/sycl/plugins/opencl/CMakeLists.txt +++ b/sycl/plugins/opencl/CMakeLists.txt @@ -7,7 +7,7 @@ # Plugin for OpenCL # Create Shared library for libpi_opencl.so. #TODO: remove dependency on pi.hpp in sycl project. -#TODO: Currently, the pi.hpp header is common between sycl and plugin library sources. +#TODO: Currently, the pi.h header is common between sycl and plugin library sources. #This can be changed by copying the pi.hpp file in the plugins project. add_library(pi_opencl SHARED @@ -15,11 +15,6 @@ add_library(pi_opencl SHARED "pi_opencl.cpp" ) -add_dependencies(pi_opencl - ocl-icd - ocl-headers -) - add_dependencies(sycl-toolchain pi_opencl) set_target_properties(pi_opencl PROPERTIES LINKER_LANGUAGE CXX) @@ -28,9 +23,9 @@ set_target_properties(pi_opencl PROPERTIES LINKER_LANGUAGE CXX) target_include_directories(pi_opencl PRIVATE "${sycl_inc_dir}") #link pi_opencl with OpenCL headers and ICD Loader. -target_link_libraries( pi_opencl - PRIVATE OpenCL::Headers - PRIVATE ${OpenCL_LIBRARIES} +target_link_libraries(pi_opencl + PRIVATE OpenCL-Headers + PRIVATE OpenCL-ICD ) if (MSVC) # by defining __SYCL_BUILD_SYCL_DLL, we can use __declspec(dllexport) @@ -46,7 +41,7 @@ else() set(linker_script "${CMAKE_CURRENT_SOURCE_DIR}/../ld-version-script.txt") # Filter symbols based on the scope defined in the script file, - # and export pi* function symbols in the library. + # and export pi* function symbols in the library. target_link_libraries( pi_opencl PRIVATE "-Wl,--version-script=${linker_script}" ) diff --git a/sycl/source/CMakeLists.txt b/sycl/source/CMakeLists.txt index 0c6535f21c6de..7da8d346e8d3b 100644 --- a/sycl/source/CMakeLists.txt +++ b/sycl/source/CMakeLists.txt @@ -32,10 +32,7 @@ function(add_sycl_rt_library LIB_NAME) target_compile_options(${LIB_OBJ_NAME} PRIVATE ${ARG_COMPILE_OPTIONS}) endif() - #To-Do: Remove dependency on icd loader and opencl headers. add_dependencies(${LIB_OBJ_NAME} - ocl-icd - ocl-headers sycl-headers ) @@ -68,14 +65,17 @@ function(add_sycl_rt_library LIB_NAME) PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} "${sycl_inc_dir}" - ${OpenCL_INCLUDE_DIRS} + ) + #TODO: Remove dependency on icd loader and opencl headers. + target_link_libraries(${LIB_OBJ_NAME} + PRIVATE OpenCL-Headers ) find_package(Threads REQUIRED) target_link_libraries(${LIB_NAME} PRIVATE - ${OpenCL_LIBRARIES} + OpenCL-ICD ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} PUBLIC diff --git a/sycl/tools/CMakeLists.txt b/sycl/tools/CMakeLists.txt index 83c02bd94481f..eb724c70a5c58 100644 --- a/sycl/tools/CMakeLists.txt +++ b/sycl/tools/CMakeLists.txt @@ -2,7 +2,9 @@ add_subdirectory(sycl-ls) # TODO: move each tool in its own sub-directory add_executable(get_device_count_by_type get_device_count_by_type.cpp) -add_dependencies(get_device_count_by_type ocl-headers ocl-icd level-zero-loader) +add_dependencies(get_device_count_by_type + level-zero-loader +) if(MSVC) set(LEVEL_ZERO_LIBRARY @@ -14,9 +16,9 @@ endif() target_link_libraries(get_device_count_by_type PRIVATE - OpenCL::Headers + OpenCL-Headers LevelZeroLoader::Headers - ${OpenCL_LIBRARIES} + OpenCL-ICD ${LEVEL_ZERO_LIBRARY} $<$:cudadrv> ) diff --git a/sycl/tools/sycl-ls/CMakeLists.txt b/sycl/tools/sycl-ls/CMakeLists.txt index 5833d617d9c4e..ee79683710943 100644 --- a/sycl/tools/sycl-ls/CMakeLists.txt +++ b/sycl/tools/sycl-ls/CMakeLists.txt @@ -1,10 +1,16 @@ add_executable(sycl-ls sycl-ls.cpp) add_dependencies(sycl-ls sycl) -target_include_directories(sycl-ls PRIVATE "${sycl_inc_dir}") +target_include_directories(sycl-ls PRIVATE "${sycl_inc_dir}" +#FIXME: OpenCL headers has to be added explicitly here for CUDA target build, +# to overrule OpenCL headers included in CUDA which are implicitly present +# as sycl target interface (for CUDA build) +# This shouldn't be required if sycl-ls app would depend solely on SYCL +# headers, but currently it requires OpenCL headers + "${OPENCL_ICD_LOADER_HEADERS_DIR}") target_link_libraries(sycl-ls PRIVATE sycl - OpenCL::Headers + OpenCL-Headers ) install(TARGETS sycl-ls RUNTIME DESTINATION "bin" COMPONENT sycl-ls) From 66392bb836e1a2cd09d22ec384b0e146d2ac0fcd Mon Sep 17 00:00:00 2001 From: Pavel V Chupin Date: Thu, 15 Apr 2021 21:46:43 -0700 Subject: [PATCH 2/9] Moving OpenCL shared libs enforcement to OpenCL CMakeLists.txt --- opencl/CMakeLists.txt | 4 ++++ sycl/CMakeLists.txt | 5 +---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt index c35c298d62239..6ec7397591f82 100644 --- a/opencl/CMakeLists.txt +++ b/opencl/CMakeLists.txt @@ -26,6 +26,10 @@ add_library(OpenCL-Headers ALIAS Headers) # Set OPENCL_ICD_LOADER_HEADERS_DIR, as prerequisite for ICD build set(OPENCL_ICD_LOADER_HEADERS_DIR ${OpenCL_INCLUDE_DIRS} CACHE PATH "Path to OpenCL Headers") +# LLVM build sets this OFF by default, but we need OpenCL to be built as shared +# library. +set(BUILD_SHARED_LIBS ON) + if(NOT OpenCL_LIBRARY) message(STATUS "Will fetch OpenCL ICD Loader from github.com") diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt index 0b9cd72d19cbc..38e362aa5f7ca 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt @@ -71,10 +71,7 @@ set(SYCL_INCLUDE_DIR "include") set(SYCL_INCLUDE_BUILD_DIR ${LLVM_BINARY_DIR}/${SYCL_INCLUDE_DIR}) set(SYCL_INCLUDE_DEPLOY_DIR ${CMAKE_INSTALL_PREFIX}/${SYCL_INCLUDE_DIR}) -# LLVM build sets this OFF by default, but we need OpenCL to be built as shared -# library. -set(BUILD_SHARED_LIBS ON) -# second argument is not used, it's required since first arg is not a real +# Second argument is not used, it's required since first arg is not a real # subdirectory add_subdirectory(../opencl ${CMAKE_CURRENT_BINARY_DIR}/opencl_deps) From b934b84dcd19de74216f08e7e35e4845728593b7 Mon Sep 17 00:00:00 2001 From: Pavel V Chupin Date: Mon, 26 Apr 2021 14:20:49 -0700 Subject: [PATCH 3/9] Fix CUDA plugin and CUDA unittest target dependencies --- sycl/plugins/cuda/CMakeLists.txt | 9 ++++----- sycl/unittests/pi/cuda/CMakeLists.txt | 23 ++++++++++++++--------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/sycl/plugins/cuda/CMakeLists.txt b/sycl/plugins/cuda/CMakeLists.txt index 41fe8e6cc5bf1..448ea7e77f419 100644 --- a/sycl/plugins/cuda/CMakeLists.txt +++ b/sycl/plugins/cuda/CMakeLists.txt @@ -29,14 +29,13 @@ set_target_properties(pi_cuda PROPERTIES LINKER_LANGUAGE CXX) target_include_directories(pi_cuda PRIVATE ${sycl_inc_dir} - ${OPENCL_ICD_LOADER_HEADERS_DIR} - PUBLIC - ${CUDA_INCLUDE_DIRS} ) target_link_libraries(pi_cuda - PRIVATE OpenCL-Headers - PUBLIC cudadrv) + PRIVATE + OpenCL-Headers + cudadrv +) add_common_options(pi_cuda) diff --git a/sycl/unittests/pi/cuda/CMakeLists.txt b/sycl/unittests/pi/cuda/CMakeLists.txt index dd77a5fb1d0a3..24b232edb7c71 100644 --- a/sycl/unittests/pi/cuda/CMakeLists.txt +++ b/sycl/unittests/pi/cuda/CMakeLists.txt @@ -13,14 +13,19 @@ add_sycl_unittest(PiCudaTests OBJECT add_dependencies(PiCudaTests sycl) -target_compile_definitions(PiCudaTests PRIVATE - GTEST_HAS_COMBINE=1) +target_compile_definitions(PiCudaTests + PRIVATE + GTEST_HAS_COMBINE=1) -target_include_directories( - PiCudaTests PUBLIC - ${CUDA_INCLUDE_DIRS} - "../" - "${sycl_inc_dir}/CL/sycl/detail/" - ${sycl_inc_dir} - "${sycl_plugin_dir}/cuda/" +target_include_directories(PiCudaTests + PRIVATE + "../" + "${sycl_inc_dir}/CL/sycl/detail/" + ${sycl_inc_dir} + "${sycl_plugin_dir}/cuda/" +) + +target_link_libraries(PiCudaTests + PRIVATE + cudadrv ) From fa2cb1cbee95e2b6c347baad6e8c2e879df615ae Mon Sep 17 00:00:00 2001 From: Pavel V Chupin Date: Mon, 26 Apr 2021 21:28:35 -0700 Subject: [PATCH 4/9] Add opencl as llvm external project instead of directory --- buildbot/configure.py | 2 +- sycl/CMakeLists.txt | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/buildbot/configure.py b/buildbot/configure.py index a7be08993d9f3..b0847bbfa3df7 100644 --- a/buildbot/configure.py +++ b/buildbot/configure.py @@ -13,7 +13,7 @@ def do_configure(args): if not os.path.isdir(abs_obj_dir): os.makedirs(abs_obj_dir) - llvm_external_projects = 'sycl;llvm-spirv;opencl-aot;libdevice;xpti;xptifw' + llvm_external_projects = 'sycl;llvm-spirv;opencl;opencl-aot;libdevice;xpti;xptifw' llvm_dir = os.path.join(abs_src_dir, "llvm") sycl_dir = os.path.join(abs_src_dir, "sycl") diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt index 38e362aa5f7ca..9173b44929593 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt @@ -71,9 +71,11 @@ set(SYCL_INCLUDE_DIR "include") set(SYCL_INCLUDE_BUILD_DIR ${LLVM_BINARY_DIR}/${SYCL_INCLUDE_DIR}) set(SYCL_INCLUDE_DEPLOY_DIR ${CMAKE_INSTALL_PREFIX}/${SYCL_INCLUDE_DIR}) -# Second argument is not used, it's required since first arg is not a real -# subdirectory -add_subdirectory(../opencl ${CMAKE_CURRENT_BINARY_DIR}/opencl_deps) +add_llvm_external_project(opencl) +list(FIND LLVM_ENABLE_PROJECTS opencl OPENCL_FOUND) +if(OPENCL_FOUND EQUAL -1) + message(FATAL_ERROR "opencl external project required but not found.") +endif() # Copy OpenCL Headers into sycl headers build directory # Compiler does automatic lookup bin/../include based on clang binary location, From 26dd1b1264dde4f5c38d4e51248929be907761b3 Mon Sep 17 00:00:00 2001 From: Pavel V Chupin Date: Mon, 26 Apr 2021 22:31:01 -0700 Subject: [PATCH 5/9] Remove broken --system-ocl configure feature and cleanup --- buildbot/configure.py | 9 --------- opencl/CMakeLists.txt | 43 ++++++++++++++++++------------------------- 2 files changed, 18 insertions(+), 34 deletions(-) diff --git a/buildbot/configure.py b/buildbot/configure.py index b0847bbfa3df7..207b0c36d128b 100644 --- a/buildbot/configure.py +++ b/buildbot/configure.py @@ -21,8 +21,6 @@ def do_configure(args): xpti_dir = os.path.join(abs_src_dir, "xpti") xptifw_dir = os.path.join(abs_src_dir, "xptifw") libdevice_dir = os.path.join(abs_src_dir, "libdevice") - ocl_header_dir = os.path.join(abs_obj_dir, "OpenCL-Headers") - icd_loader_lib = os.path.join(abs_obj_dir, "OpenCL-ICD-Loader", "build") llvm_targets_to_build = 'X86' llvm_enable_projects = 'clang;' + llvm_external_projects libclc_targets_to_build = '' @@ -34,7 +32,6 @@ def do_configure(args): llvm_build_shared_libs = 'OFF' sycl_enable_xpti_tracing = 'ON' - icd_loader_lib = os.path.join(icd_loader_lib, "libOpenCL.so" if platform.system() == 'Linux' else "OpenCL.lib") # replace not append, so ARM ^ X86 if args.arm: @@ -87,11 +84,6 @@ def do_configure(args): "-DSYCL_ENABLE_XPTI_TRACING={}".format(sycl_enable_xpti_tracing) ] - if args.system_ocl: - cmake_cmd.extend([ - "-DOpenCL_INCLUDE_DIR={}".format(ocl_header_dir), - "-DOpenCL_LIBRARY={}".format(icd_loader_lib)]) - if args.l0_headers and args.l0_loader: cmake_cmd.extend([ "-DL0_INCLUDE_DIR={}".format(args.l0_headers), @@ -150,7 +142,6 @@ def main(): parser.add_argument("--arm", action='store_true', help="build ARM support rather than x86") parser.add_argument("--no-assertions", action='store_true', help="build without assertions") parser.add_argument("--docs", action='store_true', help="build Doxygen documentation") - parser.add_argument("--system-ocl", action='store_true', help="use OpenCL deps from system (no download)") parser.add_argument("--no-werror", action='store_true', help="Don't treat warnings as errors") parser.add_argument("--shared-libs", action='store_true', help="Build shared libraries") parser.add_argument("--cmake-opt", action='append', help="Additional CMake option not configured via script parameters") diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt index 6ec7397591f82..539ae81033e94 100644 --- a/opencl/CMakeLists.txt +++ b/opencl/CMakeLists.txt @@ -3,20 +3,16 @@ cmake_minimum_required(VERSION 3.14) include(FetchContent) # OpenCL Headers -if(NOT OpenCL_INCLUDE_DIRS) - message(STATUS "Will fetch OpenCL headers from github.com") +message(STATUS "Will fetch OpenCL headers from github.com") - FetchContent_Declare(ocl-headers - GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-Headers.git - GIT_TAG 23710f1b99186065c1768fc3098ba681adc0f253 - ) +FetchContent_Declare(ocl-headers + GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-Headers.git + GIT_TAG 23710f1b99186065c1768fc3098ba681adc0f253 +) - FetchContent_MakeAvailable(ocl-headers) - FetchContent_GetProperties(ocl-headers) - set(OpenCL_INCLUDE_DIRS ${ocl-headers_SOURCE_DIR}) -else() - message(STATUS "OpenCL headers are added manually ${OpenCL_INCLUDE_DIRS}") -endif() +FetchContent_MakeAvailable(ocl-headers) +FetchContent_GetProperties(ocl-headers) +set(OpenCL_INCLUDE_DIRS ${ocl-headers_SOURCE_DIR}) target_compile_definitions(Headers INTERFACE -DCL_TARGET_OPENCL_VERSION=220) add_library(OpenCL-Headers ALIAS Headers) @@ -24,26 +20,23 @@ add_library(OpenCL-Headers ALIAS Headers) # OpenCL Library (ICD Loader) # Set OPENCL_ICD_LOADER_HEADERS_DIR, as prerequisite for ICD build -set(OPENCL_ICD_LOADER_HEADERS_DIR ${OpenCL_INCLUDE_DIRS} CACHE PATH "Path to OpenCL Headers") +set(OPENCL_ICD_LOADER_HEADERS_DIR + ${OpenCL_INCLUDE_DIRS} PATH "Path to OpenCL Headers") # LLVM build sets this OFF by default, but we need OpenCL to be built as shared # library. set(BUILD_SHARED_LIBS ON) -if(NOT OpenCL_LIBRARY) - message(STATUS "Will fetch OpenCL ICD Loader from github.com") +message(STATUS "Will fetch OpenCL ICD Loader from github.com") - FetchContent_Declare(ocl-icd - GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-ICD-Loader.git - GIT_TAG 5f8249691ec8c25775789498951f8e9eb62c201d - ) +FetchContent_Declare(ocl-icd + GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-ICD-Loader.git + GIT_TAG 5f8249691ec8c25775789498951f8e9eb62c201d +) - FetchContent_MakeAvailable(ocl-icd) - FetchContent_GetProperties(ocl-icd) - set(OpenCL_LIBRARY ${ocl-icd_SOURCE_DIR}) -else() - message(STATUS "OpenCL ICD Loader is added manually ${OpenCL_LIBRARY}") -endif() +FetchContent_MakeAvailable(ocl-icd) +FetchContent_GetProperties(ocl-icd) +set(OpenCL_LIBRARY ${ocl-icd_SOURCE_DIR}) add_library(OpenCL-ICD ALIAS OpenCL) From 1f468b3ae4b43749ada79efba89a6b78ff032bba Mon Sep 17 00:00:00 2001 From: Pavel V Chupin Date: Mon, 26 Apr 2021 23:07:09 -0700 Subject: [PATCH 6/9] Replace OPENCL_ICD_LOADER_HEADERS_DIR with OpenCL_INCLUDE_DIR Also cleanup in a few places where it's not used --- opencl/CMakeLists.txt | 5 +++-- sycl/CMakeLists.txt | 4 ++-- sycl/plugins/level_zero/CMakeLists.txt | 1 - sycl/tools/sycl-ls/CMakeLists.txt | 8 +------- 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt index 539ae81033e94..05796550110ee 100644 --- a/opencl/CMakeLists.txt +++ b/opencl/CMakeLists.txt @@ -12,7 +12,8 @@ FetchContent_Declare(ocl-headers FetchContent_MakeAvailable(ocl-headers) FetchContent_GetProperties(ocl-headers) -set(OpenCL_INCLUDE_DIRS ${ocl-headers_SOURCE_DIR}) +set(OpenCL_INCLUDE_DIR + ${ocl-headers_SOURCE_DIR} CACHE PATH "Path to OpenCL Headers") target_compile_definitions(Headers INTERFACE -DCL_TARGET_OPENCL_VERSION=220) add_library(OpenCL-Headers ALIAS Headers) @@ -21,7 +22,7 @@ add_library(OpenCL-Headers ALIAS Headers) # Set OPENCL_ICD_LOADER_HEADERS_DIR, as prerequisite for ICD build set(OPENCL_ICD_LOADER_HEADERS_DIR - ${OpenCL_INCLUDE_DIRS} PATH "Path to OpenCL Headers") + ${OpenCL_INCLUDE_DIR} CACHE PATH "Path to OpenCL Headers") # LLVM build sets this OFF by default, but we need OpenCL to be built as shared # library. diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt index 9173b44929593..3b2188a945222 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt @@ -80,11 +80,11 @@ endif() # Copy OpenCL Headers into sycl headers build directory # Compiler does automatic lookup bin/../include based on clang binary location, # e.g. when run LIT tests -file(COPY ${OPENCL_ICD_LOADER_HEADERS_DIR}/CL +file(COPY ${OpenCL_INCLUDE_DIR}/CL DESTINATION ${SYCL_INCLUDE_BUILD_DIR}/sycl) # Include OpenCL Headers into final bundle. -install(DIRECTORY ${OPENCL_ICD_LOADER_HEADERS_DIR}/CL +install(DIRECTORY ${OpenCL_INCLUDE_DIR}/CL DESTINATION ${SYCL_INCLUDE_DEPLOY_DIR}/sycl COMPONENT OpenCL-Headers) diff --git a/sycl/plugins/level_zero/CMakeLists.txt b/sycl/plugins/level_zero/CMakeLists.txt index fffc7867dda9c..524fafb945b82 100755 --- a/sycl/plugins/level_zero/CMakeLists.txt +++ b/sycl/plugins/level_zero/CMakeLists.txt @@ -39,7 +39,6 @@ if (NOT DEFINED LEVEL_ZERO_LIBRARY OR NOT DEFINED LEVEL_ZERO_INCLUDE_DIR) INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/level_zero_loader_install" CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} - -DOpenCL_INCLUDE_DIR=${OpenCL_INCLUDE_DIRS} -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR:PATH=lib${LLVM_LIBDIR_SUFFIX} ${AUX_CMAKE_FLAGS} diff --git a/sycl/tools/sycl-ls/CMakeLists.txt b/sycl/tools/sycl-ls/CMakeLists.txt index ee79683710943..a409db2d79d5f 100644 --- a/sycl/tools/sycl-ls/CMakeLists.txt +++ b/sycl/tools/sycl-ls/CMakeLists.txt @@ -1,12 +1,6 @@ add_executable(sycl-ls sycl-ls.cpp) add_dependencies(sycl-ls sycl) -target_include_directories(sycl-ls PRIVATE "${sycl_inc_dir}" -#FIXME: OpenCL headers has to be added explicitly here for CUDA target build, -# to overrule OpenCL headers included in CUDA which are implicitly present -# as sycl target interface (for CUDA build) -# This shouldn't be required if sycl-ls app would depend solely on SYCL -# headers, but currently it requires OpenCL headers - "${OPENCL_ICD_LOADER_HEADERS_DIR}") +target_include_directories(sycl-ls PRIVATE "${sycl_inc_dir}") target_link_libraries(sycl-ls PRIVATE sycl From f3779c168c59f9ffde97c5c5420c7fae48745e7d Mon Sep 17 00:00:00 2001 From: Pavel Chupin Date: Tue, 27 Apr 2021 13:36:46 -0700 Subject: [PATCH 7/9] Apply suggestions from code review Co-authored-by: Alexey Bader Co-authored-by: smaslov-intel <48694368+smaslov-intel@users.noreply.github.com> --- sycl/plugins/level_zero/CMakeLists.txt | 5 +++-- sycl/plugins/opencl/CMakeLists.txt | 9 +++++---- sycl/unittests/pi/cuda/CMakeLists.txt | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/sycl/plugins/level_zero/CMakeLists.txt b/sycl/plugins/level_zero/CMakeLists.txt index 524fafb945b82..3c6f985e8689e 100755 --- a/sycl/plugins/level_zero/CMakeLists.txt +++ b/sycl/plugins/level_zero/CMakeLists.txt @@ -136,8 +136,9 @@ endif() add_dependencies(sycl-toolchain pi_level_zero) target_link_libraries(pi_level_zero - PRIVATE "${LEVEL_ZERO_LOADER}" - PRIVATE OpenCL-Headers + PRIVATE + "${LEVEL_ZERO_LOADER}" + OpenCL-Headers ) if (UNIX) diff --git a/sycl/plugins/opencl/CMakeLists.txt b/sycl/plugins/opencl/CMakeLists.txt index 4b8dab7342db0..bd7ac1e50fe28 100644 --- a/sycl/plugins/opencl/CMakeLists.txt +++ b/sycl/plugins/opencl/CMakeLists.txt @@ -6,9 +6,9 @@ # Plugin for OpenCL # Create Shared library for libpi_opencl.so. -#TODO: remove dependency on pi.hpp in sycl project. +#TODO: remove dependency on pi.h in sycl project. #TODO: Currently, the pi.h header is common between sycl and plugin library sources. -#This can be changed by copying the pi.hpp file in the plugins project. +#This can be changed by copying the pi.h file in the plugins project. add_library(pi_opencl SHARED "${sycl_inc_dir}/CL/sycl/detail/pi.h" @@ -24,8 +24,9 @@ target_include_directories(pi_opencl PRIVATE "${sycl_inc_dir}") #link pi_opencl with OpenCL headers and ICD Loader. target_link_libraries(pi_opencl - PRIVATE OpenCL-Headers - PRIVATE OpenCL-ICD + PRIVATE + OpenCL-Headers + OpenCL-ICD ) if (MSVC) # by defining __SYCL_BUILD_SYCL_DLL, we can use __declspec(dllexport) diff --git a/sycl/unittests/pi/cuda/CMakeLists.txt b/sycl/unittests/pi/cuda/CMakeLists.txt index 24b232edb7c71..a2f4bd926a40a 100644 --- a/sycl/unittests/pi/cuda/CMakeLists.txt +++ b/sycl/unittests/pi/cuda/CMakeLists.txt @@ -21,7 +21,7 @@ target_include_directories(PiCudaTests PRIVATE "../" "${sycl_inc_dir}/CL/sycl/detail/" - ${sycl_inc_dir} + "${sycl_inc_dir}" "${sycl_plugin_dir}/cuda/" ) From 71d4b0f8b746287655fe54847a86c88bcf9ca3ae Mon Sep 17 00:00:00 2001 From: Pavel V Chupin Date: Tue, 27 Apr 2021 15:50:52 -0700 Subject: [PATCH 8/9] Add feature to use pre-downloaded OpenCL deps sources Can be used by configure.py --cmake-opt="-DOpenCL_HEADERS=path" --cmake-opt="-DOpenCL_LIBRARY_SRC=path" --- opencl/CMakeLists.txt | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt index 05796550110ee..a0762ae8b500a 100644 --- a/opencl/CMakeLists.txt +++ b/opencl/CMakeLists.txt @@ -3,12 +3,20 @@ cmake_minimum_required(VERSION 3.14) include(FetchContent) # OpenCL Headers -message(STATUS "Will fetch OpenCL headers from github.com") +if(NOT OpenCL_HEADERS) + message(STATUS "Will fetch OpenCL headers from github.com") -FetchContent_Declare(ocl-headers - GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-Headers.git - GIT_TAG 23710f1b99186065c1768fc3098ba681adc0f253 -) + FetchContent_Declare(ocl-headers + GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-Headers.git + GIT_TAG 23710f1b99186065c1768fc3098ba681adc0f253 + ) +else() + message(STATUS "OpenCL headers are added manually ${OpenCL_HEADERS}") + + FetchContent_Declare(ocl-headers + URL ${OpenCL_HEADERS} + ) +endif() FetchContent_MakeAvailable(ocl-headers) FetchContent_GetProperties(ocl-headers) @@ -28,16 +36,24 @@ set(OPENCL_ICD_LOADER_HEADERS_DIR # library. set(BUILD_SHARED_LIBS ON) -message(STATUS "Will fetch OpenCL ICD Loader from github.com") +if(NOT OpenCL_LIBRARY_SRC) + message(STATUS "Will fetch OpenCL ICD Loader from github.com") -FetchContent_Declare(ocl-icd - GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-ICD-Loader.git - GIT_TAG 5f8249691ec8c25775789498951f8e9eb62c201d -) + FetchContent_Declare(ocl-icd + GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-ICD-Loader.git + GIT_TAG 5f8249691ec8c25775789498951f8e9eb62c201d + ) +else() + # TODO: add possibility to use prebuilt OpenCL library rather than building + # together with llvm. + message(STATUS + "OpenCL ICD Loader sources added manually ${OpenCL_LIBRARY_SRC}") -FetchContent_MakeAvailable(ocl-icd) -FetchContent_GetProperties(ocl-icd) -set(OpenCL_LIBRARY ${ocl-icd_SOURCE_DIR}) + FetchContent_Declare(ocl-icd + URL ${OpenCL_LIBRARY_SRC} + ) +endif() +FetchContent_MakeAvailable(ocl-icd) add_library(OpenCL-ICD ALIAS OpenCL) From 9dd80bd717a30962c30acf2b0dc89d59159d81e4 Mon Sep 17 00:00:00 2001 From: Pavel V Chupin Date: Fri, 30 Apr 2021 00:09:35 -0700 Subject: [PATCH 9/9] Outline URLs and repo tags/hashes definitions --- opencl/CMakeLists.txt | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt index a0762ae8b500a..55d0ae71d7312 100644 --- a/opencl/CMakeLists.txt +++ b/opencl/CMakeLists.txt @@ -2,13 +2,25 @@ cmake_minimum_required(VERSION 3.14) include(FetchContent) +# Repo URLs + +set(OCL_HEADERS_REPO + "https://github.com/KhronosGroup/OpenCL-Headers.git") +set(OCL_LOADER_REPO + "https://github.com/KhronosGroup/OpenCL-ICD-Loader.git") + +# Repo tags/hashes + +set(OCL_HEADERS_TAG 23710f1b99186065c1768fc3098ba681adc0f253) +set(OCL_LOADER_TAG 5f8249691ec8c25775789498951f8e9eb62c201d) + # OpenCL Headers if(NOT OpenCL_HEADERS) message(STATUS "Will fetch OpenCL headers from github.com") FetchContent_Declare(ocl-headers - GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-Headers.git - GIT_TAG 23710f1b99186065c1768fc3098ba681adc0f253 + GIT_REPOSITORY ${OCL_HEADERS_REPO} + GIT_TAG ${OCL_HEADERS_TAG} ) else() message(STATUS "OpenCL headers are added manually ${OpenCL_HEADERS}") @@ -40,8 +52,8 @@ if(NOT OpenCL_LIBRARY_SRC) message(STATUS "Will fetch OpenCL ICD Loader from github.com") FetchContent_Declare(ocl-icd - GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-ICD-Loader.git - GIT_TAG 5f8249691ec8c25775789498951f8e9eb62c201d + GIT_REPOSITORY ${OCL_LOADER_REPO} + GIT_TAG ${OCL_LOADER_TAG} ) else() # TODO: add possibility to use prebuilt OpenCL library rather than building