2021-07-02 16:46:49 -07:00
# Copyright (c) 2016 - 2021 Advanced Micro Devices, Inc. All Rights Reserved.
2021-03-01 17:54:33 -05:00
# 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.
2021-08-02 08:30:22 -07:00
cmake_minimum_required ( VERSION 3.16.8 )
2021-06-11 00:30:12 -07:00
project ( hip )
2022-05-09 13:41:00 -04:00
include ( GNUInstallDirs )
2021-06-11 00:30:12 -07:00
# sample command for hip-rocclr runtime, you'll need to have rocclr built
2021-10-04 04:01:28 -07:00
# ROCM_PATH is the path where ROCM is installed
2021-06-11 00:30:12 -07:00
# For shared lib of hip-rocclr runtime
# For release version
2023-04-19 18:20:31 +00:00
# cmake -DHIP_COMMON_DIR="$HIP_DIR" -DHIPCC_BIN_DIR="$HIPCC_DIR/bin" -DAMD_OPENCL_PATH=$OPENCL_DIR -DROCCLR_PATH=$ROCCLR_DIR -DCMAKE_PREFIX_PATH="<ROCM_PATH>/" -DCMAKE_INSTALL_PREFIX=</where/to/install/hip> ..
2021-06-11 00:30:12 -07:00
# For debug version
2023-04-19 18:20:31 +00:00
# cmake -DHIP_COMMON_DIR="$HIP_DIR" -DHIPCC_BIN_DIR="$HIPCC_DIR/bin" -DAMD_OPENCL_PATH=$OPENCL_DIR -DROCCLR_PATH=$ROCCLR_DIR -DCMAKE_PREFIX_PATH="<ROCM_PATH>/" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=</where/to/install/hip> ..
2021-06-11 00:30:12 -07:00
# For static lib of hip-rocclr runtime
# For release version
2023-04-19 18:20:31 +00:00
# cmake -DHIP_COMMON_DIR="$HIP_DIR" -DHIPCC_BIN_DIR="$HIPCC_DIR/bin" -DAMD_OPENCL_PATH=$OPENCL_DIR -DROCCLR_PATH=$ROCCLR_DIR -DBUILD_SHARED_LIBS=OFF -DCMAKE_PREFIX_PATH="<ROCM_PATH>/" -DCMAKE_INSTALL_PREFIX=</where/to/install/hip> ..
2021-06-11 00:30:12 -07:00
# For debug version
2023-04-19 18:20:31 +00:00
# cmake -DHIP_COMMON_DIR="$HIP_DIR" -DHIPCC_BIN_DIR="$HIPCC_DIR/bin" -DAMD_OPENCL_PATH=$OPENCL_DIR -DROCCLR_PATH=$ROCCLR_DIR -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH="<ROCM_PATH>/" -DCMAKE_INSTALL_PREFIX=</where/to/install/hip> ..
2021-10-04 04:01:28 -07:00
# If you don't specify CMAKE_INSTALL_PREFIX, hip-rocclr runtime will be installed to "<ROCM_PATH>/hip".
2021-06-11 00:30:12 -07:00
# By default, CMake will search for a folder named vdi or ROCclr relative to the current path. Specify -DROCCLR_PATH=$ROCCLR_DIR if rocclr source is in obscure location.
# By default, CMake will search for a folder named opencl or ROCm-OpenCL-Runtime relative to the current path. Specify -DAMD_OPENCL_PATH=$OPENCL_DIR if opencl source is in obscure location.
2021-07-06 04:47:20 -04:00
list ( APPEND CMAKE_MODULE_PATH ${ HIP_COMMON_DIR } /cmake )
2022-01-26 23:08:28 +00:00
2021-06-11 00:30:12 -07:00
#############################
# Options
#############################
option ( __HIP_ENABLE_PCH "Enable/Disable pre-compiled hip headers" ON )
2021-07-28 08:05:38 -07:00
option ( HIP_OFFICIAL_BUILD "Enable/Disable for mainline/staging builds" OFF )
2023-08-04 11:17:01 -07:00
option ( FILE_REORG_BACKWARD_COMPATIBILITY "Enable File Reorg with backward compatibility" OFF )
2023-06-21 15:51:59 -04:00
if ( MSVC )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi" )
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG:FULL" )
endif ()
2022-01-18 09:34:50 -05:00
set ( HIPCC_BIN_DIR "" CACHE STRING "HIPCC and HIPCONFIG binary directories" )
2020-01-29 16:03:14 -08:00
2021-06-11 00:30:12 -07:00
if ( __HIP_ENABLE_PCH )
set ( _pchStatus 1 )
else ()
set ( _pchStatus 0 )
endif ()
2016-03-23 07:54:01 -05:00
2022-01-18 09:34:50 -05:00
message ( STATUS "HIPCC_BIN_DIR found at ${HIPCC_BIN_DIR}" )
message ( STATUS "HIP_COMMON_DIR found at ${HIP_COMMON_DIR}" )
2023-10-07 10:43:03 +00:00
message ( STATUS "HIPNV_DIR found at ${HIPNV_DIR}" )
2021-06-11 00:30:12 -07:00
set ( HIP_COMMON_INCLUDE_DIR ${ HIP_COMMON_DIR } /include )
set ( HIP_COMMON_BIN_DIR ${ HIP_COMMON_DIR } /bin )
2021-06-30 02:36:12 -07:00
set ( __HIPCONFIG_EXECUTABLE__ ${ HIP_COMMON_DIR } /bin/hipconfig )
2016-08-12 23:21:37 +05:30
2021-06-11 00:30:12 -07:00
#############################
# Setup config generation
#############################
string ( TIMESTAMP _timestamp UTC )
set ( _versionInfo "# Auto-generated by cmake\n" )
set ( _buildInfo "# Auto-generated by cmake on ${_timestamp} UTC\n" )
macro ( add_to_config _configfile _variable )
set ( ${ _configfile } "${${_configfile}}${_variable}=${${_variable}}\n" )
endmacro ()
2016-06-14 14:57:56 +05:30
2021-06-11 00:30:12 -07:00
#############################
# Setup version information
#############################
2021-07-06 04:47:20 -04:00
find_package ( Perl REQUIRED )
2021-06-11 00:30:12 -07:00
# Determine HIP_BASE_VERSION
set ( ENV{HIP_PATH} "" )
2023-01-17 04:56:47 +00:00
file ( STRINGS ${ HIP_COMMON_DIR } /VERSION VERSION_LIST REGEX "^[0-9]+" )
2021-11-23 12:24:30 -05:00
list ( GET VERSION_LIST 0 HIP_VERSION_MAJOR )
list ( GET VERSION_LIST 1 HIP_VERSION_MINOR )
2023-01-17 04:56:47 +00:00
list ( GET VERSION_LIST 2 HIP_VERSION_PATCH )
2021-06-11 00:30:12 -07:00
set ( HIP_VERSION_GITDATE 0 )
2019-08-09 12:13:29 +00:00
2021-06-11 00:30:12 -07:00
find_package ( Git )
# FIXME: Two different version strings used.
# Below we use UNIX commands, not compatible with Windows.
2021-07-06 04:47:20 -04:00
if ( GIT_FOUND )
# use the commit date, instead of build date
execute_process ( COMMAND ${ GIT_EXECUTABLE } show -s --format=%ct
RESULT_VARIABLE git_result
OUTPUT_VARIABLE git_output
WORKING_DIRECTORY ${ PROJECT_SOURCE_DIR }
OUTPUT_STRIP_TRAILING_WHITESPACE )
if ( git_result EQUAL 0 )
set ( HIP_VERSION_UNIXDATE ${ git_output } )
endif ()
2021-06-11 00:30:12 -07:00
# get date information based on UTC
# use the last two digits of year + week number + day in the week as HIP_VERSION_GITDATE
2021-07-06 04:47:20 -04:00
execute_process ( COMMAND ${ PERL_EXECUTABLE } "-MPOSIX=strftime" "-le" "print strftime \'%y%W%w\',gmtime(${HIP_VERSION_UNIXDATE})"
2021-06-11 00:30:12 -07:00
RESULT_VARIABLE git_result
OUTPUT_VARIABLE git_output
WORKING_DIRECTORY ${ PROJECT_SOURCE_DIR }
OUTPUT_STRIP_TRAILING_WHITESPACE )
if ( git_result EQUAL 0 )
set ( HIP_VERSION_GITDATE ${ git_output } )
endif ()
2020-04-30 17:11:08 -04:00
2021-06-11 00:30:12 -07:00
# get commit short hash
execute_process ( COMMAND ${ GIT_EXECUTABLE } rev-parse --short HEAD
WORKING_DIRECTORY ${ PROJECT_SOURCE_DIR }
RESULT_VARIABLE git_result
OUTPUT_VARIABLE git_output
OUTPUT_STRIP_TRAILING_WHITESPACE )
if ( git_result EQUAL 0 )
set ( HIP_VERSION_GITHASH ${ git_output } )
endif ()
2020-04-30 17:11:08 -04:00
2021-11-25 00:33:26 -08:00
set ( HIP_VERSION_BUILD_ID 0 )
set ( HIP_VERSION_BUILD_NAME "" )
2021-07-28 08:05:38 -07:00
if ( NOT DEFINED ENV{HIP_OFFICIAL_BUILD} AND NOT HIP_OFFICIAL_BUILD )
set ( HIP_VERSION_PATCH ${ HIP_VERSION_GITDATE } )
2021-06-11 00:30:12 -07:00
endif ()
if ( DEFINED ENV{ROCM_LIBPATCH_VERSION} )
2021-07-28 08:05:38 -07:00
set ( HIP_PACKAGING_VERSION_PATCH ${ HIP_VERSION_PATCH } . $ENV{ ROCM_LIBPATCH_VERSION } )
2021-06-11 00:30:12 -07:00
else ()
2021-07-28 08:05:38 -07:00
set ( HIP_PACKAGING_VERSION_PATCH ${ HIP_VERSION_PATCH } - ${ HIP_VERSION_GITHASH } )
2020-04-30 17:11:08 -04:00
endif ()
else ()
2022-05-06 14:19:47 -06:00
set ( HIP_VERSION_BUILD_ID 0 )
set ( HIP_VERSION_BUILD_NAME "" )
2021-06-11 00:30:12 -07:00
# FIXME: Some parts depend on this being set.
set ( HIP_PACKAGING_VERSION_PATCH "0" )
2020-04-30 17:11:08 -04:00
endif ()
2019-08-21 10:01:23 +00:00
2021-06-11 00:30:12 -07:00
## Debian package specific variables
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 ( STATUS "Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}" )
2020-10-05 13:20:58 -04:00
2021-06-11 00:30:12 -07:00
## RPM package specific variables
if ( DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE} )
set ( CPACK_RPM_PACKAGE_RELEASE $ENV{ CPACK_RPM_PACKAGE_RELEASE } )
2020-10-05 13:20:58 -04:00
else ()
2021-06-11 00:30:12 -07:00
set ( CPACK_RPM_PACKAGE_RELEASE "local" )
2020-10-05 13:20:58 -04:00
endif ()
2021-06-11 00:30:12 -07:00
## '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 )
if ( PROC_RESULT EQUAL "0" AND NOT EVAL_RESULT STREQUAL "" )
string ( APPEND CPACK_RPM_PACKAGE_RELEASE "%{?dist}" )
endif ()
message ( STATUS "CPACK_RPM_PACKAGE_RELEASE: ${CPACK_RPM_PACKAGE_RELEASE}" )
add_to_config ( _versionInfo HIP_PACKAGING_VERSION_PATCH )
add_to_config ( _versionInfo CPACK_DEBIAN_PACKAGE_RELEASE )
add_to_config ( _versionInfo CPACK_RPM_PACKAGE_RELEASE )
add_to_config ( _versionInfo HIP_VERSION_MAJOR )
add_to_config ( _versionInfo HIP_VERSION_MINOR )
add_to_config ( _versionInfo HIP_VERSION_PATCH )
2021-07-28 08:05:38 -07:00
add_to_config ( _versionInfo HIP_VERSION_GITHASH )
2021-06-11 00:30:12 -07:00
set ( HIP_LIB_VERSION_MAJOR ${ HIP_VERSION_MAJOR } )
set ( HIP_LIB_VERSION_MINOR ${ HIP_VERSION_MINOR } )
if ( ${ ROCM_PATCH_VERSION } )
set ( HIP_LIB_VERSION_PATCH ${ ROCM_PATCH_VERSION } )
2022-05-06 14:19:47 -06:00
elseif ( DEFINED HIP_VERSION_GITHASH )
2021-07-28 08:05:38 -07:00
set ( HIP_LIB_VERSION_PATCH ${ HIP_VERSION_PATCH } - ${ HIP_VERSION_GITHASH } )
2022-05-06 14:19:47 -06:00
else ()
set ( HIP_LIB_VERSION_PATCH ${ HIP_VERSION_PATCH } )
2021-06-11 00:30:12 -07:00
endif ()
set ( HIP_LIB_VERSION_STRING "${HIP_LIB_VERSION_MAJOR}.${HIP_LIB_VERSION_MINOR}.${HIP_LIB_VERSION_PATCH}" )
# overwrite HIP_VERSION_PATCH for packaging
set ( HIP_VERSION ${ HIP_VERSION_MAJOR } . ${ HIP_VERSION_MINOR } . ${ HIP_PACKAGING_VERSION_PATCH } )
2021-11-23 12:24:30 -05:00
# Remove when CI is updated
if ( HIP_PLATFORM STREQUAL "rocclr" )
set ( HIP_PLATFORM "amd" )
endif ()
2021-06-11 00:30:12 -07:00
#############################
# Configure variables
#############################
# Determine HIP_PLATFORM
if ( NOT DEFINED HIP_PLATFORM )
2021-11-23 12:24:30 -05:00
if ( NOT DEFINED ENV{HIP_PLATFORM} )
2021-06-30 02:36:12 -07:00
execute_process ( COMMAND ${ __HIPCONFIG_EXECUTABLE__ } --platform
2021-11-23 12:24:30 -05:00
OUTPUT_VARIABLE HIP_PLATFORM
OUTPUT_STRIP_TRAILING_WHITESPACE )
else ()
set ( HIP_PLATFORM $ENV{ HIP_PLATFORM } CACHE STRING "HIP Platform" )
2021-06-11 00:30:12 -07:00
endif ()
2021-11-23 12:24:30 -05:00
endif ()
2021-06-11 00:30:12 -07:00
message ( STATUS "HIP Platform: " ${ HIP_PLATFORM } )
if ( HIP_PLATFORM STREQUAL "nvidia" )
set ( HIP_RUNTIME "cuda" CACHE STRING "HIP Runtime" )
set ( HIP_COMPILER "nvcc" CACHE STRING "HIP Compiler" )
2023-10-16 10:45:56 -07:00
if ( NOT EXISTS ${ HIPNV_DIR } )
message ( FATAL_ERROR "Invalid path HIPNV_DIR=${HIPNV_DIR}, please pass valid path -DHIPNV_DIR=<path>" )
endif ()
2021-06-11 00:30:12 -07:00
elseif ( HIP_PLATFORM STREQUAL "amd" )
set ( HIP_RUNTIME "rocclr" CACHE STRING "HIP Runtime" )
set ( HIP_COMPILER "clang" CACHE STRING "HIP Compiler" )
else ()
message ( FATAL_ERROR "Unexpected HIP_PLATFORM: " ${ HIP_PLATFORM } )
2020-06-09 15:45:22 -04:00
endif ()
2021-06-11 00:30:12 -07:00
message ( STATUS "HIP Runtime: " ${ HIP_RUNTIME } )
message ( STATUS "HIP Compiler: " ${ HIP_COMPILER } )
2020-06-09 15:45:22 -04:00
2021-06-11 00:30:12 -07:00
add_to_config ( _buildInfo HIP_RUNTIME )
add_to_config ( _buildInfo HIP_COMPILER )
2021-10-04 04:01:28 -07:00
if ( NOT DEFINED ROCM_PATH )
set ( ROCM_PATH "/opt/rocm" CACHE STRING "Default ROCM installation directory." )
endif ()
message ( STATUS "ROCM Installation path(ROCM_PATH): ${ROCM_PATH}" )
2021-06-11 00:30:12 -07:00
# Determine HIP install path
if ( UNIX )
2022-03-08 16:17:31 -08:00
set ( HIP_DEFAULT_INSTALL_PREFIX "${ROCM_PATH}" )
2021-06-11 00:30:12 -07:00
endif ()
if ( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT )
set ( CMAKE_INSTALL_PREFIX ${ HIP_DEFAULT_INSTALL_PREFIX } CACHE PATH "Installation path for HIP" FORCE )
2016-03-30 13:58:38 +05:30
endif ()
2020-01-21 00:47:35 -08:00
2021-06-11 00:30:12 -07:00
if ( DEV_LOG_ENABLE MATCHES "yes" )
add_definitions ( -DDEV_LOG_ENABLE )
endif ()
2020-05-05 09:54:36 -04:00
2022-03-08 16:17:31 -08:00
# Set default install path as "${ROCM_PATH}", can override the path from cmake build.
2021-06-11 00:30:12 -07:00
set ( CPACK_INSTALL_PREFIX ${ HIP_DEFAULT_INSTALL_PREFIX } CACHE PATH "Package Installation path for HIP" )
2020-01-21 00:47:35 -08:00
2021-06-11 00:30:12 -07:00
if ( IS_ABSOLUTE ${ CMAKE_INSTALL_PREFIX } )
message ( STATUS "HIP will be installed in: " ${ CMAKE_INSTALL_PREFIX } )
else ()
message ( FATAL_ERROR "Don't know where to install HIP. Please specify absolute path using -DCMAKE_INSTALL_PREFIX" )
2016-03-30 13:58:38 +05:30
endif ()
2021-06-11 00:30:12 -07:00
# set the installation path for the installer package
set ( CPACK_SET_DESTDIR ON CACHE BOOL "Installer package will install hip to CMAKE_INSTALL_PREFIX instead of CPACK_PACKAGING_INSTALL_PREFIX" )
if ( NOT CPACK_SET_DESTDIR )
2022-03-08 16:17:31 -08:00
set ( CPACK_PACKAGING_INSTALL_PREFIX "${ROCM_PATH}" CACHE PATH "Default installation path of hcc installer package" )
2021-06-11 00:30:12 -07:00
endif ( NOT CPACK_SET_DESTDIR )
#############################
# Build steps
#############################
2022-05-09 13:41:00 -04:00
set ( BIN_INSTALL_DIR ${ CMAKE_INSTALL_PREFIX } / ${ CMAKE_INSTALL_BINDIR } )
set ( LIB_INSTALL_DIR ${ CMAKE_INSTALL_PREFIX } / ${ CMAKE_INSTALL_LIBDIR } )
set ( INCLUDE_INSTALL_DIR ${ CMAKE_INSTALL_PREFIX } / ${ CMAKE_INSTALL_INCLUDEDIR } )
2021-06-11 00:30:12 -07:00
set ( CONFIG_PACKAGE_INSTALL_DIR ${ LIB_INSTALL_DIR } /cmake/hip )
set ( CONFIG_LANG_PACKAGE_INSTALL_DIR ${ LIB_INSTALL_DIR } /cmake/hip-lang )
2022-08-18 14:13:17 +00:00
set ( CONFIG_RTC_PACKAGE_INSTALL_DIR ${ LIB_INSTALL_DIR } /cmake/hiprtc )
2021-06-11 00:30:12 -07:00
# Generate hip_version.h
set ( _versionInfoHeader
"// Auto-generated by cmake\n
#ifndef HIP_VERSION_H
#define HIP_VERSION_H\n
#define HIP_VERSION_MAJOR ${HIP_VERSION_MAJOR}
#define HIP_VERSION_MINOR ${HIP_VERSION_MINOR}
2021-07-28 08:05:38 -07:00
#define HIP_VERSION_PATCH ${HIP_VERSION_PATCH}
2021-11-25 00:33:26 -08:00
#define HIP_VERSION_GITHASH \" ${ HIP_VERSION_GITHASH } \"
#define HIP_VERSION_BUILD_ID ${HIP_VERSION_BUILD_ID}
#define HIP_VERSION_BUILD_NAME \"${HIP_VERSION_BUILD_NAME}\"
2021-08-31 05:25:43 +00:00
#define HIP_VERSION (HIP_VERSION_MAJOR * 10000000 + HIP_VERSION_MINOR * 100000 + HIP_VERSION_PATCH)\n
2021-06-11 00:30:12 -07:00
#define __HIP_HAS_GET_PCH ${_pchStatus}\n
#endif\n
")
file(WRITE " ${ PROJECT_BINARY_DIR } /include/hip/hip_version.h " ${_versionInfoHeader})
# Generate .hipInfo
2023-04-26 18:13:36 +00:00
file(WRITE " ${ PROJECT_BINARY_DIR } /share/hip/.hipInfo " ${_buildInfo})
2021-05-28 17:32:33 +00:00
2023-07-17 15:48:13 -07:00
# Generate version
2023-04-26 18:13:36 +00:00
file(WRITE " ${ PROJECT_BINARY_DIR } /share/hip/version " ${_versionInfo})
if(HIP_RUNTIME STREQUAL " rocclr ")
add_subdirectory(src)
endif()
2021-06-11 00:30:12 -07:00
# Build doxygen documentation
find_program(DOXYGEN_EXE doxygen)
if(DOXYGEN_EXE)
2023-04-27 08:24:32 +00:00
if(EXISTS " ${ HIP_COMMON_DIR } /docs/doxygen-input/doxy.cfg ")
add_custom_target(doc COMMAND HIP_PATH=${CMAKE_CURRENT_SOURCE_DIR} ${DOXYGEN_EXE} ${HIP_COMMON_DIR}/docs/doxygen-input/doxy.cfg
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/docs)
elseif(EXISTS " ${ HIP_COMMON_DIR } /docs/.doxygen/Doxyfile ")
add_custom_target(doc COMMAND HIP_PATH=${CMAKE_CURRENT_SOURCE_DIR} ${DOXYGEN_EXE} ${HIP_COMMON_DIR}/docs/.doxygen/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/docs)
else()
message(STATUS " Unable to find doxygen config file. Will not generate doxygen output ")
endif()
2018-02-12 10:21:27 +05:30
endif()
2016-06-21 08:13:19 +05:30
2016-04-12 12:42:12 +05:30
#############################
2021-06-11 00:30:12 -07:00
# Install steps
2016-04-12 12:42:12 +05:30
#############################
2021-06-11 00:30:12 -07:00
# Install .hipInfo
2023-04-26 18:13:36 +00:00
install(FILES ${PROJECT_BINARY_DIR}/share/hip/.hipInfo DESTINATION ${CMAKE_INSTALL_LIBDIR})
2021-06-11 00:30:12 -07:00
2023-07-17 15:48:13 -07:00
# Install version
2023-04-26 18:13:36 +00:00
install(FILES ${PROJECT_BINARY_DIR}/share/hip/version DESTINATION ${CMAKE_INSTALL_DATADIR}/hip)
2023-07-17 15:48:13 -07:00
# .hipVersion is added to satisfy Windows compute build.
#TODO to be removed
2023-06-01 17:46:48 -04:00
if(WIN32)
2023-04-26 18:13:36 +00:00
install(FILES ${PROJECT_BINARY_DIR}/share/hip/version DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME .hipVersion)
2023-06-01 17:46:48 -04:00
endif()
2021-06-11 00:30:12 -07:00
# Install src, bin, include & cmake if necessary
execute_process(COMMAND test ${CMAKE_INSTALL_PREFIX} -ef ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE INSTALL_SOURCE)
if(NOT ${INSTALL_SOURCE} EQUAL 0)
if(WIN32)
install(DIRECTORY ${HIP_COMMON_BIN_DIR} DESTINATION . USE_SOURCE_PERMISSIONS)
2022-01-14 01:48:10 +00:00
if (CMAKE_BUILD_TYPE STREQUAL " Debug ")
2022-05-09 13:41:00 -04:00
install(DIRECTORY " ${ CMAKE_CURRENT_BINARY_DIR } /src/ " DESTINATION ${CMAKE_INSTALL_BINDIR}
2022-01-14 01:48:10 +00:00
FILES_MATCHING PATTERN " *.pdb "
PATTERN " *.ilk "
PATTERN " CMakeFiles " EXCLUDE
PATTERN " hip_rtc_gen " EXCLUDE
PATTERN " libelf " EXCLUDE
PATTERN " loader " EXCLUDE
PATTERN " pal " EXCLUDE
PATTERN " libamdhsacode " EXCLUDE)
endif()
2021-06-11 00:30:12 -07:00
else()
2022-01-11 14:46:44 -06:00
# Exclude .bat files on Linux.
2022-03-08 16:17:31 -08:00
#Hip bin files moved to /opt/rocm/bin and the file permission need to set properly
2021-06-11 00:30:12 -07:00
install(DIRECTORY ${HIP_COMMON_BIN_DIR} DESTINATION . USE_SOURCE_PERMISSIONS
2022-03-08 16:17:31 -08:00
DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
2021-06-11 00:30:12 -07:00
PATTERN *.bat EXCLUDE)
endif()
2022-03-08 16:17:31 -08:00
if(WIN32) #not required for flat folder structure
# The following two lines will be removed after upstream updation
2022-05-09 13:41:00 -04:00
install(CODE " MESSAGE(\ "Removing ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}\" ) ")
install ( CODE "file(REMOVE_RECURSE ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})" )
2022-03-08 16:17:31 -08:00
endif ()
2021-06-11 00:30:12 -07:00
install ( DIRECTORY include DESTINATION . )
2023-10-07 10:43:03 +00:00
if ( DEFINED HIPNV_DIR )
install ( DIRECTORY ${ HIPNV_DIR } /include/hip/ DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } /hip/ )
endif ()
2022-05-09 13:41:00 -04:00
install ( DIRECTORY ${ HIP_COMMON_INCLUDE_DIR } /hip/ DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } /hip/ )
2022-03-08 16:17:31 -08:00
if ( WIN32 )
install ( DIRECTORY ${ HIP_COMMON_DIR } /cmake DESTINATION . )
else ()
2022-07-07 18:40:46 -07:00
install ( DIRECTORY ${ HIP_COMMON_DIR } /cmake/ DESTINATION ${ CONFIG_PACKAGE_INSTALL_DIR } )
2022-03-08 16:17:31 -08:00
endif ()
2021-06-07 21:42:44 +00:00
endif ()
2016-10-11 11:13:41 +05:30
2021-06-11 00:30:12 -07:00
# Install generated headers
# FIXME: Associate with individual targets.
if ( HIP_PLATFORM STREQUAL "amd" )
install ( FILES ${ PROJECT_BINARY_DIR } /include/hip/amd_detail/hip_prof_str.h
2022-05-09 13:41:00 -04:00
DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } /hip/amd_detail )
2021-08-17 19:36:37 +00:00
install ( DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR } /bin DESTINATION . USE_SOURCE_PERMISSIONS )
2021-06-11 00:30:12 -07:00
endif ()
install ( FILES ${ PROJECT_BINARY_DIR } /include/hip/hip_version.h
2022-05-09 13:41:00 -04:00
DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } /hip )
2020-04-30 15:02:23 -04:00
2022-03-29 16:59:09 +00:00
if ( NOT ${ HIPCC_BIN_DIR } STREQUAL "" )
file ( TO_CMAKE_PATH "${HIPCC_BIN_DIR}" HIPCC_BIN_DIR )
2023-08-22 17:33:41 +00:00
if ( EXISTS ${ HIPCC_BIN_DIR } )
2023-04-19 18:20:31 +00:00
set ( hipcc_bin ${ HIPCC_BIN_DIR } /hipcc.bin )
set ( hipconfig_bin ${ HIPCC_BIN_DIR } /hipconfig.bin )
if ( WIN32 )
set ( hipcc_bin ${ hipcc_bin } .exe )
set ( hipconfig_bin ${ hipconfig_bin } .exe )
endif ()
if ( EXISTS ${ hipcc_bin } AND EXISTS ${ hipconfig_bin } )
install ( PROGRAMS ${ hipcc_bin } DESTINATION bin )
install ( PROGRAMS ${ hipconfig_bin } DESTINATION bin )
endif ()
2022-03-29 16:59:09 +00:00
endif ()
2023-04-19 18:20:31 +00:00
install ( PROGRAMS ${ HIPCC_BIN_DIR } /hipcc DESTINATION bin )
install ( PROGRAMS ${ HIPCC_BIN_DIR } /hipconfig DESTINATION bin )
install ( PROGRAMS ${ HIPCC_BIN_DIR } /hipcc.pl DESTINATION bin )
install ( PROGRAMS ${ HIPCC_BIN_DIR } /hipconfig.pl DESTINATION bin )
install ( PROGRAMS ${ HIPCC_BIN_DIR } /hipvars.pm DESTINATION bin )
2023-10-13 02:14:37 +01:00
if ( WIN32 )
install ( PROGRAMS ${ HIPCC_BIN_DIR } /hipcc.bat DESTINATION bin )
install ( PROGRAMS ${ HIPCC_BIN_DIR } /hipconfig.bat DESTINATION bin )
endif ()
2022-03-29 16:59:09 +00:00
endif ()
2021-06-11 00:30:12 -07:00
#############################
# hip-config
#############################
2020-06-09 15:45:22 -04:00
include ( CMakePackageConfigHelpers )
2018-09-19 18:29:56 +00:00
2020-06-09 15:45:22 -04:00
configure_package_config_file (
2021-06-11 00:30:12 -07:00
hip-config.cmake.in
${ CMAKE_CURRENT_BINARY_DIR } /hip-config.cmake
INSTALL_DESTINATION ${ CONFIG_PACKAGE_INSTALL_DIR }
PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR BIN_INSTALL_DIR
)
2020-06-09 15:45:22 -04:00
2023-05-31 10:09:06 +01:00
configure_package_config_file (
hip-config-amd.cmake
${ CMAKE_CURRENT_BINARY_DIR } /hip-config-amd.cmake
INSTALL_DESTINATION ${ CONFIG_PACKAGE_INSTALL_DIR }
PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR BIN_INSTALL_DIR
)
configure_package_config_file (
hip-config-nvidia.cmake
${ CMAKE_CURRENT_BINARY_DIR } /hip-config-nvidia.cmake
INSTALL_DESTINATION ${ CONFIG_PACKAGE_INSTALL_DIR }
PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR BIN_INSTALL_DIR
)
2020-06-09 15:45:22 -04:00
write_basic_package_version_file (
2021-06-11 00:30:12 -07:00
${ CMAKE_CURRENT_BINARY_DIR } /hip-config-version.cmake
VERSION "${HIP_VERSION_MAJOR}.${HIP_VERSION_MINOR}.${HIP_VERSION_GITDATE}"
COMPATIBILITY SameMajorVersion
)
2020-06-09 15:45:22 -04:00
install (
FILES
2021-06-11 00:30:12 -07:00
${ CMAKE_CURRENT_BINARY_DIR } /hip-config.cmake
2023-05-31 10:09:06 +01:00
${ CMAKE_CURRENT_BINARY_DIR } /hip-config-amd.cmake
${ CMAKE_CURRENT_BINARY_DIR } /hip-config-nvidia.cmake
2021-06-11 00:30:12 -07:00
${ CMAKE_CURRENT_BINARY_DIR } /hip-config-version.cmake
2020-06-09 15:45:22 -04:00
DESTINATION
2021-06-11 00:30:12 -07:00
${ CONFIG_PACKAGE_INSTALL_DIR }
2020-06-09 15:45:22 -04:00
)
2023-07-31 21:49:27 +01:00
# Packaging invokes UNIX commands, which are not available on Windows.
2023-09-28 00:51:05 +01:00
2022-01-26 08:06:53 -08:00
if ( NOT WIN32 )
add_subdirectory ( packaging )
2021-06-11 00:30:12 -07:00
endif ()
#############################
# Code formatting
#############################
# Target: clangformat
find_program ( CLANGFORMAT_EXE clang-format PATHS ${ HCC_HOME } /bin )
if ( CLANGFORMAT_EXE )
file ( GLOB_RECURSE FORMAT_SOURCE_FILE_LIST *.cpp *.hpp *.h )
add_custom_target ( clangformat COMMAND ${ CLANGFORMAT_EXE } -style=file -i ${ FORMAT_SOURCE_FILE_LIST }
WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR } )
2021-05-11 14:21:34 -04:00
endif ()
2021-06-11 00:30:12 -07:00
#############################
# Code analysis
#############################
# Target: clang
if ( HIP_HIPCC_EXECUTABLE )
add_custom_target ( analyze
2022-05-09 13:41:00 -04:00
COMMAND ${ HIP_HIPCC_EXECUTABLE } -fvisibility=hidden -fvisibility-inlines-hidden --analyze --analyzer-outputtext -isystem ${ ROCM_PATH } / ${ CMAKE_INSTALL_INCLUDEDIR } -Wno-unused-command-line-argument -I ${ ROCM_PATH } / ${ CMAKE_INSTALL_INCLUDEDIR } -c src/*.cpp -Iinclude/ -I./
2021-06-11 00:30:12 -07:00
WORKING_DIRECTORY ${ HIP_SRC_PATH } )
if ( CPPCHECK_EXE )
add_dependencies ( analyze cppcheck )
endif ()
endif ()
2022-03-08 16:17:31 -08:00
#File reorg Backward compatibility function
if ( NOT WIN32 )
if ( FILE_REORG_BACKWARD_COMPATIBILITY )
2023-05-31 01:47:43 -07:00
# To enabe/disable #error in wrapper header files
if ( NOT DEFINED ROCM_HEADER_WRAPPER_WERROR )
if ( DEFINED ENV{ROCM_HEADER_WRAPPER_WERROR} )
set ( ROCM_HEADER_WRAPPER_WERROR "$ENV{ROCM_HEADER_WRAPPER_WERROR}"
CACHE STRING "Header wrapper warnings as errors." )
else ()
set ( ROCM_HEADER_WRAPPER_WERROR "OFF" CACHE STRING "Header wrapper warnings as errors." )
endif ()
endif ()
if ( ROCM_HEADER_WRAPPER_WERROR )
set ( deprecated_error 1 )
else ()
set ( deprecated_error 0 )
endif ()
2022-03-08 16:17:31 -08:00
include ( hip-backward-compat.cmake )
2023-05-31 01:47:43 -07:00
endif () #FILE_REORG_BACKWARD_COMPATIBILITY
2022-03-08 16:17:31 -08:00
endif ()