From dbacdbdf88b196a1f4d78418df7710f4afe399c4 Mon Sep 17 00:00:00 2001 From: Jeremy Newton Date: Wed, 6 Apr 2022 15:07:13 -0400 Subject: [PATCH] SWDEV-321116 - Allow disabling ICD loader This patch adds an option (BUILD_ICD) to toggle the ICD loader build with rocm-opencl. This isn't useful for official ROCm use, but distros or users may want build rocm-opencl with their own OCL ICD loader. The default option is BUILD_ICD=ON. If this option is set to OFF, an OpenCL OCD loader must be installed prior to attempting to build rocm-opencl. E.g. distros already provide ocl icd loader packages: sudo yum install ocd-icd-devel sudo apt-get install ocl-icd-opencl-dev sudo zypper install ocd-icd-devel Signed-off-by: Jeremy Newton Change-Id: I6006593eceed543cd829e8949ec2256482815673 [ROCm/clr commit: d1782940f38afc9f1033c5466e62e7c623676c6c] --- projects/clr/opencl/CMakeLists.txt | 25 +++++++--- .../clr/opencl/opencl-backward-compat.cmake | 22 +++++---- projects/clr/opencl/packaging/CMakeLists.txt | 49 +++++++++++++------ 3 files changed, 64 insertions(+), 32 deletions(-) diff --git a/projects/clr/opencl/CMakeLists.txt b/projects/clr/opencl/CMakeLists.txt index bcde879e63..5d8d88601d 100644 --- a/projects/clr/opencl/CMakeLists.txt +++ b/projects/clr/opencl/CMakeLists.txt @@ -13,12 +13,17 @@ set(CMAKE_INSTALL_LIBDIR "lib" CACHE STRING "Library install directory") include(GNUInstallDirs) option(BUILD_TESTS "Enable building OpenCL tests" OFF) +option(BUILD_ICD "Enable building OpenCL ICD Loader" ON) option(EMU_ENV "Enable building for emulation environment" OFF) option(FILE_REORG_BACKWARD_COMPATIBILITY "Enable File Reorganization backward compatibility" ON) set(OPENCL_ICD_LOADER_HEADERS_DIR "${CMAKE_CURRENT_LIST_DIR}/khronos/headers/opencl2.2" CACHE PATH "") -add_subdirectory(khronos/icd) +if(BUILD_ICD) + add_subdirectory(khronos/icd) +else() + find_package(OpenCL REQUIRED) +endif() add_subdirectory(amdocl) add_subdirectory(tools/clinfo) add_subdirectory(tools/cltrace) @@ -56,8 +61,10 @@ if (DEFINED ROCM_PATCH_VERSION) set(OPENCL_AMD_ICD_FILE "amdocl64_${ROCM_PATCH_VERSION}.icd") endif() -get_target_property(OPENCL_LIB_VERSION_MAJOR OpenCL SOVERSION) -get_target_property(OPENCL_LIB_VERSION_STRING OpenCL VERSION) +if(BUILD_ICD) + get_target_property(OPENCL_LIB_VERSION_MAJOR OpenCL SOVERSION) + get_target_property(OPENCL_LIB_VERSION_STRING OpenCL VERSION) +endif() #Set Package Version set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) @@ -81,11 +88,13 @@ endif() #Package: rocm-opencl,rocm-opencl-dev/devel,rocm-ocl-icd -set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/rocm-ocl-icd) -configure_file(packaging/rocm-ocl-icd.postinst ${BUILD_DIR}/postinst @ONLY) -configure_file(packaging/rocm-ocl-icd.prerm ${BUILD_DIR}/prerm @ONLY) -configure_file(packaging/rocm-ocl-icd.rpm_post ${BUILD_DIR}/rpm_post @ONLY) -configure_file(packaging/rocm-ocl-icd.rpm_postun ${BUILD_DIR}/rpm_postun @ONLY) +if(BUILD_ICD) + set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/rocm-ocl-icd) + configure_file(packaging/rocm-ocl-icd.postinst ${BUILD_DIR}/postinst @ONLY) + configure_file(packaging/rocm-ocl-icd.prerm ${BUILD_DIR}/prerm @ONLY) + configure_file(packaging/rocm-ocl-icd.rpm_post ${BUILD_DIR}/rpm_post @ONLY) + configure_file(packaging/rocm-ocl-icd.rpm_postun ${BUILD_DIR}/rpm_postun @ONLY) +endif() add_subdirectory(packaging) diff --git a/projects/clr/opencl/opencl-backward-compat.cmake b/projects/clr/opencl/opencl-backward-compat.cmake index 7dd103f253..e159924b5e 100644 --- a/projects/clr/opencl/opencl-backward-compat.cmake +++ b/projects/clr/opencl/opencl-backward-compat.cmake @@ -88,18 +88,20 @@ endfunction() #function to create symlink to libraries function(create_library_symlink) - file(MAKE_DIRECTORY ${OPENCL_WRAPPER_LIB_DIR}) - set(LIB_OPENCL "libOpenCL.so") - set(MAJ_VERSION "${OPENCL_LIB_VERSION_MAJOR}") - set(SO_VERSION "${OPENCL_LIB_VERSION_STRING}") - set(library_files "${LIB_OPENCL}" "${LIB_OPENCL}.${MAJ_VERSION}" "${LIB_OPENCL}.${SO_VERSION}") + if(BUILD_ICD) + file(MAKE_DIRECTORY ${OPENCL_WRAPPER_LIB_DIR}) + set(LIB_OPENCL "libOpenCL.so") + set(MAJ_VERSION "${OPENCL_LIB_VERSION_MAJOR}") + set(SO_VERSION "${OPENCL_LIB_VERSION_STRING}") + set(library_files "${LIB_OPENCL}" "${LIB_OPENCL}.${MAJ_VERSION}" "${LIB_OPENCL}.${SO_VERSION}") - foreach(file_name ${library_files}) - add_custom_target(link_${file_name} ALL + foreach(file_name ${library_files}) + add_custom_target(link_${file_name} ALL WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E create_symlink ../../${CMAKE_INSTALL_LIBDIR}/${file_name} ${OPENCL_WRAPPER_LIB_DIR}/${file_name}) - endforeach() + endforeach() + endif() if(BUILD_SHARED_LIBS) set(LIB_AMDDOC "libamdocl64.so") else() @@ -124,7 +126,9 @@ install(DIRECTORY ${OPENCL_WRAPPER_BIN_DIR} DESTINATION ${OPENCL} COMPONENT bin option(BUILD_SHARED_LIBS "Build the shared library" ON) # Create symlink to libraries create_library_symlink() -install(DIRECTORY ${OPENCL_WRAPPER_LIB_DIR} DESTINATION ${OPENCL} COMPONENT icd) +if(BUILD_ICD) + install(DIRECTORY ${OPENCL_WRAPPER_LIB_DIR} DESTINATION ${OPENCL} COMPONENT icd) +endif() if(BUILD_SHARED_LIBS) install(FILES ${OPENCL_WRAPPER_DIR}/libamdocl64.so DESTINATION ${OPENCL}/lib COMPONENT binary) else() diff --git a/projects/clr/opencl/packaging/CMakeLists.txt b/projects/clr/opencl/packaging/CMakeLists.txt index d7f6a753e0..cb57c0ece4 100644 --- a/projects/clr/opencl/packaging/CMakeLists.txt +++ b/projects/clr/opencl/packaging/CMakeLists.txt @@ -1,7 +1,12 @@ cmake_minimum_required(VERSION 3.5.1) project(rocm-opencl) +set(CPACK_COMPONENTS_ALL binary dev) +if(BUILD_ICD) set(CPACK_COMPONENTS_ALL binary dev icd) +else() +set(CPACK_COMPONENTS_ALL binary dev) +endif() set(CPACK_DEB_COMPONENT_INSTALL ON) set(CPACK_RPM_COMPONENT_INSTALL ON) @@ -17,8 +22,10 @@ install(DIRECTORY ${CMAKE_SOURCE_DIR}/khronos/headers/opencl2.2/CL PATTERN cl_dx9_media_sharing.h EXCLUDE PATTERN cl_egl.h EXCLUDE ) -install(TARGETS OpenCL DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT icd ) -install(FILES ${CMAKE_SOURCE_DIR}/khronos/icd/LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/rocm-ocl-icd COMPONENT icd) +if(BUILD_ICD) + install(TARGETS OpenCL DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT icd ) + install(FILES ${CMAKE_SOURCE_DIR}/khronos/icd/LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/rocm-ocl-icd COMPONENT icd) +endif() # Generic CPACK variables @@ -44,11 +51,19 @@ endif() message("Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}") set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") -set(CPACK_DEBIAN_BINARY_PACKAGE_DEPENDS "rocm-ocl-icd, libelf-dev, comgr, hsa-rocr, rocm-core") +if(BUILD_ICD) + set(CPACK_DEBIAN_BINARY_PACKAGE_DEPENDS "rocm-ocl-icd, libelf-dev, comgr, hsa-rocr, rocm-core") +else() + set(CPACK_DEBIAN_BINARY_PACKAGE_DEPENDS "ocl-icd-libopencl1, libelf-dev, comgr, hsa-rocr, rocm-core") +endif() # RPM CPACK variables set(CPACK_BINARY_RPM "ON") -set(CPACK_RPM_BINARY_PACKAGE_REQUIRES "rocm-ocl-icd, comgr, hsa-rocr, rocm-core") +if(BUILD_ICD) + set(CPACK_RPM_BINARY_PACKAGE_REQUIRES "rocm-ocl-icd, comgr, hsa-rocr, rocm-core") +else() + set(CPACK_RPM_BINARY_PACKAGE_REQUIRES "ocl-icd, comgr, hsa-rocr, rocm-core") +endif() #Unable to set CPACK_RPM_BIANRY_PACKAGE_LICENSE to control individual pacakge license #Hence combining the license for BINARY,DEV,ICD to one @@ -69,21 +84,23 @@ set(CPACK_RPM_DEV_PACKAGE_REQUIRES "rocm-opencl, hsa-rocr-devel, rocm-core") ############################# # Debian CPACK variables -set(CPACK_ICD_DEB "ON") -set(CPACK_DEBIAN_ICD_PACKAGE_NAME "rocm-ocl-icd") +if(BUILD_ICD) + set(CPACK_ICD_DEB "ON") + set(CPACK_DEBIAN_ICD_PACKAGE_NAME "rocm-ocl-icd") -set(CPACK_DEBIAN_ICD_PACKAGE_CONTROL_EXTRA "${CMAKE_BINARY_DIR}/packages/rocm-ocl-icd/postinst;${CMAKE_BINARY_DIR}/packages/rocm-ocl-icd/prerm") -set(CPACK_DEBIAN_ICD_PACKAGE_DEPENDS "rocm-core") + set(CPACK_DEBIAN_ICD_PACKAGE_CONTROL_EXTRA "${CMAKE_BINARY_DIR}/packages/rocm-ocl-icd/postinst;${CMAKE_BINARY_DIR}/packages/rocm-ocl-icd/prerm") + set(CPACK_DEBIAN_ICD_PACKAGE_DEPENDS "rocm-core") # RPM CPACK variables -set(CPACK_ICD_RPM "ON") -set(CPACK_RPM_ICD_PACKAGE_NAME "rocm-ocl-icd") + set(CPACK_ICD_RPM "ON") + set(CPACK_RPM_ICD_PACKAGE_NAME "rocm-ocl-icd") -set(CPACK_RPM_ICD_POST_INSTALL_SCRIPT_FILE "${CMAKE_BINARY_DIR}/packages/rocm-ocl-icd/rpm_post") -set(CPACK_RPM_ICD_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_BINARY_DIR}/packages/rocm-ocl-icd/rpm_postun") -set(CPACK_RPM_ICD_PACKAGE_REQUIRES "rocm-core") + set(CPACK_RPM_ICD_POST_INSTALL_SCRIPT_FILE "${CMAKE_BINARY_DIR}/packages/rocm-ocl-icd/rpm_post") + set(CPACK_RPM_ICD_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_BINARY_DIR}/packages/rocm-ocl-icd/rpm_postun") + set(CPACK_RPM_ICD_PACKAGE_REQUIRES "rocm-core") +endif() if(DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE}) set(CPACK_RPM_PACKAGE_RELEASE $ENV{CPACK_RPM_PACKAGE_RELEASE}) @@ -112,8 +129,10 @@ if(NOT ROCM_DEP_ROCMCORE) string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_BINARY_PACKAGE_DEPENDS ${CPACK_DEBIAN_BINARY_PACKAGE_DEPENDS}) string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_DEV_PACKAGE_REQUIRES ${CPACK_RPM_DEV_PACKAGE_REQUIRES}) string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_DEV_PACKAGE_DEPENDS ${CPACK_DEBIAN_DEV_PACKAGE_DEPENDS}) - string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_ICD_PACKAGE_REQUIRES ${CPACK_RPM_ICD_PACKAGE_REQUIRES}) - string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_ICD_PACKAGE_DEPENDS ${CPACK_DEBIAN_ICD_PACKAGE_DEPENDS}) + if(BUILD_ICD) + string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_ICD_PACKAGE_REQUIRES ${CPACK_RPM_ICD_PACKAGE_REQUIRES}) + string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_ICD_PACKAGE_DEPENDS ${CPACK_DEBIAN_ICD_PACKAGE_DEPENDS}) + endif() endif() include(CPack)