diff --git a/projects/hip-tests/samples/CMakeLists.txt b/projects/hip-tests/samples/CMakeLists.txt new file mode 100644 index 0000000000..e20a167b7f --- /dev/null +++ b/projects/hip-tests/samples/CMakeLists.txt @@ -0,0 +1,90 @@ + +# Copyright (c) 2016 - 2023 Advanced Micro Devices, Inc. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +cmake_minimum_required(VERSION 3.16.8) +project(hip-samples) + + +if (WIN32) + set(EXT ".bat") +endif() + +# Read -DROCM_Path and env{ROCM_PATH} +if(NOT DEFINED ROCM_PATH) + if(DEFINED ENV{ROCM_PATH}) + set(ROCM_PATH $ENV{ROCM_PATH} CACHE STRING "ROCM Path") + endif() +endif() + +# Read -DHIP_Path and env{HIP_PATH} +if(NOT DEFINED HIP_PATH) + if(DEFINED ENV{HIP_PATH}) + set(HIP_PATH $ENV{HIP_PATH} CACHE STRING "HIP Path") + endif() +endif() + +# both are not set +if(NOT DEFINED HIP_PATH AND NOT DEFINED ROCM_PATH) + set(HIP_PATH "/opt/rocm") + set(ROCM_PATH "/opt/rocm") +elseif(DEFINED HIP_PATH AND NOT DEFINED ROCM_PATH) + execute_process(COMMAND ${HIP_PATH}/bin/hipconfig${EXT} --rocmpath + OUTPUT_VARIABLE ROCM_PATH + OUTPUT_STRIP_TRAILING_WHITESPACE) +elseif(DEFINED ROCM_PATH AND NOT DEFINED HIP_PATH) + set(HIP_PATH ${ROCM_PATH}) +endif() +message(STATUS "HIP_PATH: ${HIP_PATH}") +message(STATUS "ROCM_PATH: ${ROCM_PATH}") + +set(HIPCONFIG_EXECUTABLE "${HIP_PATH}/bin/hipconfig${EXT}") +execute_process(COMMAND ${HIPCONFIG_EXECUTABLE} --version + OUTPUT_VARIABLE HIP_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) + +string(REPLACE "." ";" VERSION_LIST ${HIP_VERSION}) +list(GET VERSION_LIST 0 HIP_VERSION_MAJOR) +list(GET VERSION_LIST 1 HIP_VERSION_MINOR) +list(GET VERSION_LIST 2 HIP_VERSION_PATCH_GITHASH) +string(REPLACE "-" ";" VERSION_LIST ${HIP_VERSION_PATCH_GITHASH}) +list(GET VERSION_LIST 0 HIP_VERSION_PATCH) + + +if(DEFINED ENV{ROCM_LIBPATCH_VERSION}) + set(HIP_PACKAGING_VERSION_PATCH ${HIP_VERSION_PATCH}.$ENV{ROCM_LIBPATCH_VERSION}) +else() + set(HIP_PACKAGING_VERSION_PATCH ${HIP_VERSION_PATCH}-${HIP_VERSION_GITHASH}) +endif() + +#TODO add instructions to build samples at once + +# make package_samples to generate packages for samples +set(SAMPLES_SRC ${CMAKE_CURRENT_SOURCE_DIR}) +add_subdirectory(packaging) +if(UNIX) +add_custom_target(package_samples COMMAND ${CMAKE_COMMAND} . + COMMAND rm -rf *.deb *.rpm *.tar.gz + COMMAND make package + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +else() +add_custom_target(package_samples COMMAND ${CMAKE_COMMAND} . + COMMAND cpack + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +endif() diff --git a/projects/hip-tests/samples/README.md b/projects/hip-tests/samples/README.md index ac4bd1ca94..8f0551bf91 100644 --- a/projects/hip-tests/samples/README.md +++ b/projects/hip-tests/samples/README.md @@ -1,5 +1,6 @@ Build procedure +The CMakeLists.txt at hip-tests/samples folder is currently used for packaging purpose. We provide Makefile and CMakeLists.txt to build the samples seperately. 1.Makefile supports shared lib of hip-rocclr runtime and nvcc. @@ -22,6 +23,8 @@ a. to build with shared libs, run cmake .. +make + b. to build with static libs, run cmake -DCMAKE_PREFIX_PATH="/llvm/lib/cmake" .. @@ -30,4 +33,12 @@ Then run, make -Note that if you want debug version, add "-DCMAKE_BUILD_TYPE=Debug" in cmake cmd. \ No newline at end of file +Note that if you want debug version, add "-DCMAKE_BUILD_TYPE=Debug" in cmake cmd. + + +3.To package samples and generate packages. From hip-tests/build + +cmake ../samples + +make package_samples + diff --git a/projects/hip-tests/samples/packaging/CMakeLists.txt b/projects/hip-tests/samples/packaging/CMakeLists.txt new file mode 100644 index 0000000000..51638b1362 --- /dev/null +++ b/projects/hip-tests/samples/packaging/CMakeLists.txt @@ -0,0 +1,115 @@ + +# Copyright (c) 2016 - 2023 Advanced Micro Devices, Inc. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +cmake_minimum_required(VERSION 3.16.8) +# vc 19.31.31107.0 gives issue while packaging using makefile +# To avoid error NMAKE : fatal error U1065: invalid option 'w' +# Windows to use Ninja generator like other projects +# to skip the simple compiler test +set(CMAKE_C_COMPILER_WORKS 1) +set(CMAKE_CXX_COMPILER_WORKS 1) + +project(samples) +include(GNUInstallDirs) + +############################# +# Packaging steps +############################# +set(CPACK_SET_DESTDIR TRUE) +if(NOT DEFINED CPACK_INSTALL_PREFIX) + set(CPACK_INSTALL_PREFIX "/opt/rocm/") +endif() + +set(PKG_NAME hip-samples) +set(CPACK_PACKAGE_NAME ${PKG_NAME}) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "HIP: Heterogenous-computing Interface for Portability [HIP SAMPLES]") +set(CPACK_PACKAGE_DESCRIPTION "HIP: + Heterogenous-computing Interface for Portability [HIP SAMPLES]") +set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.") +set(CPACK_PACKAGE_CONTACT "HIP Support ") +set(CPACK_PACKAGE_VERSION "${HIP_VERSION_MAJOR}.${HIP_VERSION_MINOR}.${HIP_PACKAGING_VERSION_PATCH}") + +# by default rpm tries to reduce the file size by stripping the executable +# To avoid build/packaging failures SWDEV-375603 and skip stripping +set(CPACK_RPM_SPEC_MORE_DEFINE "%global __os_install_post %{nil}") + +set (CPACK_RPM_PACKAGE_AUTOREQ 0) +# to remove hip-samples-* package during uninstallation of rocm +set (CPACK_DEBIAN_PACKAGE_DEPENDS "rocm-core, hip-runtime-amd") +set (CPACK_RPM_PACKAGE_REQUIRES "rocm-core, hip-runtime-amd") + +if(NOT WIN32) +install(DIRECTORY ${SAMPLES_SRC} + DESTINATION ${CMAKE_INSTALL_DATADIR}/hip + USE_SOURCE_PERMISSIONS) + +set(CPACK_GENERATOR "TGZ;DEB;RPM" CACHE STRING "Linux package types for hip samples") +set(CPACK_BINARY_DEB "ON") +set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") +set(CPACK_DEBIAN_PACKAGE_PROVIDES "hip-samples") +set(CPACK_BINARY_RPM "ON") +set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") +set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/opt") +if (CPACK_PACKAGE_VERSION MATCHES "local" ) + #If building locally default value will cause build failure + #DEBUG SYMBOL pacaking require SOURCE_DIR to be small + set(CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX ${CPACK_INSTALL_PREFIX}) +endif() + + +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() + +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() + +execute_process( COMMAND rpm --eval %{?dist} + RESULT_VARIABLE PROC_RESULT + OUTPUT_VARIABLE EVAL_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE ) +# Add os distribution tag to rpm package name . For deb package its set from build env +if ( PROC_RESULT EQUAL "0" AND NOT EVAL_RESULT STREQUAL "" ) + string(APPEND CPACK_RPM_PACKAGE_RELEASE "%{?dist}") +endif() + +set(CPACK_SOURCE_GENERATOR "TGZ") +# Install license file +set(CPACK_RPM_PACKAGE_LICENSE "MIT") + +else() +# windows packaging +install(DIRECTORY ${SAMPLES_SRC} + DESTINATION . + USE_SOURCE_PERMISSIONS) + +set(CPACK_SYSTEM_NAME "") +set(CPACK_INSTALL_PREFIX "") +set(CPACK_GENERATOR "ZIP" CACHE STRING "Windows package types for hip samples") +set(CPACK_TEST_ZIP "ON") +set(CPACK_ZIP_TEST_PACKAGE_NAME "hip-samples") +endif() + +include(CPack)