| # Exclude these from libMLIR.so because the JIT infrastructure |
| # is a big dependency which most don't need. |
| |
| set(LLVM_OPTIONAL_SOURCES |
| ArmRunnerUtils.cpp |
| ArmSMEStubs.cpp |
| AsyncRuntime.cpp |
| CRunnerUtils.cpp |
| CudaRuntimeWrappers.cpp |
| SparseTensorRuntime.cpp |
| ExecutionEngine.cpp |
| Float16bits.cpp |
| RocmRuntimeWrappers.cpp |
| RunnerUtils.cpp |
| OptUtils.cpp |
| JitRunner.cpp |
| SyclRuntimeWrappers.cpp |
| ) |
| |
| # Use a separate library for OptUtils, to avoid pulling in the entire JIT and |
| # codegen infrastructure. Unlike MLIRExecutionEngine, this is part of |
| # libMLIR.so. |
| add_mlir_library(MLIRExecutionEngineUtils |
| OptUtils.cpp |
| |
| ADDITIONAL_HEADER_DIRS |
| ${MLIR_MAIN_INCLUDE_DIR}/mlir/ExecutionEngine |
| |
| DEPENDS |
| intrinsics_gen |
| |
| LINK_COMPONENTS |
| Analysis |
| Core |
| Coroutines |
| AggressiveInstCombine |
| InstCombine |
| ScalarOpts |
| Vectorize |
| TransformUtils |
| IPO |
| Passes |
| TargetParser |
| ) |
| |
| if(NOT MLIR_ENABLE_EXECUTION_ENGINE) |
| return() |
| endif() |
| |
| if(LLVM_USE_INTEL_JITEVENTS) |
| set(LLVM_JIT_LISTENER_LIB |
| IntelJITEvents) |
| endif(LLVM_USE_INTEL_JITEVENTS) |
| |
| if(LLVM_USE_PERF) |
| set(LLVM_JIT_LISTENER_LIB |
| PerfJITEvents) |
| endif(LLVM_USE_PERF) |
| |
| add_mlir_library(MLIRExecutionEngine |
| ExecutionEngine.cpp |
| |
| EXCLUDE_FROM_LIBMLIR |
| |
| ADDITIONAL_HEADER_DIRS |
| ${MLIR_MAIN_INCLUDE_DIR}/mlir/ExecutionEngine |
| |
| DEPENDS |
| intrinsics_gen |
| |
| LINK_COMPONENTS |
| Core |
| Coroutines |
| ExecutionEngine |
| Object |
| OrcJIT |
| JITLink |
| Analysis |
| AggressiveInstCombine |
| InstCombine |
| MC |
| ScalarOpts |
| Target |
| Vectorize |
| TransformUtils |
| nativecodegen |
| IPO |
| Passes |
| ${LLVM_JIT_LISTENER_LIB} |
| |
| LINK_LIBS PUBLIC |
| MLIRBuiltinToLLVMIRTranslation |
| MLIRExecutionEngineUtils |
| MLIRLLVMDialect |
| MLIRLLVMToLLVMIRTranslation |
| MLIROpenMPToLLVMIRTranslation |
| MLIRTargetLLVMIRExport |
| ) |
| |
| if(LLVM_BUILD_LLVM_DYLIB) |
| # Build a shared library for the execution engine. Some downstream projects |
| # use this library to build their own CPU runners while preserving dynamic |
| # linkage. |
| add_mlir_library(MLIRExecutionEngineShared |
| ExecutionEngine.cpp |
| SHARED |
| |
| EXCLUDE_FROM_LIBMLIR |
| |
| ADDITIONAL_HEADER_DIRS |
| ${MLIR_MAIN_INCLUDE_DIR}/mlir/ExecutionEngine |
| |
| # Ensures that all necessary dependencies are resolved. |
| DEPENDS |
| MLIRExecutionEngine |
| |
| LINK_LIBS PUBLIC |
| LLVM |
| MLIR |
| ) |
| endif() |
| |
| get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) |
| add_mlir_library(MLIRJitRunner |
| JitRunner.cpp |
| |
| EXCLUDE_FROM_LIBMLIR |
| |
| DEPENDS |
| intrinsics_gen |
| |
| LINK_COMPONENTS |
| Core |
| OrcJIT |
| JITLink |
| |
| LINK_LIBS PUBLIC |
| ${dialect_libs} |
| MLIRExecutionEngine |
| MLIRFuncDialect |
| MLIRFuncToLLVM |
| MLIRIR |
| MLIRParser |
| MLIRLLVMToLLVMIRTranslation |
| MLIRTargetLLVMIRExport |
| MLIRTransforms |
| MLIRSupport |
| ) |
| |
| # When -fPIC is not provided, shared libraries cannot be built if it links against |
| # non-PIC code. |
| if(LLVM_ENABLE_PIC) |
| add_mlir_library(mlir_float16_utils |
| SHARED |
| Float16bits.cpp |
| |
| EXCLUDE_FROM_LIBMLIR |
| ) |
| set_property(TARGET mlir_float16_utils PROPERTY CXX_STANDARD 17) |
| target_compile_definitions(mlir_float16_utils PRIVATE mlir_float16_utils_EXPORTS) |
| |
| add_subdirectory(SparseTensor) |
| |
| add_mlir_library(mlir_c_runner_utils |
| SHARED |
| CRunnerUtils.cpp |
| SparseTensorRuntime.cpp |
| |
| EXCLUDE_FROM_LIBMLIR |
| |
| LINK_LIBS PUBLIC |
| mlir_float16_utils |
| MLIRSparseTensorEnums |
| MLIRSparseTensorRuntime |
| ) |
| set_property(TARGET mlir_c_runner_utils PROPERTY CXX_STANDARD 17) |
| target_compile_definitions(mlir_c_runner_utils PRIVATE mlir_c_runner_utils_EXPORTS) |
| |
| add_mlir_library(mlir_runner_utils |
| SHARED |
| RunnerUtils.cpp |
| |
| EXCLUDE_FROM_LIBMLIR |
| |
| LINK_LIBS PUBLIC |
| mlir_float16_utils |
| ) |
| target_compile_definitions(mlir_runner_utils PRIVATE mlir_runner_utils_EXPORTS) |
| |
| add_mlir_library(mlir_async_runtime |
| SHARED |
| AsyncRuntime.cpp |
| |
| EXCLUDE_FROM_LIBMLIR |
| |
| LINK_LIBS PUBLIC |
| ${LLVM_PTHREAD_LIB} |
| ) |
| set_property(TARGET mlir_async_runtime PROPERTY CXX_VISIBILITY_PRESET hidden) |
| target_compile_definitions(mlir_async_runtime PRIVATE mlir_async_runtime_EXPORTS) |
| if(CMAKE_SYSTEM_NAME STREQUAL "Linux") |
| # Don't export symbols from link-time dependencies, these are internal |
| # implementation details. |
| # FIXME: Add a similar fix for Windows. |
| target_link_options(mlir_async_runtime PRIVATE "-Wl,-exclude-libs,ALL") |
| endif() |
| |
| add_mlir_library(mlir_arm_sme_abi_stubs |
| SHARED |
| ArmSMEStubs.cpp) |
| target_compile_definitions(mlir_arm_sme_abi_stubs PRIVATE mlir_arm_sme_abi_stubs_EXPORTS) |
| |
| add_mlir_library(mlir_arm_runner_utils |
| SHARED |
| ArmRunnerUtils.cpp) |
| |
| if(MLIR_ENABLE_CUDA_RUNNER) |
| # Configure CUDA 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 the mlir cuda runner requires a working CUDA install") |
| endif() |
| |
| # We need the libcuda.so library. |
| find_library(CUDA_RUNTIME_LIBRARY cuda HINTS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES} REQUIRED) |
| |
| add_mlir_library(mlir_cuda_runtime |
| SHARED |
| CudaRuntimeWrappers.cpp |
| |
| EXCLUDE_FROM_LIBMLIR |
| ) |
| set_property(TARGET mlir_cuda_runtime PROPERTY CXX_STANDARD 14) |
| |
| target_include_directories(mlir_cuda_runtime |
| PRIVATE |
| ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} |
| ) |
| target_link_libraries(mlir_cuda_runtime |
| PRIVATE |
| ${CUDA_RUNTIME_LIBRARY} |
| ) |
| |
| if(MLIR_ENABLE_CUDA_CUSPARSE) |
| # Find the libcusparse.so library if CUSPARSE build is requested. |
| find_library(CUDA_CUSPARSE_LIBRARY cusparse HINTS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES} REQUIRED) |
| |
| target_link_libraries(mlir_cuda_runtime |
| PRIVATE |
| ${CUDA_CUSPARSE_LIBRARY} |
| ) |
| target_compile_definitions(mlir_cuda_runtime |
| PRIVATE |
| MLIR_ENABLE_CUDA_CUSPARSE=1 |
| ) |
| |
| if(MLIR_ENABLE_CUDA_CUSPARSELT) |
| # Find the libcusparseLt.so library in package manager default path if |
| # CUSPARSELT build is requested. libcusparseLt.so provides sm80+ tensor |
| # core support for 2:4 sparsity acceleration. |
| find_library(CUDA_CUSPARSELT_LIBRARY cusparseLt HINTS ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES} REQUIRED) |
| find_path(CUDA_CUSPARSELT_HEADER cusparseLt.h HINTS ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} REQUIRED) |
| target_include_directories(mlir_cuda_runtime |
| PRIVATE |
| ${CUDA_CUSPARSELT_HEADER} |
| ) |
| target_link_libraries(mlir_cuda_runtime |
| PRIVATE |
| ${CUDA_CUSPARSELT_LIBRARY} |
| ) |
| target_compile_definitions(mlir_cuda_runtime |
| PRIVATE |
| MLIR_ENABLE_CUDA_CUSPARSELT=1 |
| ) |
| endif() |
| endif() |
| endif() |
| |
| if(MLIR_ENABLE_ROCM_RUNNER) |
| # 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() |
| endif() |
| # A lot of the ROCm CMake files expect to find their own dependencies in |
| # CMAKE_PREFIX_PATH and don't respect PATHS or HINTS :( . |
| # Therefore, temporarily add the ROCm path to CMAKE_PREFIX_PATH so we can |
| # load HIP, then remove it |
| set(REAL_CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}") |
| list(APPEND CMAKE_PREFIX_PATH ${ROCM_PATH} "${ROCM_PATH}/hip") |
| find_package(hip REQUIRED) |
| set(CMAKE_PREFIX_PATH "${REAL_CMAKE_PREFIX_PATH}") |
| |
| if (NOT DEFINED ROCM_TEST_CHIPSET) |
| find_program(ROCM_AGENT_ENUMERATOR rocm_agent_enumerator "${ROCM_PATH}/bin" /usr/bin /usr/local/bin) |
| if(ROCM_AGENT_ENUMERATOR) |
| execute_process(COMMAND "${ROCM_AGENT_ENUMERATOR}" |
| OUTPUT_VARIABLE AGENTS_STRING |
| ERROR_VARIABLE AGENTS_STRING |
| RESULT_VARIABLE AGENT_ENUMERATOR_RESULT) |
| else() |
| message(SEND_ERROR "Could not find rocm_agent_enumerator") |
| endif() |
| if (NOT AGENT_ENUMERATOR_RESULT EQUAL 0) |
| message(SEND_ERROR "Could not run rocm_agent_enumerator and ROCM_TEST_CHIPSET is not defined") |
| set(AGENTS_STRING "") |
| endif() |
| string(STRIP AGENTS_STRING ${AGENTS_STRING}) |
| string(REPLACE "\n" ";" AGENTS_LIST ${AGENTS_STRING}) |
| list(FILTER AGENTS_LIST EXCLUDE REGEX "gfx000") |
| if (AGENTS_LIST STREQUAL "") |
| message(SEND_ERROR "No non-CPU ROCm agents found on the system, and ROCM_TEST_CHIPSET is not defined") |
| else() |
| list(GET AGENTS_LIST 0 FIRST_AGENT) |
| set(ROCM_TEST_CHIPSET ${FIRST_AGENT} CACHE STRING "Chipset for which to compile ROCm integration tests") |
| message(STATUS "Compiling integration tests for ${ROCM_TEST_CHIPSET}") |
| endif() |
| endif() |
| |
| add_mlir_library(mlir_rocm_runtime |
| SHARED |
| RocmRuntimeWrappers.cpp |
| |
| EXCLUDE_FROM_LIBMLIR |
| ) |
| |
| # Supress compiler warnings from HIP headers |
| check_cxx_compiler_flag(-Wno-c++98-compat-extra-semi |
| CXX_SUPPORTS_NO_CXX98_COMPAT_EXTRA_SEMI_FLAG) |
| if (CXX_SUPPORTS_CXX98_COMPAT_EXTRA_SEMI_FLAG) |
| target_compile_options(mlir_rocm_runtime PRIVATE |
| "-Wno-c++98-compat-extra-semi") |
| endif() |
| check_cxx_compiler_flag(-Wno-return-type-c-linkage |
| CXX_SUPPORTS_WNO_RETURN_TYPE_C_LINKAGE_FLAG) |
| if (CXX_SUPPORTS_WNO_RETURN_TYPE_C_LINKAGE_FLAG) |
| target_compile_options(mlir_rocm_runtime PRIVATE |
| "-Wno-return-type-c-linkage") |
| endif() |
| check_cxx_compiler_flag(-Wno-nested-anon-types |
| CXX_SUPPORTS_WNO_NESTED_ANON_TYPES_FLAG) |
| if (CXX_SUPPORTS_WNO_NESTED_ANON_TYPES_FLAG) |
| target_compile_options(mlir_rocm_runtime PRIVATE |
| "-Wno-nested-anon-types") |
| endif() |
| check_cxx_compiler_flag(-Wno-gnu-anonymous-struct |
| CXX_SUPPORTS_WNO_GNU_ANONYMOUS_STRUCT_FLAG) |
| if (CXX_SUPPORTS_WNO_GNU_ANONYMOUS_STRUCT_FLAG) |
| target_compile_options(mlir_rocm_runtime PRIVATE |
| "-Wno-gnu-anonymous-struct") |
| endif() |
| |
| set_property(TARGET mlir_rocm_runtime |
| PROPERTY INSTALL_RPATH_USE_LINK_PATH ON) |
| |
| target_link_libraries(mlir_rocm_runtime |
| PUBLIC |
| hip::host hip::amdhip64 |
| ) |
| endif() |
| |
| if(MLIR_ENABLE_SYCL_RUNNER) |
| find_package(SyclRuntime) |
| |
| if(NOT SyclRuntime_FOUND) |
| message(FATAL_ERROR "syclRuntime not found. Please set check oneapi installation and run setvars.sh.") |
| endif() |
| |
| find_package(LevelZero) |
| |
| if(NOT LevelZero_FOUND) |
| message(FATAL_ERROR "LevelZero not found. Please set LEVEL_ZERO_DIR.") |
| endif() |
| |
| add_mlir_library(mlir_sycl_runtime |
| SHARED |
| SyclRuntimeWrappers.cpp |
| |
| EXCLUDE_FROM_LIBMLIR |
| ) |
| |
| check_cxx_compiler_flag("-frtti" CXX_HAS_FRTTI_FLAG) |
| if(NOT CXX_HAS_FRTTI_FLAG) |
| message(FATAL_ERROR "CXX compiler does not accept flag -frtti") |
| endif() |
| target_compile_options (mlir_sycl_runtime PUBLIC -fexceptions -frtti) |
| |
| target_include_directories(mlir_sycl_runtime PRIVATE |
| ${MLIR_INCLUDE_DIRS} |
| ) |
| |
| target_link_libraries(mlir_sycl_runtime PRIVATE LevelZero::LevelZero SyclRuntime::SyclRuntime) |
| |
| set_property(TARGET mlir_sycl_runtime APPEND PROPERTY BUILD_RPATH "${LevelZero_LIBRARIES_DIR}" "${SyclRuntime_LIBRARIES_DIR}") |
| endif() |
| endif() |