set(LLVM_OPTIONAL_SOURCES rocm-runtime-wrappers.cpp mlir-rocm-runner.cpp ) if(MLIR_ROCM_RUNNER_ENABLED) if (NOT ("AMDGPU" IN_LIST LLVM_TARGETS_TO_BUILD)) message(SEND_ERROR "Building the mlir rocm runner requires the AMDGPU backend") endif() # Ensure lld is enabled. if (NOT "lld" IN_LIST LLVM_ENABLE_PROJECTS) message(SEND_ERROR "lld is not enabled. Please revise LLVM_ENABLE_PROJECTS") endif() # lld header files. include_directories(${MLIR_SOURCE_DIR}/../lld/include) # Configure ROCm support. if (NOT DEFINED ROCM_PATH) if (NOT DEFINED ENV{ROCM_PATH}) set(ROCM_PATH "/opt/rocm" CACHE PATH "Path to which ROCm has been installed") else() set(ROCM_PATH $ENV{ROCM_PATH} CACHE PATH "Path to which ROCm has been installed") endif() set(HIP_PATH "${ROCM_PATH}/hip" CACHE PATH " Path to which HIP has been installed") endif() set(CMAKE_MODULE_PATH "${HIP_PATH}/cmake" ${CMAKE_MODULE_PATH}) find_package(HIP) if (NOT HIP_FOUND) message(SEND_ERROR "Build the mlir rocm runner requires a working ROCm and HIP install") else() message(STATUS "ROCm HIP version: ${HIP_VERSION}") endif() # Set compile-time flags for ROCm path. add_definitions(-D__ROCM_PATH__="${ROCM_PATH}") # Locate HIP runtime library. find_library(ROCM_RUNTIME_LIBRARY amdhip64 PATHS "${HIP_PATH}/lib") if (NOT ROCM_RUNTIME_LIBRARY) message(SEND_ERROR "Could not locate ROCm HIP runtime library") else() message(STATUS "ROCm HIP runtime lib: ${ROCM_RUNTIME_LIBRARY}") endif() # Set HIP compile-time flags. add_definitions(-D__HIP_PLATFORM_HCC__) add_llvm_library(rocm-runtime-wrappers SHARED rocm-runtime-wrappers.cpp ) target_include_directories(rocm-runtime-wrappers PRIVATE "${HIP_PATH}/../include" "${HIP_PATH}/include" LLVMSupport ) target_link_libraries(rocm-runtime-wrappers PUBLIC LLVMSupport ${ROCM_RUNTIME_LIBRARY} ) get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) get_property(conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS) set(LIBS ${dialect_libs} ${conversion_libs} lldCommon lldDriver lldELF MLIRJitRunner MLIRAnalysis MLIREDSC MLIRExecutionEngine MLIRIR MLIRParser MLIRROCDLIR MLIRSupport MLIRTargetLLVMIR MLIRTargetROCDLIR MLIRTransforms MLIRTranslation ${ROCM_RUNTIME_LIBRARY} ) # Manually expand the target library, since our MLIR libraries # aren't plugged into the LLVM dependency tracking. If we don't # do this then we can't insert the CodeGen library after ourselves llvm_expand_pseudo_components(TARGET_LIBS AllTargetsCodeGens AllTargetsAsmParsers) # Prepend LLVM in front of every target, this is how the library # are named with CMake SET(targets_to_link) FOREACH(t ${TARGET_LIBS}) LIST(APPEND targets_to_link "LLVM${t}") ENDFOREACH(t) add_llvm_tool(mlir-rocm-runner mlir-rocm-runner.cpp DEPENDS rocm-runtime-wrappers LINK_COMPONENTS Core LTO MC MCParser Option Support ) llvm_update_compile_flags(mlir-rocm-runner) target_include_directories(mlir-rocm-runner PRIVATE "${HIP_PATH}/../include" "${HIP_PATH}/include" ) target_link_libraries(mlir-rocm-runner PRIVATE ${LIBS} ${targets_to_link}) endif()