From fb6409b09000c0f4a48d40a3c6820bb928708cd0 Mon Sep 17 00:00:00 2001 From: Jeremy Newton Date: Wed, 8 Dec 2021 14:20:17 -0500 Subject: [PATCH] SWDEV-306262 - Add ocl-icd subpackages These packages contains only the ICD loader (libopencl.so). This allows legacy opencl (PAL) to use these packages instead of duplicating these packages in both builds. This also resolves a licensing issue where OCL ICD is licensed as Apache, while opencl is MIT. Having a separate package avoid license confusion. Signed-off-by: Jeremy Newton Change-Id: I3dd29239841da7f5dc767419a9bc35d9046e9936 [ROCm/clr commit: cb1e7cd48d0aac01677edf1c3d1a6d76303bb1b8] --- projects/clr/opencl/CMakeLists.txt | 21 ++++-- ...-opencl.postinst => rocm-ocl-icd.postinst} | 0 .../{rocm-opencl.prerm => rocm-ocl-icd.prerm} | 0 ...-opencl.rpm_post => rocm-ocl-icd.rpm_post} | 0 ...ncl.rpm_postun => rocm-ocl-icd.rpm_postun} | 0 .../clr/opencl/packaging/rocm-ocl-icd.txt | 69 +++++++++++++++++++ projects/clr/opencl/packaging/rocm-opencl.txt | 10 +-- 7 files changed, 87 insertions(+), 13 deletions(-) rename projects/clr/opencl/packaging/{rocm-opencl.postinst => rocm-ocl-icd.postinst} (100%) rename projects/clr/opencl/packaging/{rocm-opencl.prerm => rocm-ocl-icd.prerm} (100%) rename projects/clr/opencl/packaging/{rocm-opencl.rpm_post => rocm-ocl-icd.rpm_post} (100%) rename projects/clr/opencl/packaging/{rocm-opencl.rpm_postun => rocm-ocl-icd.rpm_postun} (100%) create mode 100644 projects/clr/opencl/packaging/rocm-ocl-icd.txt diff --git a/projects/clr/opencl/CMakeLists.txt b/projects/clr/opencl/CMakeLists.txt index 7b98c067f8..4b582abb63 100644 --- a/projects/clr/opencl/CMakeLists.txt +++ b/projects/clr/opencl/CMakeLists.txt @@ -62,13 +62,24 @@ if(NOT DEFINED ROCM_PATH) endif() message (STATUS "ROCM Installation path(ROCM_PATH): ${ROCM_PATH}") +# Package: rocm-ocl-icd +set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/rocm-ocl-icd) +configure_file(packaging/rocm-ocl-icd.txt ${BUILD_DIR}/CMakeLists.txt @ONLY) +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) +add_custom_target(pkg_rocm_ocl_icd COMMAND ${CMAKE_COMMAND} . + COMMAND rm -rf *.deb *.rpm *.tar.gz + COMMAND make package + COMMAND cp *.deb ${PROJECT_BINARY_DIR} + COMMAND cp *.rpm ${PROJECT_BINARY_DIR} + WORKING_DIRECTORY ${BUILD_DIR} + DEPENDS amdocl OpenCL) + # Package: rocm-opencl set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/rocm-opencl) configure_file(packaging/rocm-opencl.txt ${BUILD_DIR}/CMakeLists.txt @ONLY) -configure_file(packaging/rocm-opencl.postinst ${BUILD_DIR}/postinst @ONLY) -configure_file(packaging/rocm-opencl.prerm ${BUILD_DIR}/prerm @ONLY) -configure_file(packaging/rocm-opencl.rpm_post ${BUILD_DIR}/rpm_post @ONLY) -configure_file(packaging/rocm-opencl.rpm_postun ${BUILD_DIR}/rpm_postun @ONLY) add_custom_target(pkg_rocm_opencl COMMAND ${CMAKE_COMMAND} . COMMAND rm -rf *.deb *.rpm *.tar.gz COMMAND make package @@ -96,7 +107,7 @@ endif() add_custom_target(package WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - DEPENDS pkg_rocm_opencl pkg_rocm_opencl_dev) + DEPENDS pkg_rocm_ocl_icd pkg_rocm_opencl pkg_rocm_opencl_dev) if(POLICY CMP0037) cmake_policy(POP) endif() diff --git a/projects/clr/opencl/packaging/rocm-opencl.postinst b/projects/clr/opencl/packaging/rocm-ocl-icd.postinst similarity index 100% rename from projects/clr/opencl/packaging/rocm-opencl.postinst rename to projects/clr/opencl/packaging/rocm-ocl-icd.postinst diff --git a/projects/clr/opencl/packaging/rocm-opencl.prerm b/projects/clr/opencl/packaging/rocm-ocl-icd.prerm similarity index 100% rename from projects/clr/opencl/packaging/rocm-opencl.prerm rename to projects/clr/opencl/packaging/rocm-ocl-icd.prerm diff --git a/projects/clr/opencl/packaging/rocm-opencl.rpm_post b/projects/clr/opencl/packaging/rocm-ocl-icd.rpm_post similarity index 100% rename from projects/clr/opencl/packaging/rocm-opencl.rpm_post rename to projects/clr/opencl/packaging/rocm-ocl-icd.rpm_post diff --git a/projects/clr/opencl/packaging/rocm-opencl.rpm_postun b/projects/clr/opencl/packaging/rocm-ocl-icd.rpm_postun similarity index 100% rename from projects/clr/opencl/packaging/rocm-opencl.rpm_postun rename to projects/clr/opencl/packaging/rocm-ocl-icd.rpm_postun diff --git a/projects/clr/opencl/packaging/rocm-ocl-icd.txt b/projects/clr/opencl/packaging/rocm-ocl-icd.txt new file mode 100644 index 0000000000..66e3863502 --- /dev/null +++ b/projects/clr/opencl/packaging/rocm-ocl-icd.txt @@ -0,0 +1,69 @@ +cmake_minimum_required(VERSION 3.5.1) +project(rocm-ocl-icd) + +install(FILES @PROJECT_BINARY_DIR@/khronos/icd/libOpenCL.so DESTINATION lib) +install(FILES @PROJECT_BINARY_DIR@/khronos/icd/libOpenCL.so.@OPENCL_LIB_VERSION_MAJOR@ DESTINATION lib) +install(FILES @PROJECT_BINARY_DIR@/khronos/icd/libOpenCL.so.@OPENCL_LIB_VERSION_STRING@ DESTINATION lib) +install(FILES @opencl_SOURCE_DIR@/khronos/icd/LICENSE DESTINATION share/doc/rocm-ocl-icd) + +############################# +# Packaging steps +############################# +# Generic CPACK variables +set(CPACK_GENERATOR "DEB;RPM") +set(CPACK_PACKAGE_NAME "rocm-ocl-icd") +set(CPACK_PACKAGE_CONTACT "ROCm OpenCL Support ") +set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.") +set(CPACK_PACKAGING_INSTALL_PREFIX @CPACK_PACKAGING_INSTALL_PREFIX@) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenCL ICD loader provided by ROCm") +set(CPACK_PACKAGE_VERSION @PROJECT_VERSION@) + +if(DEFINED ENV{ROCM_LIBPATCH_VERSION}) + set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}.$ENV{ROCM_LIBPATCH_VERSION}") + message("Using CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}") +endif() + +# Debian CPACK variables +set(CPACK_BINARY_DEB "ON") +if(DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) + set(CPACK_DEBIAN_PACKAGE_RELEASE $ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) +else() + set(CPACK_DEBIAN_PACKAGE_RELEASE "local") +endif() +message("Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}") +set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") +set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_BINARY_DIR}/postinst;${PROJECT_BINARY_DIR}/prerm") +set(CPACK_DEBIAN_PACKAGE_DEPENDS "rocm-core") + +# RPM CPACK variables +set(CPACK_BINARY_RPM "ON") +if(DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE}) + set(CPACK_RPM_PACKAGE_RELEASE $ENV{CPACK_RPM_PACKAGE_RELEASE}) +else() + set(CPACK_RPM_PACKAGE_RELEASE "local") +endif() +message("Using CPACK_RPM_PACKAGE_RELEASE ${CPACK_RPM_PACKAGE_RELEASE}") +set(CPACK_RPM_PACKAGE_LICENSE "ASL 2.0") + +## 'dist' breaks manual builds on debian systems due to empty Provides +execute_process(COMMAND rpm --eval %{?dist} + RESULT_VARIABLE PROC_RESULT + OUTPUT_VARIABLE EVAL_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE) +message("RESULT_VARIABLE ${PROC_RESULT} OUTPUT_VARIABLE: ${EVAL_RESULT}") + +if(PROC_RESULT EQUAL "0" AND NOT EVAL_RESULT STREQUAL "") + string(APPEND CPACK_RPM_PACKAGE_RELEASE "%{?dist}") +endif() +set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") +set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${PROJECT_BINARY_DIR}/rpm_post") +set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${PROJECT_BINARY_DIR}/rpm_postun") +set(CPACK_RPM_PACKAGE_AUTOREQPROV " no") +set(CPACK_RPM_PACKAGE_REQUIRES "rocm-core") +# Remove dependency on rocm-core if -DROCM_DEP_ROCMCORE=ON not given to cmake +if(NOT ROCM_DEP_ROCMCORE) + string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES}) + string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}) +endif() + +include(CPack) diff --git a/projects/clr/opencl/packaging/rocm-opencl.txt b/projects/clr/opencl/packaging/rocm-opencl.txt index 9abf91876d..830c378f6a 100644 --- a/projects/clr/opencl/packaging/rocm-opencl.txt +++ b/projects/clr/opencl/packaging/rocm-opencl.txt @@ -3,9 +3,6 @@ project(rocm-opencl) install(PROGRAMS @PROJECT_BINARY_DIR@/tools/clinfo/clinfo DESTINATION bin) install(FILES @PROJECT_BINARY_DIR@/amdocl/libamdocl64.so DESTINATION lib) -install(FILES @PROJECT_BINARY_DIR@/khronos/icd/libOpenCL.so DESTINATION lib) -install(FILES @PROJECT_BINARY_DIR@/khronos/icd/libOpenCL.so.@OPENCL_LIB_VERSION_MAJOR@ DESTINATION lib) -install(FILES @PROJECT_BINARY_DIR@/khronos/icd/libOpenCL.so.@OPENCL_LIB_VERSION_STRING@ DESTINATION lib) install(FILES @opencl_SOURCE_DIR@/LICENSE.txt DESTINATION share/doc/rocm-opencl) ############################# @@ -34,8 +31,7 @@ else() endif() message("Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}") set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") -set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_BINARY_DIR}/postinst;${PROJECT_BINARY_DIR}/prerm") -set(CPACK_DEBIAN_PACKAGE_DEPENDS "libelf-dev, comgr, hsa-rocr-dev, rocm-core") +set(CPACK_DEBIAN_PACKAGE_DEPENDS "rocm-ocl-icd, libelf-dev, comgr, hsa-rocr-dev, rocm-core") # RPM CPACK variables set(CPACK_BINARY_RPM "ON") @@ -58,10 +54,8 @@ if(PROC_RESULT EQUAL "0" AND NOT EVAL_RESULT STREQUAL "") string(APPEND CPACK_RPM_PACKAGE_RELEASE "%{?dist}") endif() set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") -set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${PROJECT_BINARY_DIR}/rpm_post") -set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${PROJECT_BINARY_DIR}/rpm_postun") set(CPACK_RPM_PACKAGE_AUTOREQPROV " no") -set(CPACK_RPM_PACKAGE_REQUIRES "comgr, hsa-rocr-dev, rocm-core") +set(CPACK_RPM_PACKAGE_REQUIRES "rocm-ocl-icd, comgr, hsa-rocr-dev, rocm-core") # Remove dependency on rocm-core if -DROCM_DEP_ROCMCORE=ON not given to cmake if(NOT ROCM_DEP_ROCMCORE) string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES})