diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt index 1cba48e017..113bb3ea8a 100644 --- a/opencl/CMakeLists.txt +++ b/opencl/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.4.3) +cmake_minimum_required(VERSION 3.5.1) if (POLICY CMP0048) cmake_policy(SET CMP0048 NEW) @@ -17,20 +17,44 @@ add_subdirectory(khronos/icd) add_subdirectory(amdocl) add_subdirectory(tools/clinfo) +# get date information based on UTC +# use the last two digits of year + week number + day in the week as OPENCL_VERSION_GITDATE +# use the commit date, instead of build date +# add xargs to remove strange trailing newline character +execute_process(COMMAND git show -s --format=@%ct + COMMAND xargs + COMMAND date -f - --utc +%y%U%w + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE OPENCL_VERSION_GITDATE + OUTPUT_STRIP_TRAILING_WHITESPACE) + +# get commit short hash +execute_process(COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE OPENCL_VERSION_GITHASH + OUTPUT_STRIP_TRAILING_WHITESPACE) + +set(OPENCL_VERSION_MAJOR "2") +set(OPENCL_VERSION_MINOR "0") +set(OPENCL_VERSION_PATCH ${OPENCL_VERSION_GITDATE}) + +get_target_property(OPENCL_LIB_VERSION_MAJOR OpenCL SOVERSION) +get_target_property(OPENCL_LIB_VERSION_STRING OpenCL VERSION) + ###--- Packaging ------------------------------------------------------------### # MAIN package install(PROGRAMS $ - DESTINATION bin/x86_64 + DESTINATION bin COMPONENT MAIN) install(PROGRAMS $ - DESTINATION lib/x86_64 + DESTINATION lib COMPONENT MAIN) install(PROGRAMS $ - DESTINATION lib/x86_64 + DESTINATION lib COMPONENT MAIN) install(PROGRAMS $ - DESTINATION lib/x86_64 + DESTINATION lib COMPONENT MAIN) # DEV package @@ -43,42 +67,55 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/khronos/headers/opencl2.2/CL" PATTERN cl_dx9_media_sharing.h EXCLUDE PATTERN cl_egl.h EXCLUDE) install(PROGRAMS $ - DESTINATION lib/x86_64 + DESTINATION lib COMPONENT DEV) -# Generic CPACK variables -set(CPACK_GENERATOR "DEB;RPM" CACHE STRING "Default packaging generators") +############################# +# Packaging steps +############################# +set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/rocm/opencl" CACHE PATH "Package Installation path for OpenCL") -set(CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc.") -set(CPACK_PACKAGE_VENDOR "AMD") -set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/rocm/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 + COMMAND cp *.deb ${PROJECT_BINARY_DIR} + COMMAND cp *.rpm ${PROJECT_BINARY_DIR} + WORKING_DIRECTORY ${BUILD_DIR} + DEPENDS amdocl64 OpenCL) -set(CPACK_PACKAGE_VERSION_MAJOR "1") -set(CPACK_PACKAGE_VERSION_MINOR "2") -set(CPACK_PACKAGE_VERSION_PATCH "0") +# Package: rocm-opencl-dev +set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/rocm-opencl-dev) +configure_file(packaging/rocm-opencl-dev.txt ${BUILD_DIR}/CMakeLists.txt @ONLY) +add_custom_target(pkg_rocm_opencl_dev 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 amdocl64 OpenCL) -# Debian CPACK variables -set(CPACK_DEB_COMPONENT_INSTALL ON) +# Package: all +if(POLICY CMP0037) + cmake_policy(PUSH) + cmake_policy(SET CMP0037 OLD) +endif() +file(GENERATE OUTPUT ${PROJECT_BINARY_DIR}/fixnames + CONTENT "pwd; for i in *.deb; do mv \"\$i\" \"\${i/.deb/-${OPENCL_VERSION_GITHASH}-amd64.deb}\" ; done + for i in *.rpm ; do mv \"\$i\" \"\${i/.rpm/-${OPENCL_VERSION_GITHASH}.x86_64.rpm}\" ; done +") +add_custom_target(package + COMMAND bash ${PROJECT_BINARY_DIR}/fixnames + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + DEPENDS pkg_rocm_opencl pkg_rocm_opencl_dev) +if(POLICY CMP0037) + cmake_policy(POP) +endif() -set(CPACK_DEBIAN_MAIN_FILE_NAME "rocm-opencl-1.2.0.deb") -set(CPACK_DEBIAN_MAIN_PACKAGE_NAME "rocm-opencl") -set(CPACK_DEBIAN_MAIN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/DEB/postinst;${CMAKE_CURRENT_SOURCE_DIR}/DEB/prerm") -set(CPACK_DEBIAN_DEV_FILE_NAME "rocm-opencl-dev-1.2.0.deb") -set(CPACK_DEBIAN_DEV_PACKAGE_NAME "rocm-opencl-dev") -set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "rocm-opencl") - -# RPM CPACK variables -set(CPACK_RPM_COMPONENT_INSTALL ON) - -set(CPACK_RPM_MAIN_FILE_NAME "rocm-opencl-1.2.0.rpm") -set(CPACK_RPM_MAIN_PACKAGE_NAME "rocm-opencl") -set(CPACK_RPM_MAIN_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/RPM/rpm_post") -set(CPACK_RPM_MAIN_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/RPM/rpm_postun") - -set(CPACK_RPM_DEV_FILE_NAME "rocm-opencl-devel-1.2.0.rpm") -set(CPACK_RPM_DEV_PACKAGE_NAME "rocm-opencl-devel") -set(CPACK_RPM_DEV_PACKAGE_DEPENDS "rocm-opencl") - -set(CPACK_COMPONENTS_ALL MAIN DEV) -include(CPack) diff --git a/opencl/packaging/rocm-opencl-dev.txt b/opencl/packaging/rocm-opencl-dev.txt new file mode 100644 index 0000000000..a2f5a127ea --- /dev/null +++ b/opencl/packaging/rocm-opencl-dev.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.5.1) +project(rocm-opencl-dev) + +install(DIRECTORY @opencl_SOURCE_DIR@/khronos/headers/opencl2.2/CL + DESTINATION include + USE_SOURCE_PERMISSIONS + PATTERN cl_d3d10.h EXCLUDE + PATTERN cl_d3d11.h EXCLUDE + PATTERN cl_dx9_media_sharing.h EXCLUDE + PATTERN cl_egl.h EXCLUDE) +install(FILES @PROJECT_BINARY_DIR@/khronos/icd/libOpenCL.so DESTINATION lib) + +############################# +# Packaging steps +############################# +# Generic CPACK variables +set(CPACK_GENERATOR "DEB;RPM") +set(CPACK_PACKAGE_NAME "rocm-opencl-dev") +set(CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc.") +set(CPACK_PACKAGE_VENDOR "AMD") +set(CPACK_PACKAGING_INSTALL_PREFIX @CPACK_PACKAGING_INSTALL_PREFIX@) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenCL: Open Computing Language on ROCclr") +set(CPACK_PACKAGE_VERSION_MAJOR @OPENCL_VERSION_MAJOR@) +set(CPACK_PACKAGE_VERSION_MINOR @OPENCL_VERSION_MINOR@) +set(CPACK_PACKAGE_VERSION_PATCH @OPENCL_VERSION_PATCH@) +set(CPACK_PACKAGE_VERSION @OPENCL_VERSION_MAJOR@.@OPENCL_VERSION_MINOR@.@OPENCL_VERSION_PATCH@) +set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}) + +# Debian CPACK variables +set(CPACK_BINARY_DEB "ON") +set(CPACK_DEBIAN_PACKAGE_DEPENDS "mesa-common-dev, rocm-opencl") + +# RPM CPACK variables +set(CPACK_BINARY_RPM "ON") +set(CPACK_RPM_PACKAGE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") +set(CPACK_RPM_PACKAGE_AUTOREQPROV " no") +set(CPACK_RPM_PACKAGE_REQUIRES "rocm-opencl") + +include(CPack) diff --git a/opencl/DEB/postinst b/opencl/packaging/rocm-opencl.postinst similarity index 74% rename from opencl/DEB/postinst rename to opencl/packaging/rocm-opencl.postinst index db4fbb36b6..241dcd8403 100644 --- a/opencl/DEB/postinst +++ b/opencl/packaging/rocm-opencl.postinst @@ -3,7 +3,7 @@ set -e do_ldconfig() { - echo /opt/rocm/opencl/lib/x86_64 > /etc/ld.so.conf.d/x86_64-rocm-opencl.conf && ldconfig + echo /opt/rocm/opencl/lib > /etc/ld.so.conf.d/x86_64-rocm-opencl.conf && ldconfig mkdir -p /etc/OpenCL/vendors && (echo libamdocl64.so > /etc/OpenCL/vendors/amdocl64.icd) } diff --git a/opencl/DEB/prerm b/opencl/packaging/rocm-opencl.prerm similarity index 100% rename from opencl/DEB/prerm rename to opencl/packaging/rocm-opencl.prerm diff --git a/opencl/RPM/rpm_post b/opencl/packaging/rocm-opencl.rpm_post similarity index 50% rename from opencl/RPM/rpm_post rename to opencl/packaging/rocm-opencl.rpm_post index 438a21c87f..a1b3ae955d 100644 --- a/opencl/RPM/rpm_post +++ b/opencl/packaging/rocm-opencl.rpm_post @@ -1,2 +1,2 @@ -echo /opt/rocm/opencl/lib/x86_64 > /etc/ld.so.conf.d/x86_64-rocm-opencl.conf && ldconfig +echo /opt/rocm/opencl/lib > /etc/ld.so.conf.d/x86_64-rocm-opencl.conf && ldconfig mkdir -p /etc/OpenCL/vendors && (echo libamdocl64.so > /etc/OpenCL/vendors/amdocl64.icd) diff --git a/opencl/RPM/rpm_postun b/opencl/packaging/rocm-opencl.rpm_postun similarity index 100% rename from opencl/RPM/rpm_postun rename to opencl/packaging/rocm-opencl.rpm_postun diff --git a/opencl/packaging/rocm-opencl.txt b/opencl/packaging/rocm-opencl.txt new file mode 100644 index 0000000000..5eb96d78b7 --- /dev/null +++ b/opencl/packaging/rocm-opencl.txt @@ -0,0 +1,38 @@ +cmake_minimum_required(VERSION 3.5.1) +project(rocm-opencl) + +install(FILES @PROJECT_BINARY_DIR@/bin/clinfo DESTINATION bin) +install(FILES @PROJECT_BINARY_DIR@/lib/libamdocl64.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) + +############################# +# Packaging steps +############################# +# Generic CPACK variables +set(CPACK_GENERATOR "DEB;RPM") +set(CPACK_PACKAGE_NAME "rocm-opencl") +set(CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc.") +set(CPACK_PACKAGE_VENDOR "AMD") +set(CPACK_PACKAGING_INSTALL_PREFIX @CPACK_PACKAGING_INSTALL_PREFIX@) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenCL: Open Computing Language on ROCclr") +set(CPACK_PACKAGE_VERSION_MAJOR @OPENCL_VERSION_MAJOR@) +set(CPACK_PACKAGE_VERSION_MINOR @OPENCL_VERSION_MINOR@) +set(CPACK_PACKAGE_VERSION_PATCH @OPENCL_VERSION_PATCH@) +set(CPACK_PACKAGE_VERSION @OPENCL_VERSION_MAJOR@.@OPENCL_VERSION_MINOR@.@OPENCL_VERSION_PATCH@) +set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}) + +# Debian CPACK variables +set(CPACK_BINARY_DEB "ON") +set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_BINARY_DIR}/postinst;${PROJECT_BINARY_DIR}/prerm") +set(CPACK_DEBIAN_PACKAGE_DEPENDS "libelf-dev, comgr") + +# RPM CPACK variables +set(CPACK_BINARY_RPM "ON") +set(CPACK_RPM_PACKAGE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") +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") + +include(CPack)