| # Copyright 2024 The IREE Authors |
| # |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| if((NOT IREE_TARGET_BACKEND_ROCM) OR |
| (NOT "rocm" IN_LIST IREE_EXTERNAL_HAL_DRIVERS)) |
| return() |
| endif() |
| |
| if(NOT IREE_ROCM_PATH) |
| message(WARNING "IREE_ROCM_PATH not specified; skipping custom_dispatch/hip/kernels sample") |
| return() |
| endif() |
| |
| # NOTE: this is not how one should actually build their HSACO files. Do not use |
| # this as an authoritative source for compilation settings or CMake goo. If you |
| # choose to go the route of custom CUDA kernels you must bring your own build |
| # infrastructure. This sample only demonstrates how to use compiled HSACO blobs |
| # inside of the IREE compiler and this is the minimum amount of hacking that |
| # could be done to do that. |
| |
| # Builds a HSACO blob using the clang built by IREE from tip-of-tree LLVM. |
| function(hip_kernel_hsaco_clang _ARCH) |
| set(_NAME iree_samples_custom_dispatch_hip_kernels_hsaco_${_ARCH}) |
| set(_HSACO_SRC_NAME "kernels.cu") |
| get_filename_component(_HSACO_SRC_BASENAME ${_HSACO_SRC_NAME} NAME_WE CACHE) |
| set(_HSACO_OBJ_NAME "${_HSACO_SRC_BASENAME}_${_ARCH}.co") |
| add_custom_command( |
| OUTPUT |
| ${_HSACO_OBJ_NAME} |
| DEPENDS |
| ${_HSACO_SRC_NAME} |
| ${IREE_CLANG_TARGET} |
| COMMAND ${IREE_CLANG_BINARY} |
| -x hip |
| --offload-device-only |
| --offload-arch=${_ARCH} |
| --rocm-path=${IREE_ROCM_PATH} |
| -fuse-cuid=none |
| -O3 |
| ${CMAKE_CURRENT_SOURCE_DIR}/${_HSACO_SRC_NAME} |
| -o ${CMAKE_CURRENT_BINARY_DIR}/${_HSACO_OBJ_NAME} |
| VERBATIM |
| ) |
| add_custom_target(${_NAME} DEPENDS |
| ${CMAKE_CURRENT_BINARY_DIR}/${_HSACO_OBJ_NAME} |
| ) |
| add_dependencies(iree-sample-deps "${_NAME}") |
| endfunction() |
| |
| # Build the kernels_*.co files for each architecture we target. |
| hip_kernel_hsaco_clang(gfx1100) |
| |
| iree_lit_test_suite( |
| NAME |
| example |
| SRCS |
| "example.mlir" |
| TOOLS |
| FileCheck |
| iree-compile |
| iree-run-module |
| LABELS |
| "driver=hip" |
| "hostonly" |
| ) |