1# Exclude these from libMLIR.so because the JIT infrastructure 2# is a big dependency which most don't need. 3 4set(LLVM_OPTIONAL_SOURCES 5 AsyncRuntime.cpp 6 CRunnerUtils.cpp 7 CudaRuntimeWrappers.cpp 8 SparseTensorRuntime.cpp 9 ExecutionEngine.cpp 10 Float16bits.cpp 11 RocmRuntimeWrappers.cpp 12 RunnerUtils.cpp 13 OptUtils.cpp 14 JitRunner.cpp 15 SyclRuntimeWrappers.cpp 16 ) 17 18# Use a separate library for OptUtils, to avoid pulling in the entire JIT and 19# codegen infrastructure. Unlike MLIRExecutionEngine, this is part of 20# libMLIR.so. 21add_mlir_library(MLIRExecutionEngineUtils 22 OptUtils.cpp 23 24 ADDITIONAL_HEADER_DIRS 25 ${MLIR_MAIN_INCLUDE_DIR}/mlir/ExecutionEngine 26 27 DEPENDS 28 intrinsics_gen 29 30 LINK_COMPONENTS 31 Analysis 32 Core 33 Coroutines 34 AggressiveInstCombine 35 InstCombine 36 ScalarOpts 37 Vectorize 38 TransformUtils 39 IPO 40 Passes 41 TargetParser 42 ) 43 44if(NOT MLIR_ENABLE_EXECUTION_ENGINE) 45 return() 46endif() 47 48if(LLVM_USE_INTEL_JITEVENTS) 49 set(LLVM_JIT_LISTENER_LIB 50 IntelJITEvents) 51endif(LLVM_USE_INTEL_JITEVENTS) 52 53if(LLVM_USE_PERF) 54 set(LLVM_JIT_LISTENER_LIB 55 PerfJITEvents) 56endif(LLVM_USE_PERF) 57 58add_mlir_library(MLIRExecutionEngine 59 ExecutionEngine.cpp 60 61 EXCLUDE_FROM_LIBMLIR 62 63 ADDITIONAL_HEADER_DIRS 64 ${MLIR_MAIN_INCLUDE_DIR}/mlir/ExecutionEngine 65 66 DEPENDS 67 intrinsics_gen 68 69 LINK_COMPONENTS 70 Core 71 Coroutines 72 ExecutionEngine 73 Object 74 OrcJIT 75 JITLink 76 Analysis 77 AggressiveInstCombine 78 InstCombine 79 MC 80 ScalarOpts 81 Target 82 Vectorize 83 TransformUtils 84 nativecodegen 85 IPO 86 Passes 87 ${LLVM_JIT_LISTENER_LIB} 88 89 LINK_LIBS PUBLIC 90 MLIRBuiltinToLLVMIRTranslation 91 MLIRExecutionEngineUtils 92 MLIRLLVMDialect 93 MLIRLLVMToLLVMIRTranslation 94 MLIROpenMPToLLVMIRTranslation 95 MLIRTargetLLVMIRExport 96 ) 97 98get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) 99add_mlir_library(MLIRJitRunner 100 JitRunner.cpp 101 102 EXCLUDE_FROM_LIBMLIR 103 104 DEPENDS 105 intrinsics_gen 106 107 LINK_COMPONENTS 108 Core 109 OrcJIT 110 JITLink 111 112 LINK_LIBS PUBLIC 113 ${dialect_libs} 114 MLIRExecutionEngine 115 MLIRFuncDialect 116 MLIRFuncToLLVM 117 MLIRIR 118 MLIRParser 119 MLIRLLVMToLLVMIRTranslation 120 MLIRTargetLLVMIRExport 121 MLIRTransforms 122 MLIRSupport 123) 124 125# When -fPIC is not provided, shared libraries cannot be built if it links against 126# non-PIC code. 127if(LLVM_ENABLE_PIC) 128 add_mlir_library(mlir_float16_utils 129 SHARED 130 Float16bits.cpp 131 132 EXCLUDE_FROM_LIBMLIR 133 ) 134 set_property(TARGET mlir_float16_utils PROPERTY CXX_STANDARD 17) 135 target_compile_definitions(mlir_float16_utils PRIVATE mlir_float16_utils_EXPORTS) 136 137 add_subdirectory(SparseTensor) 138 139 add_mlir_library(mlir_c_runner_utils 140 SHARED 141 CRunnerUtils.cpp 142 SparseTensorRuntime.cpp 143 144 EXCLUDE_FROM_LIBMLIR 145 146 LINK_LIBS PUBLIC 147 mlir_float16_utils 148 MLIRSparseTensorEnums 149 MLIRSparseTensorRuntime 150 ) 151 set_property(TARGET mlir_c_runner_utils PROPERTY CXX_STANDARD 17) 152 target_compile_definitions(mlir_c_runner_utils PRIVATE mlir_c_runner_utils_EXPORTS) 153 154 add_mlir_library(mlir_runner_utils 155 SHARED 156 RunnerUtils.cpp 157 158 EXCLUDE_FROM_LIBMLIR 159 ) 160 target_compile_definitions(mlir_runner_utils PRIVATE mlir_runner_utils_EXPORTS) 161 162 add_mlir_library(mlir_async_runtime 163 SHARED 164 AsyncRuntime.cpp 165 166 EXCLUDE_FROM_LIBMLIR 167 168 LINK_LIBS PUBLIC 169 ${LLVM_PTHREAD_LIB} 170 ) 171 set_property(TARGET mlir_async_runtime PROPERTY CXX_VISIBILITY_PRESET hidden) 172 target_compile_definitions(mlir_async_runtime PRIVATE mlir_async_runtime_EXPORTS) 173 if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 174 # Don't export symbols from link-time dependencies, these are internal 175 # implementation details. 176 # FIXME: Add a similar fix for Windows. 177 target_link_options(mlir_async_runtime PRIVATE "-Wl,-exclude-libs,ALL") 178 endif() 179 180 if(MLIR_ENABLE_CUDA_RUNNER) 181 # Configure CUDA support. Using check_language first allows us to give a 182 # custom error message. 183 include(CheckLanguage) 184 check_language(CUDA) 185 if (CMAKE_CUDA_COMPILER) 186 enable_language(CUDA) 187 else() 188 message(SEND_ERROR 189 "Building the mlir cuda runner requires a working CUDA install") 190 endif() 191 192 # We need the libcuda.so library. 193 find_library(CUDA_RUNTIME_LIBRARY cuda HINTS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES} REQUIRED) 194 195 add_mlir_library(mlir_cuda_runtime 196 SHARED 197 CudaRuntimeWrappers.cpp 198 199 EXCLUDE_FROM_LIBMLIR 200 ) 201 set_property(TARGET mlir_cuda_runtime PROPERTY CXX_STANDARD 14) 202 203 target_include_directories(mlir_cuda_runtime 204 PRIVATE 205 ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} 206 ) 207 target_link_libraries(mlir_cuda_runtime 208 PRIVATE 209 ${CUDA_RUNTIME_LIBRARY} 210 ) 211 212 if(MLIR_ENABLE_CUDA_CUSPARSE) 213 # Find the libcusparse.so library if CUSPARSE build is requested. 214 find_library(CUDA_CUSPARSE_LIBRARY cusparse HINTS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES} REQUIRED) 215 216 target_link_libraries(mlir_cuda_runtime 217 PRIVATE 218 ${CUDA_CUSPARSE_LIBRARY} 219 ) 220 target_compile_definitions(mlir_cuda_runtime 221 PRIVATE 222 MLIR_ENABLE_CUDA_CUSPARSE=1 223 ) 224 225 if(MLIR_ENABLE_CUDA_CUSPARSELT) 226 # Find the libcusparseLt.so library in package manager default path if 227 # CUSPARSELT build is requested. libcusparseLt.so provides sm80+ tensor 228 # core support for 2:4 sparsity acceleration. 229 find_library(CUDA_CUSPARSELT_LIBRARY cusparseLt HINTS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES} REQUIRED) 230 find_path(CUDA_CUSPARSELT_HEADER cusparseLt.h HINTS ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} REQUIRED) 231 target_include_directories(mlir_cuda_runtime 232 PRIVATE 233 ${CUDA_CUSPARSELT_HEADER} 234 ) 235 target_link_libraries(mlir_cuda_runtime 236 PRIVATE 237 ${CUDA_CUSPARSELT_LIBRARY} 238 ) 239 target_compile_definitions(mlir_cuda_runtime 240 PRIVATE 241 MLIR_ENABLE_CUDA_CUSPARSELT=1 242 ) 243 endif() 244 endif() 245 endif() 246 247 if(MLIR_ENABLE_ROCM_RUNNER) 248 # Configure ROCm support. 249 if (NOT DEFINED ROCM_PATH) 250 if (NOT DEFINED ENV{ROCM_PATH}) 251 set(ROCM_PATH "/opt/rocm" CACHE PATH "Path to which ROCm has been installed") 252 else() 253 set(ROCM_PATH $ENV{ROCM_PATH} CACHE PATH "Path to which ROCm has been installed") 254 endif() 255 endif() 256 # A lot of the ROCm CMake files expect to find their own dependencies in 257 # CMAKE_PREFIX_PATH and don't respect PATHS or HINTS :( . 258 # Therefore, temporarily add the ROCm path to CMAKE_PREFIX_PATH so we can 259 # load HIP, then remove it 260 set(REAL_CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}") 261 list(APPEND CMAKE_PREFIX_PATH ${ROCM_PATH} "${ROCM_PATH}/hip") 262 find_package(hip REQUIRED) 263 set(CMAKE_PREFIX_PATH "${REAL_CMAKE_PREFIX_PATH}") 264 265 if (NOT DEFINED ROCM_TEST_CHIPSET) 266 find_program(ROCM_AGENT_ENUMERATOR rocm_agent_enumerator "${ROCM_PATH}/bin" /usr/bin /usr/local/bin) 267 if(ROCM_AGENT_ENUMERATOR) 268 execute_process(COMMAND "${ROCM_AGENT_ENUMERATOR}" 269 OUTPUT_VARIABLE AGENTS_STRING 270 ERROR_VARIABLE AGENTS_STRING 271 RESULT_VARIABLE AGENT_ENUMERATOR_RESULT) 272 else() 273 message(SEND_ERROR "Could not find rocm_agent_enumerator") 274 endif() 275 if (NOT AGENT_ENUMERATOR_RESULT EQUAL 0) 276 message(SEND_ERROR "Could not run rocm_agent_enumerator and ROCM_TEST_CHIPSET is not defined") 277 set(AGENTS_STRING "") 278 endif() 279 string(STRIP AGENTS_STRING ${AGENTS_STRING}) 280 string(REPLACE "\n" ";" AGENTS_LIST ${AGENTS_STRING}) 281 list(FILTER AGENTS_LIST EXCLUDE REGEX "gfx000") 282 if (AGENTS_LIST STREQUAL "") 283 message(SEND_ERROR "No non-CPU ROCm agents found on the system, and ROCM_TEST_CHIPSET is not defined") 284 else() 285 list(GET AGENTS_LIST 0 FIRST_AGENT) 286 set(ROCM_TEST_CHIPSET ${FIRST_AGENT} CACHE STRING "Chipset for which to compile ROCm integration tests") 287 message(STATUS "Compiling integration tests for ${ROCM_TEST_CHIPSET}") 288 endif() 289 endif() 290 291 add_mlir_library(mlir_rocm_runtime 292 SHARED 293 RocmRuntimeWrappers.cpp 294 295 EXCLUDE_FROM_LIBMLIR 296 ) 297 298 # Supress compiler warnings from HIP headers 299 check_cxx_compiler_flag(-Wno-c++98-compat-extra-semi 300 CXX_SUPPORTS_NO_CXX98_COMPAT_EXTRA_SEMI_FLAG) 301 if (CXX_SUPPORTS_CXX98_COMPAT_EXTRA_SEMI_FLAG) 302 target_compile_options(mlir_rocm_runtime PRIVATE 303 "-Wno-c++98-compat-extra-semi") 304 endif() 305 check_cxx_compiler_flag(-Wno-return-type-c-linkage 306 CXX_SUPPORTS_WNO_RETURN_TYPE_C_LINKAGE_FLAG) 307 if (CXX_SUPPORTS_WNO_RETURN_TYPE_C_LINKAGE_FLAG) 308 target_compile_options(mlir_rocm_runtime PRIVATE 309 "-Wno-return-type-c-linkage") 310 endif() 311 check_cxx_compiler_flag(-Wno-nested-anon-types 312 CXX_SUPPORTS_WNO_NESTED_ANON_TYPES_FLAG) 313 if (CXX_SUPPORTS_WNO_NESTED_ANON_TYPES_FLAG) 314 target_compile_options(mlir_rocm_runtime PRIVATE 315 "-Wno-nested-anon-types") 316 endif() 317 check_cxx_compiler_flag(-Wno-gnu-anonymous-struct 318 CXX_SUPPORTS_WNO_GNU_ANONYMOUS_STRUCT_FLAG) 319 if (CXX_SUPPORTS_WNO_GNU_ANONYMOUS_STRUCT_FLAG) 320 target_compile_options(mlir_rocm_runtime PRIVATE 321 "-Wno-gnu-anonymous-struct") 322 endif() 323 324 set_property(TARGET mlir_rocm_runtime 325 PROPERTY INSTALL_RPATH_USE_LINK_PATH ON) 326 327 target_link_libraries(mlir_rocm_runtime 328 PUBLIC 329 hip::host hip::amdhip64 330 ) 331 endif() 332 333 if(MLIR_ENABLE_SYCL_RUNNER) 334 find_package(SyclRuntime) 335 336 if(NOT SyclRuntime_FOUND) 337 message(FATAL_ERROR "syclRuntime not found. Please set check oneapi installation and run setvars.sh.") 338 endif() 339 340 find_package(LevelZero) 341 342 if(NOT LevelZero_FOUND) 343 message(FATAL_ERROR "LevelZero not found. Please set LEVEL_ZERO_DIR.") 344 endif() 345 346 add_mlir_library(mlir_sycl_runtime 347 SHARED 348 SyclRuntimeWrappers.cpp 349 350 EXCLUDE_FROM_LIBMLIR 351 ) 352 353 check_cxx_compiler_flag("-frtti" CXX_HAS_FRTTI_FLAG) 354 if(NOT CXX_HAS_FRTTI_FLAG) 355 message(FATAL_ERROR "CXX compiler does not accept flag -frtti") 356 endif() 357 target_compile_options (mlir_sycl_runtime PUBLIC -fexceptions -frtti) 358 359 target_include_directories(mlir_sycl_runtime PRIVATE 360 ${MLIR_INCLUDE_DIRS} 361 ) 362 363 target_link_libraries(mlir_sycl_runtime PRIVATE LevelZero::LevelZero SyclRuntime::SyclRuntime) 364 365 set_property(TARGET mlir_sycl_runtime APPEND PROPERTY BUILD_RPATH "${LevelZero_LIBRARIES_DIR}" "${SyclRuntime_LIBRARIES_DIR}") 366 endif() 367endif() 368