diff --git a/projects/clr/CMakeLists.txt b/projects/clr/CMakeLists.txt index b15fce65f1..593c8bc036 100644 --- a/projects/clr/CMakeLists.txt +++ b/projects/clr/CMakeLists.txt @@ -52,40 +52,51 @@ endif() ############# # Build steps ############# -if(CLR_BUILD_HIP) - if (UNIX) - set(HIPCC_EXECUTABLE "hipcc") - set(HIPCONFIG_EXECUTABLE "hipconfig") - else() - set(HIPCC_EXECUTABLE "hipcc.exe") - set(HIPCONFIG_EXECUTABLE "hipconfig.exe") - endif() + +# Attempt to auto-detect HIP_PLATFORM by interrogating hipconfig. This is kept +# for compatibility: users are advised to pass HIP_PLATFORM explicitly. +# Sets the HIP_PLATFORM variable in the parent scope. +function(_hip_clr_auto_detect_hip_platform) + if (UNIX) + set(HIPCC_EXECUTABLE "hipcc") + set(HIPCONFIG_EXECUTABLE "hipconfig") + else() + set(HIPCC_EXECUTABLE "hipcc.exe") + set(HIPCONFIG_EXECUTABLE "hipconfig.exe") + endif() # Set default HIPCC_BIN_DIR to /opt/rocm/bin if(NOT DEFINED HIPCC_BIN_DIR AND UNIX) - set(HIPCC_BIN_DIR "/opt/rocm/bin" CACHE STRING "Default hipcc directory on linux.") + set(HIPCC_BIN_DIR "/opt/rocm/bin") endif() - message(STATUS "HIPCC Binary Directory: ${HIPCC_BIN_DIR}") + message(STATUS "Auto-detect HIP_PLATFORM from HIPCC Binary Directory: ${HIPCC_BIN_DIR}") if(NOT EXISTS ${HIPCC_BIN_DIR}/${HIPCONFIG_EXECUTABLE}) message(FATAL_ERROR "Please pass hipcc/build or hipcc/bin using -DHIPCC_BIN_DIR.") endif() - message(STATUS "HIP Common Directory: ${HIP_COMMON_DIR}") - if(NOT DEFINED HIP_COMMON_DIR) - message(FATAL_ERROR "Please pass HIP using -DHIP_COMMON_DIR. HIP_COMMON_DIR is incorrect") - endif() # Determine HIP_PLATFORM if(NOT DEFINED HIP_PLATFORM) if(NOT DEFINED ENV{HIP_PLATFORM}) execute_process(COMMAND ${HIPCC_BIN_DIR}/${HIPCONFIG_EXECUTABLE} --platform - OUTPUT_VARIABLE HIP_PLATFORM + OUTPUT_VARIABLE _detected_hip_platform OUTPUT_STRIP_TRAILING_WHITESPACE) + set(HIP_PLATFORM "${_detected_hip_platform}" PARENT_SCOPE) else() - set(HIP_PLATFORM $ENV{HIP_PLATFORM} CACHE STRING "HIP Platform") + set(HIP_PLATFORM "$ENV{HIP_PLATFORM}" PARENT_SCOPE) endif() endif() +endfunction() +if(CLR_BUILD_HIP) + message(STATUS "HIP Common Directory: ${HIP_COMMON_DIR}") + if(NOT DEFINED HIP_COMMON_DIR) + message(FATAL_ERROR "Please pass HIP using -DHIP_COMMON_DIR. HIP_COMMON_DIR is incorrect") + endif() + if(NOT DEFINED HIP_PLATFORM) + _hip_clr_auto_detect_hip_platform() + endif() endif() + if(CLR_BUILD_HIP) option(BUILD_SHARED_LIBS "Build the shared library" ON) if (NOT BUILD_SHARED_LIBS) diff --git a/projects/clr/hipamd/CMakeLists.txt b/projects/clr/hipamd/CMakeLists.txt index 61e87acf57..e4b2ebed3e 100755 --- a/projects/clr/hipamd/CMakeLists.txt +++ b/projects/clr/hipamd/CMakeLists.txt @@ -52,7 +52,8 @@ if(MSVC) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG:FULL") endif() -set(HIPCC_BIN_DIR "" CACHE STRING "HIPCC and HIPCONFIG binary directories") +# Set default HIPCC_BIN_DIR to /opt/rocm/bin +set(HIPCC_BIN_DIR "/opt/rocm/bin" CACHE STRING "HIPCC and HIPCONFIG binary directories") if(__HIP_ENABLE_PCH) set(_pchStatus 1) @@ -409,9 +410,11 @@ endif() install(FILES ${PROJECT_BINARY_DIR}/include/hip/hip_version.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hip) +set(HIP_INSTALLS_HIPCC OFF) if (NOT ${HIPCC_BIN_DIR} STREQUAL "") file(TO_CMAKE_PATH "${HIPCC_BIN_DIR}" HIPCC_BIN_DIR) if(EXISTS ${HIPCC_BIN_DIR}) + set(HIP_INSTALLS_HIPCC ON) install(PROGRAMS ${HIPCC_BIN_DIR}/${HIPCC_EXECUTABLE} DESTINATION bin) install(PROGRAMS ${HIPCC_BIN_DIR}/${HIPCONFIG_EXECUTABLE} DESTINATION bin) install(PROGRAMS ${HIPCC_BIN_DIR}/hipcc.pl DESTINATION bin) diff --git a/projects/clr/hipamd/hip-config.cmake.in b/projects/clr/hipamd/hip-config.cmake.in index 1fcdcd970e..d033c09ac8 100755 --- a/projects/clr/hipamd/hip-config.cmake.in +++ b/projects/clr/hipamd/hip-config.cmake.in @@ -101,12 +101,14 @@ set_and_check( hip_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@" ) set_and_check( hip_INCLUDE_DIRS "${hip_INCLUDE_DIR}" ) set_and_check( hip_LIB_INSTALL_DIR "@PACKAGE_LIB_INSTALL_DIR@" ) set_and_check( hip_BIN_INSTALL_DIR "@PACKAGE_BIN_INSTALL_DIR@" ) -if (WIN32) - set_and_check(hip_HIPCC_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipcc.exe") - set_and_check(hip_HIPCONFIG_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipconfig.exe") -else() - set_and_check(hip_HIPCC_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipcc") - set_and_check(hip_HIPCONFIG_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipconfig") +if("@HIP_INSTALLS_HIPCC@") + if (WIN32) + set_and_check(hip_HIPCC_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipcc.exe") + set_and_check(hip_HIPCONFIG_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipconfig.exe") + else() + set_and_check(hip_HIPCC_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipcc") + set_and_check(hip_HIPCONFIG_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipconfig") + endif() endif() if(NOT DEFINED HIP_PLATFORM) @@ -140,6 +142,7 @@ set(HIP_LIB_INSTALL_DIR ${hip_LIB_INSTALL_DIR}) set(HIP_BIN_INSTALL_DIR ${hip_BIN_INSTALL_DIR}) set(HIP_LIBRARIES ${hip_LIBRARIES}) set(HIP_LIBRARY ${hip_LIBRARY}) -set(HIP_HIPCC_EXECUTABLE ${hip_HIPCC_EXECUTABLE}) -set(HIP_HIPCONFIG_EXECUTABLE ${hip_HIPCONFIG_EXECUTABLE}) - +if("@HIP_INSTALLS_HIPCC@") + set(HIP_HIPCC_EXECUTABLE ${hip_HIPCC_EXECUTABLE}) + set(HIP_HIPCONFIG_EXECUTABLE ${hip_HIPCONFIG_EXECUTABLE}) +endif()