SWDEV-352878 - Removed relative path based CLANG include, CLANGRT dependencies (#3124)
Change-Id: Ifdcd117679bff548a6351ba915a8272689e647de
Tento commit je obsažen v:
odevzdal
GitHub
rodič
afeeaba3a3
revize
6f8ca12d4d
@@ -48,6 +48,29 @@ mark_as_advanced(HIP_HOST_COMPILATION_CPP)
|
||||
# FIND: HIP and associated helper binaries
|
||||
###############################################################################
|
||||
|
||||
if(NOT HIP_CXX_COMPILER)
|
||||
set(HIP_CXX_COMPILER ${CMAKE_CXX_COMPILER})
|
||||
endif()
|
||||
|
||||
# Approach: To find HIP_CLANG_PATH using HIP_CXX_COMPILER options
|
||||
# Using --version option of HIP_CXX_COMPILER get the Install Directory
|
||||
# This install directory is set as the HIP_CLANG_PATH.
|
||||
# IF not successful in getting the Install Directory using HIP_CXX_COMPILER
|
||||
# fallback to Old Method to find HIP_CLANG_PATH from ENV Vars, ROCMPATH, HIPPATH etc.
|
||||
execute_process(COMMAND ${HIP_CXX_COMPILER} --version
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
OUTPUT_VARIABLE HIP_CXX_COMPILER_VERSION_OUTPUT)
|
||||
if(HIP_CXX_COMPILER MATCHES ".*hipcc")
|
||||
if(HIP_CXX_COMPILER_VERSION_OUTPUT MATCHES "InstalledDir:[ \t]*([^\n]*)")
|
||||
get_filename_component(HIP_CLANG_INSTALL_DIR "${CMAKE_MATCH_1}" DIRECTORY)
|
||||
endif()
|
||||
elseif (HIP_CXX_COMPILER MATCHES ".*clang\\+\\+")
|
||||
get_filename_component(_HIP_CLANG_REAL_PATH "${HIP_CXX_COMPILER}" REALPATH)
|
||||
get_filename_component(_HIP_CLANG_BIN_PATH "${_HIP_CLANG_REAL_PATH}" DIRECTORY)
|
||||
get_filename_component(HIP_CLANG_INSTALL_DIR "${_HIP_CLANG_BIN_PATH}" DIRECTORY)
|
||||
endif()
|
||||
|
||||
|
||||
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_DIR}/../" REALPATH)
|
||||
|
||||
# HIP is currently not supported for apple
|
||||
@@ -230,6 +253,10 @@ if("${HIP_COMPILER}" STREQUAL "nvcc")
|
||||
elseif("${HIP_COMPILER}" STREQUAL "clang")
|
||||
#Set HIP_CLANG_PATH
|
||||
if("x${HIP_CLANG_PATH}" STREQUAL "x")
|
||||
# IF HIP_CLANG_INSTALL_DIR is Found
|
||||
if( HIP_CLANG_INSTALL_DIR )
|
||||
set(HIP_CLANG_PATH ${HIP_CLANG_INSTALL_DIR})
|
||||
else() # IF HIP_CLANG_INSTALL_DIR is not found
|
||||
if(DEFINED ENV{HIP_CLANG_PATH})
|
||||
set(HIP_CLANG_PATH $ENV{HIP_CLANG_PATH})
|
||||
elseif(DEFINED ENV{ROCM_PATH})
|
||||
@@ -252,7 +279,9 @@ elseif("${HIP_COMPILER}" STREQUAL "clang")
|
||||
else()
|
||||
message(FATAL_ERROR "Unable to find the clang compiler path. Set ROCM_PATH or HIP_PATH in env ")
|
||||
endif()
|
||||
endif()
|
||||
endif() # HIP_CLANG_INSTALL_DIR Check
|
||||
endif() # Set HIP_CLANG_PATH
|
||||
|
||||
#Number of parallel jobs by default is 1
|
||||
if(NOT DEFINED HIP_CLANG_NUM_PARALLEL_JOBS)
|
||||
set(HIP_CLANG_NUM_PARALLEL_JOBS 1)
|
||||
@@ -660,6 +689,10 @@ macro(HIP_ADD_EXECUTABLE hip_target)
|
||||
endif()
|
||||
if("${HIP_COMPILER}" STREQUAL "clang")
|
||||
if("x${HIP_CLANG_PATH}" STREQUAL "x")
|
||||
# IF HIP_CLANG_INSTALL_DIR is Found
|
||||
if( HIP_CLANG_INSTALL_DIR )
|
||||
set(HIP_CLANG_PATH ${HIP_CLANG_INSTALL_DIR})
|
||||
else() # IF HIP_CLANG_INSTALL_DIR is not found
|
||||
if(DEFINED ENV{HIP_CLANG_PATH})
|
||||
set(HIP_CLANG_PATH $ENV{HIP_CLANG_PATH})
|
||||
elseif(DEFINED ENV{ROCM_PATH})
|
||||
@@ -682,7 +715,9 @@ macro(HIP_ADD_EXECUTABLE hip_target)
|
||||
else()
|
||||
message(FATAL_ERROR "Unable to find the clang compiler path. Set ROCM_PATH or HIP_PATH in env")
|
||||
endif()
|
||||
endif() # HIP_CLANG_INSTALL_DIR Check
|
||||
endif()
|
||||
|
||||
set(CMAKE_HIP_LINK_EXECUTABLE "${HIP_HIPCC_CMAKE_LINKER_HELPER} ${HIP_CLANG_PATH} ${HIP_CLANG_PARALLEL_BUILD_LINK_OPTIONS} <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
|
||||
else()
|
||||
set(CMAKE_HIP_LINK_EXECUTABLE "${HIP_HIPCC_CMAKE_LINKER_HELPER} <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
|
||||
|
||||
@@ -71,11 +71,6 @@ include( "${CMAKE_CURRENT_LIST_DIR}/hip-lang-targets.cmake" )
|
||||
get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" REALPATH)
|
||||
get_filename_component(_IMPORT_PREFIX "${_DIR}/../../../../" ABSOLUTE)
|
||||
|
||||
file(GLOB HIP_CLANG_INCLUDE_SEARCH_PATHS "${_IMPORT_PREFIX}/llvm/lib/clang/*/include")
|
||||
find_path(HIP_CLANG_INCLUDE_PATH __clang_cuda_math.h
|
||||
HINTS ${HIP_CLANG_INCLUDE_SEARCH_PATHS}
|
||||
NO_DEFAULT_PATH)
|
||||
get_filename_component(HIP_CLANG_INCLUDE_PATH "${HIP_CLANG_INCLUDE_PATH}" DIRECTORY)
|
||||
|
||||
#If HIP isnot installed under ROCm, need this to find HSA assuming HSA is under ROCm
|
||||
if( DEFINED ENV{ROCM_PATH} )
|
||||
@@ -93,18 +88,10 @@ if (NOT HSA_HEADER)
|
||||
message (FATAL_ERROR "HSA header not found! ROCM_PATH environment not set")
|
||||
endif()
|
||||
|
||||
get_filename_component(HIP_COMPILER_INSTALL_PATH ${CMAKE_HIP_COMPILER} DIRECTORY)
|
||||
file(GLOB HIP_CLANGRT_LIB_SEARCH_PATHS "${HIP_COMPILER_INSTALL_PATH}/../lib/clang/*/lib/*")
|
||||
find_library(CLANGRT_BUILTINS
|
||||
NAMES
|
||||
clang_rt.builtins
|
||||
clang_rt.builtins-x86_64
|
||||
PATHS
|
||||
${HIP_CLANGRT_LIB_SEARCH_PATHS}
|
||||
${HIP_CLANG_INCLUDE_PATH}/../lib/linux)
|
||||
|
||||
set_target_properties(hip-lang::device PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "$<$<COMPILE_LANGUAGE:HIP>:${_IMPORT_PREFIX}/include;${HIP_CLANG_INCLUDE_PATH}>"
|
||||
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "$<$<COMPILE_LANGUAGE:HIP>:${_IMPORT_PREFIX}/include;${HIP_CLANG_INCLUDE_PATH}>"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "$<$<COMPILE_LANGUAGE:HIP>:${_IMPORT_PREFIX}/include>"
|
||||
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "$<$<COMPILE_LANGUAGE:HIP>:${_IMPORT_PREFIX}/include>"
|
||||
)
|
||||
|
||||
set_target_properties(hip-lang::amdhip64 PROPERTIES
|
||||
@@ -130,13 +117,33 @@ set_property(TARGET hip-lang::device APPEND PROPERTY
|
||||
INTERFACE_LINK_OPTIONS "$<$<LINK_LANGUAGE:HIP>:--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(NOT CLANGRT_BUILTINS)
|
||||
message(FATAL_ERROR "clangrt builtins lib not found")
|
||||
else()
|
||||
if( "${CLANGRT_BUILTINS_FETCH_EXIT_CODE}" STREQUAL "0" )
|
||||
set_property(TARGET hip-lang::device APPEND PROPERTY
|
||||
INTERFACE_LINK_LIBRARIES "$<$<LINK_LANGUAGE:HIP>:${CLANGRT_BUILTINS}>"
|
||||
INTERFACE_LINK_OPTIONS $<$<LINK_LANGUAGE:HIP>:--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
|
||||
|
||||
Odkázat v novém úkolu
Zablokovat Uživatele