if (MLIR_ENABLE_CUDA_CONVERSIONS) set(NVPTX_LIBS NVPTXCodeGen NVPTXDesc NVPTXInfo ) endif() if (MLIR_ENABLE_ROCM_CONVERSIONS) set(AMDGPU_LIBS IRReader linker MCParser AMDGPUAsmParser AMDGPUCodeGen AMDGPUDesc AMDGPUInfo target ) endif() add_mlir_dialect_library(MLIRGPUOps IR/GPUDialect.cpp ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/GPU DEPENDS MLIRGPUOpsIncGen MLIRGPUOpsEnumsGen MLIRGPUOpInterfacesIncGen LINK_LIBS PUBLIC MLIRArithmetic MLIRDLTI MLIRIR MLIRMemRef MLIRSideEffectInterfaces MLIRSupport MLIRLLVMIR ) add_mlir_dialect_library(MLIRGPUTransforms Transforms/AllReduceLowering.cpp Transforms/AsyncRegionRewriter.cpp Transforms/KernelOutlining.cpp Transforms/MemoryPromotion.cpp Transforms/ParallelLoopMapper.cpp Transforms/SerializeToBlob.cpp Transforms/SerializeToCubin.cpp Transforms/SerializeToHsaco.cpp ADDITIONAL_HEADER_DIRS ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/GPU LINK_COMPONENTS Core MC ${NVPTX_LIBS} ${AMDGPU_LIBS} DEPENDS MLIRGPUPassIncGen MLIRParallelLoopMapperAttrGen MLIRParallelLoopMapperEnumsGen LINK_LIBS PUBLIC MLIRArithmetic MLIRAsync MLIRDataLayoutInterfaces MLIRGPUOps MLIRIR MLIRLLVMIR MLIRLLVMToLLVMIRTranslation MLIRMemRef MLIRPass MLIRSCF MLIRStandard MLIRSupport MLIRTransformUtils ) if(MLIR_ENABLE_CUDA_RUNNER) if(NOT MLIR_ENABLE_CUDA_CONVERSIONS) message(SEND_ERROR "Building mlir with cuda support requires the NVPTX backend") endif() # Configure CUDA language support. Using check_language first allows us to # give a custom error message. include(CheckLanguage) check_language(CUDA) if (CMAKE_CUDA_COMPILER) enable_language(CUDA) else() message(SEND_ERROR "Building mlir with cuda support requires a working CUDA install") endif() # Enable gpu-to-cubin pass. target_compile_definitions(obj.MLIRGPUTransforms PRIVATE MLIR_GPU_TO_CUBIN_PASS_ENABLE=1 ) # Add CUDA headers includes and the libcuda.so library. target_include_directories(obj.MLIRGPUTransforms PRIVATE ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} ) find_library(CUDA_DRIVER_LIBRARY cuda) target_link_libraries(MLIRGPUTransforms PRIVATE MLIRNVVMToLLVMIRTranslation ${CUDA_DRIVER_LIBRARY} ) endif() if(MLIR_ENABLE_ROCM_RUNNER) if (NOT ("AMDGPU" IN_LIST LLVM_TARGETS_TO_BUILD)) message(SEND_ERROR "Building mlir with ROCm support 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() set(DEFAULT_ROCM_PATH "/opt/rocm" CACHE PATH "Fallback path to search for ROCm installs") target_compile_definitions(obj.MLIRGPUTransforms PRIVATE __DEFAULT_ROCM_PATH__="${DEFAULT_ROCM_PATH}" MLIR_GPU_TO_HSACO_PASS_ENABLE=1 ) target_include_directories(obj.MLIRGPUTransforms PRIVATE ${MLIR_SOURCE_DIR}/../lld/include ) target_link_libraries(MLIRGPUOps PRIVATE lldELF MLIRExecutionEngine MLIRROCDLToLLVMIRTranslation ) # Link lldELF also to libmlir.so. Create an alias that starts with LLVM # because LINK_COMPONENTS elements are implicitly prefixed with LLVM. add_library(LLVMAliasTolldELF ALIAS lldELF) set_property(GLOBAL APPEND PROPERTY MLIR_LLVM_LINK_COMPONENTS AliasTolldELF) endif()