diff --git a/hipamd/CMakeLists.txt b/hipamd/CMakeLists.txt index 2369a32f6b..9e4ce96e14 100755 --- a/hipamd/CMakeLists.txt +++ b/hipamd/CMakeLists.txt @@ -212,9 +212,11 @@ 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") + file(READ "hip-nvidia-config.cmake" PLATFORM_CONFIG) elseif(HIP_PLATFORM STREQUAL "amd") set(HIP_RUNTIME "rocclr" CACHE STRING "HIP Runtime") set(HIP_COMPILER "clang" CACHE STRING "HIP Compiler") + file(READ "hip-amd-config.cmake" PLATFORM_CONFIG) else() message(FATAL_ERROR "Unexpected HIP_PLATFORM: " ${HIP_PLATFORM}) endif() diff --git a/hipamd/hip-amd-config.cmake b/hipamd/hip-amd-config.cmake new file mode 100755 index 0000000000..913d43a817 --- /dev/null +++ b/hipamd/hip-amd-config.cmake @@ -0,0 +1,146 @@ +# AMD-specific configuration +# Number of parallel jobs by default is 1 +if(NOT DEFINED HIP_CLANG_NUM_PARALLEL_JOBS) + set(HIP_CLANG_NUM_PARALLEL_JOBS 1) +endif() + +# Windows Specific Definition here: +if(WIN32) + if(DEFINED ENV{HIP_PATH}) + file(TO_CMAKE_PATH "$ENV{HIP_PATH}" HIP_PATH) + elseif(DEFINED ENV{HIP_DIR}) + file(TO_CMAKE_PATH "$ENV{HIP_DIR}" HIP_DIR) + else() + # using the HIP found + set(HIP_PATH ${PACKAGE_PREFIX_DIR}) + endif() +else() + # Linux + # If HIP is not installed under ROCm, need this to find HSA assuming HSA is under ROCm + if(DEFINED ENV{ROCM_PATH}) + set(ROCM_PATH "$ENV{ROCM_PATH}") + endif() + + # set a default path for ROCM_PATH + if(NOT DEFINED ROCM_PATH) + set(ROCM_PATH ${PACKAGE_PREFIX_DIR}) + endif() + +endif() + +if(HIP_COMPILER STREQUAL "clang") + if(WIN32) + # Using SDK folder + file(TO_CMAKE_PATH "${HIP_PATH}" HIP_CLANG_ROOT) + if (NOT EXISTS "${HIP_CLANG_ROOT}/bin/clang.exe") + # if using install folder + file(TO_CMAKE_PATH "${HIP_PATH}/../lc" HIP_CLANG_ROOT) + endif() + else() + set(HIP_CLANG_ROOT "${ROCM_PATH}/llvm") + endif() + if(NOT HIP_CXX_COMPILER) + set(HIP_CXX_COMPILER ${CMAKE_CXX_COMPILER}) + endif() + + if(NOT WIN32) + find_dependency(AMDDeviceLibs) + endif() + set(AMDGPU_TARGETS "" CACHE STRING "AMD GPU targets to compile for") + set(GPU_TARGETS "${AMDGPU_TARGETS}" CACHE STRING "GPU targets to compile for") +endif() # HIP_COMPILER check + +if(NOT WIN32) + find_dependency(amd_comgr) +endif() + +include( "${CMAKE_CURRENT_LIST_DIR}/hip-targets.cmake" ) + +#Using find_dependency to locate the dependency for the packages +#This makes the cmake generated file xxxx-targets to supply the linker libraries +# without worrying other transitive dependencies +if(NOT WIN32) + find_dependency(hsa-runtime64) + find_dependency(Threads) +endif() + +set(_IMPORT_PREFIX ${HIP_PACKAGE_PREFIX_DIR}) +# Right now this is only supported for amd platforms +set_target_properties(hip::host PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "__HIP_PLATFORM_HCC__=1;__HIP_PLATFORM_AMD__=1" +) + +if(HIP_RUNTIME MATCHES "rocclr") + set_target_properties(hip::amdhip64 PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + ) + + get_target_property(amdhip64_type hip::amdhip64 TYPE) + message(STATUS "hip::amdhip64 is ${amdhip64_type}") + + if(NOT WIN32) + set_target_properties(hip::device PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + ) + endif() +endif() + +if(HIP_COMPILER STREQUAL "clang") + get_property(compilePropIsSet TARGET hip::device PROPERTY INTERFACE_COMPILE_OPTIONS SET) + + if (NOT compilePropIsSet AND HIP_CXX_COMPILER MATCHES ".*clang\\+\\+") + hip_add_interface_compile_flags(hip::device -mllvm -amdgpu-early-inline-all=true -mllvm -amdgpu-function-calls=false) + endif() + + if (NOT compilePropIsSet) + hip_add_interface_compile_flags(hip::device -x hip) + endif() + + hip_add_interface_link_flags(hip::device --hip-link) + + foreach(GPU_TARGET ${GPU_TARGETS}) + if (NOT compilePropIsSet) + hip_add_interface_compile_flags(hip::device --offload-arch=${GPU_TARGET}) + endif() + hip_add_interface_link_flags(hip::device --offload-arch=${GPU_TARGET}) + endforeach() + #Add support for parallel build and link + if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + check_cxx_compiler_flag("-parallel-jobs=1" HIP_CLANG_SUPPORTS_PARALLEL_JOBS) + endif() + if(HIP_CLANG_NUM_PARALLEL_JOBS GREATER 1) + if(${HIP_CLANG_SUPPORTS_PARALLEL_JOBS} ) + if (NOT compilePropIsSet) + hip_add_interface_compile_flags(hip::device -parallel-jobs=${HIP_CLANG_NUM_PARALLEL_JOBS} -Wno-format-nonliteral) + endif() + hip_add_interface_link_flags(hip::device -parallel-jobs=${HIP_CLANG_NUM_PARALLEL_JOBS}) + else() + message("clang compiler doesn't support parallel jobs") + endif() + endif() + + # Use HIP_CXX option -print-libgcc-file-name --rtlib=compiler-rt + # To fetch the compiler rt library file name. + execute_process( + COMMAND ${HIP_CXX_COMPILER} -print-libgcc-file-name --rtlib=compiler-rt + OUTPUT_VARIABLE CLANGRT_BUILTINS + ERROR_VARIABLE CLANGRT_Error + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE CLANGRT_BUILTINS_FETCH_EXIT_CODE) + + if( CLANGRT_Error ) + message( STATUS "${HIP_CXX_COMPILER}: CLANGRT compiler options not supported.") + else() + # Add support for __fp16 and _Float16, explicitly link with compiler-rt + if( "${CLANGRT_BUILTINS_FETCH_EXIT_CODE}" STREQUAL "0" ) + # CLANG_RT Builtins found Successfully Set interface link libraries property + set_property(TARGET hip::host APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${CLANGRT_BUILTINS}") + set_property(TARGET hip::device APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${CLANGRT_BUILTINS}") + else() + message(STATUS "clangrt builtins lib not found: ${CLANGRT_BUILTINS_FETCH_EXIT_CODE}") + endif() # CLANGRT_BUILTINS_FETCH_EXIT_CODE Check + endif() # CLANGRT_Error Check +endif() # HIP_COMPILER Check diff --git a/hipamd/hip-config.cmake.in b/hipamd/hip-config.cmake.in index 98fcc14a83..23e415bbb2 100755 --- a/hipamd/hip-config.cmake.in +++ b/hipamd/hip-config.cmake.in @@ -83,10 +83,6 @@ function(hip_add_interface_link_flags TARGET) endif() endfunction() -#Number of parallel jobs by default is 1 -if(NOT DEFINED HIP_CLANG_NUM_PARALLEL_JOBS) - set(HIP_CLANG_NUM_PARALLEL_JOBS 1) -endif() set(HIP_COMPILER "@HIP_COMPILER@") set(HIP_RUNTIME "@HIP_RUNTIME@") @@ -116,147 +112,7 @@ else() set_and_check(hip_HIPCC_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipcc") set_and_check(hip_HIPCONFIG_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipconfig") endif() -# Windows Specific Definition here: -if(WIN32) - if(DEFINED ENV{HIP_PATH}) - file(TO_CMAKE_PATH "$ENV{HIP_PATH}" HIP_PATH) - elseif(DEFINED ENV{HIP_DIR}) - file(TO_CMAKE_PATH "$ENV{HIP_DIR}" HIP_DIR) - else() - # using the HIP found - set(HIP_PATH ${PACKAGE_PREFIX_DIR}) - endif() -else() - # Linux - # If HIP is not installed under ROCm, need this to find HSA assuming HSA is under ROCm - if(DEFINED ENV{ROCM_PATH}) - set(ROCM_PATH "$ENV{ROCM_PATH}") - endif() - - # set a default path for ROCM_PATH - if(NOT DEFINED ROCM_PATH) - set(ROCM_PATH ${PACKAGE_PREFIX_DIR}) - endif() - -endif() - -if(HIP_COMPILER STREQUAL "clang") - if(WIN32) - # Using SDK folder - file(TO_CMAKE_PATH "${HIP_PATH}" HIP_CLANG_ROOT) - if (NOT EXISTS "${HIP_CLANG_ROOT}/bin/clang.exe") - # if using install folder - file(TO_CMAKE_PATH "${HIP_PATH}/../lc" HIP_CLANG_ROOT) - endif() - else() - set(HIP_CLANG_ROOT "${ROCM_PATH}/llvm") - endif() - if(NOT HIP_CXX_COMPILER) - set(HIP_CXX_COMPILER ${CMAKE_CXX_COMPILER}) - endif() - - if(NOT WIN32) - find_dependency(AMDDeviceLibs) - endif() - set(AMDGPU_TARGETS "" CACHE STRING "AMD GPU targets to compile for") - set(GPU_TARGETS "${AMDGPU_TARGETS}" CACHE STRING "GPU targets to compile for") -endif() # HIP_COMPILER check - -if(NOT WIN32) - find_dependency(amd_comgr) -endif() - -include( "${CMAKE_CURRENT_LIST_DIR}/hip-targets.cmake" ) - -#Using find_dependency to locate the dependency for the packages -#This makes the cmake generated file xxxx-targets to supply the linker libraries -# without worrying other transitive dependencies -if(NOT WIN32) - find_dependency(hsa-runtime64) - find_dependency(Threads) -endif() - -set(_IMPORT_PREFIX ${HIP_PACKAGE_PREFIX_DIR}) -# Right now this is only supported for amd platforms -set_target_properties(hip::host PROPERTIES - INTERFACE_COMPILE_DEFINITIONS "__HIP_PLATFORM_HCC__=1;__HIP_PLATFORM_AMD__=1" -) - -if(HIP_RUNTIME MATCHES "rocclr") - set_target_properties(hip::amdhip64 PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" - INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" - ) - - get_target_property(amdhip64_type hip::amdhip64 TYPE) - message(STATUS "hip::amdhip64 is ${amdhip64_type}") - - if(NOT WIN32) - set_target_properties(hip::device PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" - INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" - ) - endif() -endif() - -if(HIP_COMPILER STREQUAL "clang") - get_property(compilePropIsSet TARGET hip::device PROPERTY INTERFACE_COMPILE_OPTIONS SET) - - if (NOT compilePropIsSet AND HIP_CXX_COMPILER MATCHES ".*clang\\+\\+") - hip_add_interface_compile_flags(hip::device -mllvm -amdgpu-early-inline-all=true -mllvm -amdgpu-function-calls=false) - endif() - - if (NOT compilePropIsSet) - hip_add_interface_compile_flags(hip::device -x hip) - endif() - - hip_add_interface_link_flags(hip::device --hip-link) - - foreach(GPU_TARGET ${GPU_TARGETS}) - if (NOT compilePropIsSet) - hip_add_interface_compile_flags(hip::device --offload-arch=${GPU_TARGET}) - endif() - hip_add_interface_link_flags(hip::device --offload-arch=${GPU_TARGET}) - endforeach() - #Add support for parallel build and link - if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") - check_cxx_compiler_flag("-parallel-jobs=1" HIP_CLANG_SUPPORTS_PARALLEL_JOBS) - endif() - if(HIP_CLANG_NUM_PARALLEL_JOBS GREATER 1) - if(${HIP_CLANG_SUPPORTS_PARALLEL_JOBS} ) - if (NOT compilePropIsSet) - hip_add_interface_compile_flags(hip::device -parallel-jobs=${HIP_CLANG_NUM_PARALLEL_JOBS} -Wno-format-nonliteral) - endif() - hip_add_interface_link_flags(hip::device -parallel-jobs=${HIP_CLANG_NUM_PARALLEL_JOBS}) - else() - message("clang compiler doesn't support parallel jobs") - endif() - endif() - - - # Use HIP_CXX option -print-libgcc-file-name --rtlib=compiler-rt - # To fetch the compiler rt library file name. - execute_process( - COMMAND ${HIP_CXX_COMPILER} -print-libgcc-file-name --rtlib=compiler-rt - OUTPUT_VARIABLE CLANGRT_BUILTINS - ERROR_VARIABLE CLANGRT_Error - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE - RESULT_VARIABLE CLANGRT_BUILTINS_FETCH_EXIT_CODE) - - if( CLANGRT_Error ) - message( STATUS "${HIP_CXX_COMPILER}: CLANGRT compiler options not supported.") - else() - # Add support for __fp16 and _Float16, explicitly link with compiler-rt - if( "${CLANGRT_BUILTINS_FETCH_EXIT_CODE}" STREQUAL "0" ) - # CLANG_RT Builtins found Successfully Set interface link libraries property - set_property(TARGET hip::host APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${CLANGRT_BUILTINS}") - set_property(TARGET hip::device APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${CLANGRT_BUILTINS}") - else() - message(STATUS "clangrt builtins lib not found: ${CLANGRT_BUILTINS_FETCH_EXIT_CODE}") - endif() # CLANGRT_BUILTINS_FETCH_EXIT_CODE Check - endif() # CLANGRT_Error Check -endif() # HIP_COMPILER Check +@PLATFORM_CONFIG@ set( hip_LIBRARIES hip::host hip::device) set( hip_LIBRARY ${hip_LIBRARIES}) diff --git a/hipamd/hip-nvidia-config.cmake b/hipamd/hip-nvidia-config.cmake new file mode 100755 index 0000000000..37a9c635ee --- /dev/null +++ b/hipamd/hip-nvidia-config.cmake @@ -0,0 +1,4 @@ +# NVIDIA-specific configuration ### +add_library(hip::device INTERFACE IMPORTED) +add_library(hip::host INTERFACE IMPORTED) +add_library(hip::amdhip64 INTERFACE IMPORTED)