diff options
Diffstat (limited to 'build_files/cmake')
-rw-r--r-- | build_files/cmake/Modules/FindHIP.cmake | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/build_files/cmake/Modules/FindHIP.cmake b/build_files/cmake/Modules/FindHIP.cmake new file mode 100644 index 00000000000..c68d78e5796 --- /dev/null +++ b/build_files/cmake/Modules/FindHIP.cmake @@ -0,0 +1,79 @@ +# - Find HIP compiler +# +# This module defines +# HIP_HIPCC_EXECUTABLE, the full path to the hipcc executable +# HIP_VERSION, the HIP compiler version +# +# HIP_FOUND, if the HIP toolkit is found. + +#============================================================================= +# Copyright 2021 Blender Foundation. +# +# Distributed under the OSI-approved BSD 3-Clause License, +# see accompanying file BSD-3-Clause-license.txt for details. +#============================================================================= + +# If HIP_ROOT_DIR was defined in the environment, use it. +if(NOT HIP_ROOT_DIR AND NOT $ENV{HIP_ROOT_DIR} STREQUAL "") + set(HIP_ROOT_DIR $ENV{HIP_ROOT_DIR}) +endif() + +set(_hip_SEARCH_DIRS + ${HIP_ROOT_DIR} +) + +find_program(HIP_HIPCC_EXECUTABLE + NAMES + hipcc + HINTS + ${_hip_SEARCH_DIRS} +) + +if(HIP_HIPCC_EXECUTABLE AND NOT EXISTS ${HIP_HIPCC_EXECUTABLE}) + message(WARNING "Cached or directly specified hipcc executable does not exist.") + set(HIP_FOUND FALSE) +elseif(HIP_HIPCC_EXECUTABLE) + set(HIP_FOUND TRUE) + + set(HIP_VERSION_MAJOR 0) + set(HIP_VERSION_MINOR 0) + set(HIP_VERSION_PATCH 0) + + # Get version from the output. + execute_process(COMMAND ${HIP_HIPCC_EXECUTABLE} --version + OUTPUT_VARIABLE HIP_VERSION_RAW + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # Parse parts. + if(HIP_VERSION_RAW MATCHES "HIP version: .*") + # Strip the HIP prefix and get list of individual version components. + string(REGEX REPLACE + ".*HIP version: ([.0-9]+).*" "\\1" + HIP_SEMANTIC_VERSION "${HIP_VERSION_RAW}") + string(REPLACE "." ";" HIP_VERSION_PARTS "${HIP_SEMANTIC_VERSION}") + list(LENGTH HIP_VERSION_PARTS NUM_HIP_VERSION_PARTS) + + # Extract components into corresponding variables. + if(NUM_HIP_VERSION_PARTS GREATER 0) + list(GET HIP_VERSION_PARTS 0 HIP_VERSION_MAJOR) + endif() + if(NUM_HIP_VERSION_PARTS GREATER 1) + list(GET HIP_VERSION_PARTS 1 HIP_VERSION_MINOR) + endif() + if(NUM_HIP_VERSION_PARTS GREATER 2) + list(GET HIP_VERSION_PARTS 2 HIP_VERSION_PATCH) + endif() + + # Unset temp variables. + unset(NUM_HIP_VERSION_PARTS) + unset(HIP_SEMANTIC_VERSION) + unset(HIP_VERSION_PARTS) + endif() + + # Construct full semantic version. + set(HIP_VERSION "${HIP_VERSION_MAJOR}.${HIP_VERSION_MINOR}.${HIP_VERSION_PATCH}") + unset(HIP_VERSION_RAW) +else() + set(HIP_FOUND FALSE) +endif() |