set(LLVM_OPTIONAL_SOURCES mlir-vulkan-runner.cpp vulkan-runtime-wrappers.cpp VulkanRuntime.cpp VulkanRuntime.h ) if (MLIR_ENABLE_VULKAN_RUNNER) message(STATUS "Building the Vulkan runner") find_package(Vulkan) # If Vulkan is not found try a path specified by VULKAN_SDK. if (NOT Vulkan_FOUND) if ("$ENV{VULKAN_SDK}" STREQUAL "") message(FATAL_ERROR "Vulkan not found through CMake; please provide " "VULKAN_SDK path as an environment variable") endif() find_library(Vulkan_LIBRARY vulkan HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED) if (Vulkan_LIBRARY) set(Vulkan_FOUND ON) set(Vulkan_INCLUDE_DIR "$ENV{VULKAN_SDK}/include") message(STATUS "Found Vulkan: " ${Vulkan_LIBRARY}) endif() endif() if (NOT Vulkan_FOUND) message(FATAL_ERROR "Cannot find Vulkan library") endif() add_llvm_library(vulkan-runtime-wrappers SHARED vulkan-runtime-wrappers.cpp VulkanRuntime.cpp ) target_include_directories(vulkan-runtime-wrappers PUBLIC ${Vulkan_INCLUDE_DIR} ) # *IMPORTANT*: This library cannot depend on LLVM libraries. Otherwise, # it may cause LLVM version conflict when used together with other shared # libraries depending on LLVM. Notably, Mesa, who implements Vulkan # drivers on Linux, depends on the system libLLVM.so. target_link_libraries(vulkan-runtime-wrappers PUBLIC ${Vulkan_LIBRARY} ) get_property(conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS) set(LIBS ${conversion_libs} MLIRAnalysis MLIRArithDialect MLIRBuiltinToLLVMIRTranslation MLIRExecutionEngine MLIRFuncDialect MLIRGPUDialect MLIRIR MLIRJitRunner MLIRLLVMDialect MLIRLLVMCommonConversion MLIRLLVMToLLVMIRTranslation MLIRMemRefDialect MLIRMemRefToLLVM MLIRParser MLIRSPIRVDialect MLIRSPIRVTransforms MLIRSupport MLIRTargetLLVMIRExport MLIRTransforms MLIRTranslateLib MLIRVectorDialect MLIRVectorToLLVMPass ${Vulkan_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) # 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_mlir_tool(mlir-vulkan-runner mlir-vulkan-runner.cpp DEPENDS vulkan-runtime-wrappers ) llvm_update_compile_flags(mlir-vulkan-runner) target_link_libraries(mlir-vulkan-runner PRIVATE ${LIBS}) endif()