diff --git a/hipamd/CMakeLists.txt b/hipamd/CMakeLists.txt index 6b411d1a91..92ca86b225 100755 --- a/hipamd/CMakeLists.txt +++ b/hipamd/CMakeLists.txt @@ -447,8 +447,42 @@ install( DESTINATION ${CONFIG_PACKAGE_INSTALL_DIR} ) -# Packaging invokes UNIX commands, which are not available on Windows. +configure_package_config_file( + ${HIP_COMMON_DIR}/hip-lang-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config.cmake + INSTALL_DESTINATION ${CONFIG_LANG_PACKAGE_INSTALL_DIR} + NO_CHECK_REQUIRED_COMPONENTS_MACRO + PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR BIN_INSTALL_DIR) + +configure_package_config_file( + hip-lang-config-amd.cmake + ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config-amd.cmake + INSTALL_DESTINATION ${CONFIG_LANG_PACKAGE_INSTALL_DIR} + PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR BIN_INSTALL_DIR) + +configure_package_config_file( + hip-lang-config-nvidia.cmake + ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config-nvidia.cmake + INSTALL_DESTINATION ${CONFIG_LANG_PACKAGE_INSTALL_DIR} + PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR BIN_INSTALL_DIR) + +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config-version.cmake + VERSION "${HIP_VERSION_MAJOR}.${HIP_VERSION_MINOR}.${HIP_VERSION_GITDATE}" + COMPATIBILITY SameMajorVersion) + +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config-amd.cmake + ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config-nvidia.cmake + ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config-version.cmake + DESTINATION + ${CONFIG_LANG_PACKAGE_INSTALL_DIR}/ + ) + +# Packaging invokes UNIX commands, which are not available on Windows. if(NOT WIN32) add_subdirectory(packaging) endif() diff --git a/hipamd/hip-backward-compat.cmake b/hipamd/hip-backward-compat.cmake index a625b63217..9a2b6f7e72 100644 --- a/hipamd/hip-backward-compat.cmake +++ b/hipamd/hip-backward-compat.cmake @@ -165,7 +165,7 @@ function(create_cmake_symlink) #create symlink to hip-lang file(MAKE_DIRECTORY ${HIP_WRAPPER_CMAKE_DIR}/hip-lang) - file(GLOB config_files ${HIP_BUILD_DIR}/src/hip-lang-config*) + file(GLOB config_files ${HIP_BUILD_DIR}/hip-lang-config*) foreach(config_name ${config_files}) get_filename_component(file_name ${config_name} NAME) add_custom_target(link_${file_name} ALL @@ -250,7 +250,7 @@ endif()#End HIP_PLATFORM AMD install(FILES ${HIP_WRAPPER_LIB_DIR}/${HIP_INFO_FILE} DESTINATION hip/lib COMPONENT binary) #create symlink to cmake files create_cmake_symlink() -install(DIRECTORY ${HIP_WRAPPER_CMAKE_DIR}/hip-lang DESTINATION hip/lib/cmake COMPONENT binary) +install(DIRECTORY ${HIP_WRAPPER_CMAKE_DIR}/hip-lang DESTINATION hip/lib/cmake COMPONENT dev) install(DIRECTORY ${HIP_WRAPPER_CMAKE_DIR}/hiprtc DESTINATION hip/lib/cmake COMPONENT binary) install(DIRECTORY ${HIP_WRAPPER_CMAKE_DIR}/hip DESTINATION hip/lib/cmake COMPONENT dev) install(DIRECTORY ${HIP_WRAPPER_FINDHIP_DIR}/ DESTINATION hip/cmake COMPONENT dev) diff --git a/hipamd/hip-lang-config-amd.cmake b/hipamd/hip-lang-config-amd.cmake new file mode 100644 index 0000000000..9a3aec3266 --- /dev/null +++ b/hipamd/hip-lang-config-amd.cmake @@ -0,0 +1,83 @@ +# Copyright (c) 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. + +include( "${CMAKE_CURRENT_LIST_DIR}/hip-lang-targets.cmake" ) + +# Find the hip-lang config file path with symlinks resolved +# RealPath: /opt/rocm-ver/lib/cmake/hip-lang/hip-lang-config.cmake +# Go 4 level up to get IMPORT PREFIX +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" REALPATH) +get_filename_component(_IMPORT_PREFIX "${_DIR}/../../../../" ABSOLUTE) + + +set_target_properties(hip-lang::device PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include>" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include>" +) + +set_target_properties(hip-lang::amdhip64 PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "$<$:__HIP_ROCclr__=1>" + INTERFACE_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include>" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include>" +) +set_target_properties(hip-lang::device PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "$<$:__HIP_ROCclr__=1>" +) + +set_property(TARGET hip-lang::device APPEND PROPERTY + INTERFACE_COMPILE_OPTIONS "$<$:SHELL:-mllvm;-amdgpu-early-inline-all=true;-mllvm;-amdgpu-function-calls=false>" +) + +set_property(TARGET hip-lang::device APPEND PROPERTY + INTERFACE_LINK_OPTIONS "$<$:--hip-link>" +) + +# Approach: Check CLANGRT LIB support for CMAKE_HIP_COMPILER +# Use CMAKE_HIP_COMPILER option -print-libgcc-file-name --rtlib=compiler-rt +# Note: For Linux add additional option -unwindlib=libgcc also +# To fetch the compiler rt library file name and confirm. +# If unsuccessful in getting clangrt using this option then +# FATAL_ERROR message send since compiler-rt linkage dependency is mandatory. +# If successful then --rtlib=compiler-rt (and -unwindlib=libgcc for non windows) +# added to Target's INTERFACE_LINK_LIBRARIES property +if (NOT WIN32) + set(CLANGRT_LINUX_OPTION "-unwindlib=libgcc") +endif() + +execute_process( + COMMAND ${CMAKE_HIP_COMPILER} -print-libgcc-file-name --rtlib=compiler-rt ${CLANGRT_LINUX_OPTION} + OUTPUT_VARIABLE CLANGRT_BUILTINS + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE CLANGRT_BUILTINS_FETCH_EXIT_CODE) + +# Add support for __fp16 and _Float16, explicitly link with compiler-rt +if( "${CLANGRT_BUILTINS_FETCH_EXIT_CODE}" STREQUAL "0" ) + set_property(TARGET hip-lang::device APPEND PROPERTY + INTERFACE_LINK_OPTIONS $<$:--rtlib=compiler-rt ${CLANGRT_LINUX_OPTION}> + ) +else() + # FATAL_ERROR send if not successfull on compiler-rt linkage dependency + message(FATAL_ERROR + "${CMAKE_FIND_PACKAGE_NAME} Error:${CLANGRT_BUILTINS_FETCH_EXIT_CODE} - clangrt builtins lib could not be found.") +endif() + +# Approved by CMake to use this name. This is used so that HIP can +# change the name of the target and not require any modifications in CMake +set(_CMAKE_HIP_DEVICE_RUNTIME_TARGET "hip-lang::device") diff --git a/hipamd/hip-lang-config-nvidia.cmake b/hipamd/hip-lang-config-nvidia.cmake new file mode 100644 index 0000000000..a110e0c8c3 --- /dev/null +++ b/hipamd/hip-lang-config-nvidia.cmake @@ -0,0 +1,42 @@ +# Copyright (c) 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. + +add_library(hip-lang::device INTERFACE IMPORTED) +add_library(hip-lang::host INTERFACE IMPORTED) +add_library(hip-lang::amdhip64 INTERFACE IMPORTED) + +# Find the hip-lang config file path with symlinks resolved +# RealPath: /opt/rocm-ver/lib/cmake/hip-lang/hip-lang-config.cmake +# Go 4 level up to get IMPORT PREFIX +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" REALPATH) +get_filename_component(_IMPORT_PREFIX "${_DIR}/../../../../" ABSOLUTE) + + +set_target_properties(hip-lang::device PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include>" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include>" +) + +set_target_properties(hip-lang::amdhip64 PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include>" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include>" +) + +set(_CMAKE_HIP_DEVICE_RUNTIME_TARGET "hip-lang::device") diff --git a/hipamd/packaging/CMakeLists.txt b/hipamd/packaging/CMakeLists.txt index 59551649fe..711e8e2d1c 100644 --- a/hipamd/packaging/CMakeLists.txt +++ b/hipamd/packaging/CMakeLists.txt @@ -63,8 +63,6 @@ if(HIP_PLATFORM STREQUAL "amd" ) install(FILES ${CMAKE_BINARY_DIR}/hipamd/.hipInfo DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT binary) install ( EXPORT hip-targets FILE hip-targets.cmake NAMESPACE hip:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hip COMPONENT binary) - -install(FILES ${CMAKE_BINARY_DIR}/hipamd/src/hip-lang-config.cmake ${CMAKE_BINARY_DIR}/hipamd/src/hip-lang-config-version.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hip-lang COMPONENT binary) install ( EXPORT hip-lang-targets FILE hip-lang-targets.cmake NAMESPACE hip-lang:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hip-lang COMPONENT binary) install(FILES ${CMAKE_BINARY_DIR}/hipamd/hiprtc-config.cmake ${CMAKE_BINARY_DIR}/hipamd/hiprtc-config-version.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hiprtc COMPONENT binary) @@ -106,6 +104,9 @@ install(DIRECTORY ${HIP_COMMON_DIR}/cmake/ DESTINATION ${CMAKE_INSTALL_LIBDIR}/c install(FILES ${CMAKE_BINARY_DIR}/hipamd/hip-config.cmake ${CMAKE_BINARY_DIR}/hipamd/hip-config-version.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hip COMPONENT dev) install(FILES ${CMAKE_BINARY_DIR}/hipamd/hip-config-amd.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hip COMPONENT dev) install(FILES ${CMAKE_BINARY_DIR}/hipamd/hip-config-nvidia.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hip COMPONENT dev) +install(FILES ${CMAKE_BINARY_DIR}/hipamd/hip-lang-config.cmake ${CMAKE_BINARY_DIR}/hipamd/hip-lang-config-version.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hip-lang COMPONENT dev) +install(FILES ${CMAKE_BINARY_DIR}/hipamd/hip-lang-config-amd.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hip-lang COMPONENT dev) +install(FILES ${CMAKE_BINARY_DIR}/hipamd/hip-lang-config-nvidia.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/hip-lang COMPONENT dev) #End dev files install #Begin doc files install diff --git a/hipamd/src/CMakeLists.txt b/hipamd/src/CMakeLists.txt index f5eb3e569a..8fe1c4523f 100644 --- a/hipamd/src/CMakeLists.txt +++ b/hipamd/src/CMakeLists.txt @@ -291,26 +291,3 @@ INSTALL(TARGETS amdhip64 host device ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) INSTALL(EXPORT hip-lang-targets DESTINATION ${CONFIG_LANG_PACKAGE_INSTALL_DIR} NAMESPACE hip-lang::) - -include(CMakePackageConfigHelpers) - -configure_package_config_file( - ${HIP_COMMON_DIR}/hip-lang-config.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config.cmake - INSTALL_DESTINATION ${CONFIG_LANG_PACKAGE_INSTALL_DIR} - NO_SET_AND_CHECK_MACRO - NO_CHECK_REQUIRED_COMPONENTS_MACRO - PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR BIN_INSTALL_DIR) - -write_basic_package_version_file( - ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config-version.cmake - VERSION "${HIP_VERSION_MAJOR}.${HIP_VERSION_MINOR}.${HIP_VERSION_GITDATE}" - COMPATIBILITY SameMajorVersion) -install( - FILES - ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config.cmake - ${CMAKE_CURRENT_BINARY_DIR}/hip-lang-config-version.cmake - DESTINATION - ${CONFIG_LANG_PACKAGE_INSTALL_DIR}/ - ) -