| # Copyright 2019 The IREE Authors | |
| # | |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| # Special case package namespace for tools/ -> "" (empty string) | |
| # For example, tools/iree-compile -> iree-compile (no namespace) | |
| set(IREE_PACKAGE_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}") | |
| # Tools IREE provides for compiling, executing, and benchmarking programs, as | |
| # well as other utilities. | |
| # | |
| # Only binary targets and their associated main files should go in this | |
| # directory. Library targets and header files should be placed in the | |
| # appropriate subtree, e.g. `compiler/src/iree/compiler/Tools/`. | |
| # | |
| # Compiler tools are designed to run on host platforms (Linux, macOS, Windows), | |
| # so they are only built when IREE_BUILD_COMPILER is set and are tagged | |
| # "hostonly". When cross-compiling (or generally wanting to use already-built | |
| # compiler tools), set the IREE_HOST_BIN_DIR CMake option. | |
| # | |
| # This file does not use bazel_to_cmake because of special logic throughout. | |
| # Write some important CMake options to a file for convenient use from scripts. | |
| configure_file(build_config_template.txt.in build_config.txt) | |
| # If cross-compiling and not building the compiler, then attempt to find | |
| # the compiler tools. | |
| # This is actual broken because the situation is tri-state: | |
| # 1. Cross-compiling with no built compiler: Should work the same as | |
| # IREE_BUILD_COMPILER=OFF in a host build (i.e. nothing depending | |
| # on the compiler should be built). | |
| # 2. Cross-compiling with a compiler built for the target: Anything | |
| # on the host which needs the compiler, still must have host tools. | |
| # 3. Normal host build. | |
| # This simplistic setup makes #2 impossible and it overloads #1 to | |
| # also support building things that depend on the compiler. The targets | |
| # need to be aliased/forked for host variants to fully support. For now | |
| # we just make all of these as OPTIONAL and let things break if not set up | |
| # right. | |
| if(IREE_HOST_BIN_DIR AND NOT IREE_BUILD_COMPILER) | |
| iree_import_binary(NAME iree-tblgen OPTIONAL) | |
| iree_import_binary(NAME iree-compile OPTIONAL) | |
| iree_import_binary(NAME iree-link OPTIONAL) | |
| iree_import_binary(NAME iree-opt OPTIONAL) | |
| iree_import_binary(NAME iree-run-mlir OPTIONAL) | |
| iree_import_binary(NAME FileCheck OPTIONAL) | |
| iree_import_binary(NAME not OPTIONAL) | |
| iree_import_binary(NAME clang OPTIONAL) | |
| iree_import_binary(NAME llvm-link OPTIONAL) | |
| endif() | |
| # For sub-directories, we want targets fully qualified relative to the | |
| # root. But after, we want those in *this* directory to be unqualified | |
| # (i.e. 'iree-compile'). | |
| set(IREE_PACKAGE_ROOT_PREFIX "iree/tools") | |
| iree_add_all_subdirs() | |
| set(IREE_PACKAGE_ROOT_PREFIX "") | |
| # TODO(#6353): Tools has thread dependencies in gtest, benchmark, yaml, etc. | |
| # This should be split between runtime/compiler with optional threading support. | |
| if(NOT IREE_ENABLE_THREADING) | |
| return() | |
| endif() | |
| if(IREE_BUILD_BENCHMARKS) | |
| iree_cc_binary( | |
| NAME | |
| iree-benchmark-executable | |
| SRCS | |
| "iree-benchmark-executable-main.c" | |
| DEPS | |
| iree::async::util::proactor_pool | |
| iree::base | |
| iree::base::threading | |
| iree::base::tooling::flags | |
| iree::hal | |
| iree::io::file_handle | |
| iree::modules::hal::types | |
| iree::testing::benchmark | |
| iree::tooling::device_util | |
| iree::tooling::function_io | |
| iree::vm | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-benchmark-module | |
| SRCS | |
| "iree-benchmark-module-main.cc" | |
| DEPS | |
| benchmark | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::hal | |
| iree::hal::replay::recorder | |
| iree::hal::utils::statistics_sink | |
| iree::modules::hal::types | |
| iree::tooling::context_util | |
| iree::tooling::device_util | |
| iree::tooling::function_io | |
| iree::tooling::function_util | |
| iree::tooling::process_results | |
| iree::vm | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| endif() | |
| iree_cc_binary( | |
| NAME | |
| iree-as-module | |
| SRCS | |
| "iree-as-module-main.c" | |
| DEPS | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::io::file_handle | |
| iree::vm::bytecode::assembler | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-check-module | |
| SRCS | |
| "iree-check-module-main.cc" | |
| DEPS | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::hal | |
| iree::hal::replay::recorder | |
| iree::modules::check | |
| iree::testing::gtest | |
| iree::tooling::context_util | |
| iree::tooling::device_util | |
| iree::vm | |
| iree::vm::bytecode::module | |
| TESTONLY | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-convert-parameters | |
| SRCS | |
| "iree-convert-parameters-main.c" | |
| DEPS | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::hal | |
| iree::io::file_handle | |
| iree::io::formats::irpa | |
| iree::io::parameter_index | |
| iree::io::scope_map | |
| iree::tooling::parameter_util | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-cpuinfo | |
| SRCS | |
| "iree-cpuinfo.c" | |
| DEPS | |
| iree::base | |
| iree::base::internal::cpu | |
| iree::schemas::cpu_data | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-create-parameters | |
| SRCS | |
| "iree-create-parameters-main.c" | |
| DEPS | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::hal | |
| iree::io::file_handle | |
| iree::io::formats::irpa | |
| iree::io::parameter_index | |
| iree::io::scope_map | |
| iree::io::stream | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-dump-instruments | |
| SRCS | |
| "iree-dump-instruments-main.c" | |
| DEPS | |
| flatcc::runtime | |
| iree::base | |
| iree::base::internal::flatcc::parsing | |
| iree::io::file_handle | |
| iree::schemas::instruments | |
| iree::schemas::instruments::dispatch_def_c_fbs | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-dump-module | |
| SRCS | |
| "iree-dump-module-main.c" | |
| DEPS | |
| flatcc::runtime | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::base::internal::flatcc::debugging | |
| iree::base::internal::flatcc::parsing | |
| iree::io::file_handle | |
| iree::schemas::bytecode_module_def_c_fbs | |
| iree::vm | |
| iree::vm::bytecode::module | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-dump-parameters | |
| SRCS | |
| "iree-dump-parameters-main.c" | |
| DEPS | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::io::file_handle | |
| iree::io::parameter_index | |
| iree::io::scope_map | |
| iree::tooling::parameter_util | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-dump-replay | |
| SRCS | |
| "iree-dump-replay-main.c" | |
| DEPS | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::hal::replay::dump | |
| iree::io::file_handle | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-run-replay | |
| SRCS | |
| "iree-run-replay-main.c" | |
| DEPS | |
| iree::async | |
| iree::async::util::proactor_pool | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::hal | |
| iree::hal::replay::execute | |
| iree::io::file_handle | |
| iree::tooling::device_util | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| if(IREE_BUILD_BENCHMARKS) | |
| iree_cc_binary( | |
| NAME | |
| iree-benchmark-replay | |
| SRCS | |
| "iree-benchmark-replay-main.cc" | |
| DEPS | |
| benchmark | |
| iree::async | |
| iree::async::util::proactor_pool | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::hal | |
| iree::hal::replay::execute | |
| iree::io::file_handle | |
| iree::tooling::device_util | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| endif() | |
| iree_cc_binary( | |
| NAME | |
| iree-encode-parameters | |
| SRCS | |
| "iree-encode-parameters-main.c" | |
| DEPS | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::hal | |
| iree::hal::replay::recorder | |
| iree::io::file_handle | |
| iree::io::formats::irpa | |
| iree::io::parameter_index | |
| iree::io::parameter_index_provider | |
| iree::io::scope_map | |
| iree::io::stream | |
| iree::modules::hal | |
| iree::tooling::context_util | |
| iree::tooling::function_util | |
| iree::tooling::parameter_util | |
| iree::vm | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| # Only enable fatelf tool when we're compiling it in. | |
| # Currently it requires that the host and target both support embedded ELFs as | |
| # the ELF implementation is only compiled when the target supports it. | |
| if(IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF OR | |
| IREE_HAL_EXECUTABLE_PLUGIN_EMBEDDED_ELF) | |
| iree_cc_binary( | |
| NAME | |
| iree-fatelf | |
| SRCS | |
| "iree-fatelf.c" | |
| DEPS | |
| iree::base | |
| iree::base::internal::path | |
| iree::io::file_handle | |
| iree::hal::local::elf::elf_module | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| endif() # IREE_HAL_EXECUTABLE_*_EMBEDDED_ELF | |
| iree_cc_binary( | |
| NAME | |
| iree-profile | |
| SRCS | |
| "iree-profile-main.c" | |
| DEPS | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::tooling::profile::commands | |
| iree::tooling::profile::help | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| if(IREE_HAL_DRIVER_AMDGPU) | |
| target_compile_definitions(iree-profile PRIVATE IREE_PROFILE_HAVE_AMDGPU_ATT=1) | |
| target_link_libraries(iree-profile PRIVATE iree::tooling::profile::att) | |
| else() | |
| target_compile_definitions(iree-profile PRIVATE IREE_PROFILE_HAVE_AMDGPU_ATT=0) | |
| endif() | |
| install( | |
| PROGRAMS | |
| "iree-profile-render" | |
| DESTINATION | |
| bin | |
| COMPONENT | |
| IREETools-Runtime | |
| ) | |
| install( | |
| DIRECTORY | |
| "${IREE_SOURCE_DIR}/runtime/src/iree/tooling/profile/render" | |
| DESTINATION | |
| "share/iree/profile" | |
| COMPONENT | |
| IREETools-Runtime | |
| FILES_MATCHING | |
| PATTERN "*.py" | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-run-module | |
| SRCS | |
| "iree-run-module-main.c" | |
| DEPS | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::hal | |
| iree::tooling::context_util | |
| iree::tooling::run_module | |
| iree::vm | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-tokenize | |
| SRCS | |
| "iree-tokenize-main.c" | |
| DEPS | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::base::internal::json | |
| iree::io::file_handle | |
| iree::tokenizer::tokenizer | |
| iree::tokenizer::format::huggingface::tokenizer_json | |
| iree::tokenizer::format::tiktoken::tiktoken | |
| iree::tokenizer::vocab | |
| COVERAGE ${IREE_ENABLE_RUNTIME_COVERAGE} | |
| INSTALL_COMPONENT IREETools-Runtime | |
| ) | |
| if(IREE_BUILD_COMPILER) | |
| if(IREE_LLVM_LINK_TARGET) | |
| install( | |
| TARGETS llvm-link | |
| COMPONENT IREETools-CompilerExtra | |
| RUNTIME DESTINATION bin | |
| ) | |
| endif() | |
| if(IREE_CLANG_TARGET) | |
| install( | |
| TARGETS clang | |
| COMPONENT IREETools-CompilerExtra | |
| RUNTIME DESTINATION bin | |
| ) | |
| endif() | |
| if(IREE_FILECHECK_TARGET) | |
| install( | |
| TARGETS FileCheck | |
| COMPONENT IREETools-CompilerDev | |
| RUNTIME DESTINATION bin | |
| ) | |
| endif() | |
| if(IREE_NOT_TARGET) | |
| install( | |
| TARGETS not | |
| COMPONENT IREETools-CompilerDev | |
| RUNTIME DESTINATION bin | |
| ) | |
| endif() | |
| # Tablegen binaries are special snowflakes among special snowflakes. | |
| # They must be statically linked against internal LLVM libraries, and they | |
| # therefore must not depend on anything outside of the upstream tablegen | |
| # libraries. These targets are specially set up to link in the correct | |
| # way. This is a necessary diversion from how Bazel deals with it (which | |
| # must deep-link to everything to satisfy its checks). | |
| iree_cc_binary( | |
| NAME | |
| iree-tblgen | |
| SRCS | |
| "iree-tblgen.cpp" | |
| "${IREE_SOURCE_DIR}/compiler/src/iree/compiler/Dialect/VM/Tools/VMOpEncoderGen.cpp" | |
| "${IREE_SOURCE_DIR}/compiler/src/iree/compiler/Dialect/VM/Tools/VMOpTableGen.cpp" | |
| DEPS | |
| LLVMSupport | |
| MLIRTblgenLib | |
| HOSTONLY | |
| DISABLE_LLVM_LINK_LLVM_DYLIB | |
| INSTALL_COMPONENT IREETools-CompilerDev | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-compile | |
| SRCS | |
| "iree-compile-main.cc" | |
| LINKOPTS | |
| ${IREE_COMPILER_TOOL_LINKOPTS} | |
| DEPS | |
| iree::compiler::bindings::c::headers | |
| iree::compiler::API::Impl | |
| DATA | |
| ${IREE_LLD_TARGET} | |
| HOSTONLY | |
| SETUP_INSTALL_RPATH | |
| INSTALL_COMPONENT IREETools-Compiler | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-reduce | |
| SRCS | |
| "iree-reduce.cc" | |
| LINKOPTS | |
| ${IREE_COMPILER_TOOL_LINKOPTS} | |
| DEPS | |
| iree::compiler::bindings::c::headers | |
| iree::compiler::API::Impl | |
| DATA | |
| ${IREE_LLD_TARGET} | |
| HOSTONLY | |
| SETUP_INSTALL_RPATH | |
| INSTALL_COMPONENT IREETools-Compiler | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-link | |
| SRCS | |
| "iree-link-main.cc" | |
| DEPS | |
| iree::compiler::bindings::c::headers | |
| iree::compiler::API::Impl | |
| HOSTONLY | |
| SETUP_INSTALL_RPATH | |
| INSTALL_COMPONENT IREETools-Compiler | |
| ) | |
| # Only build IREE's busybox lld if the backing LLVM has LLD enabled. | |
| # Otherwise, it will build but fail at runtime saying that it is not | |
| # supported, and this fouls up tools search heuristics. | |
| if(IREE_LLD_TARGET) | |
| iree_cc_binary( | |
| NAME | |
| iree-lld | |
| SRCS | |
| "iree-lld-main.cc" | |
| DEPS | |
| iree::compiler::bindings::c::headers | |
| iree::compiler::API::Impl | |
| HOSTONLY | |
| SETUP_INSTALL_RPATH | |
| INSTALL_COMPONENT IREETools-Compiler | |
| ) | |
| endif() | |
| iree_cc_binary( | |
| NAME | |
| iree-opt | |
| SRCS | |
| "iree-opt-main.cc" | |
| LINKOPTS | |
| ${IREE_COMPILER_TOOL_LINKOPTS} | |
| DEPS | |
| iree::compiler::bindings::c::headers | |
| iree::compiler::API::Impl | |
| DATA | |
| ${IREE_LLD_TARGET} | |
| HOSTONLY | |
| SETUP_INSTALL_RPATH | |
| INSTALL_COMPONENT IREETools-Compiler | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-mlir-lsp-server | |
| SRCS | |
| "iree-mlir-lsp-server.cc" | |
| LINKOPTS | |
| ${IREE_COMPILER_TOOL_LINKOPTS} | |
| DEPS | |
| iree::compiler::bindings::c::headers | |
| iree::compiler::API::Impl | |
| SETUP_INSTALL_RPATH | |
| INSTALL_COMPONENT IREETools-Compiler | |
| ) | |
| iree_cc_binary( | |
| NAME | |
| iree-run-mlir | |
| SRCS | |
| "iree-run-mlir-main.cc" | |
| LINKOPTS | |
| ${IREE_COMPILER_TOOL_LINKOPTS} | |
| DEPS | |
| iree::base | |
| iree::base::tooling::flags | |
| iree::compiler::bindings::c::headers | |
| iree::compiler::API::Impl | |
| iree::hal | |
| iree::tooling::context_util | |
| iree::tooling::device_util | |
| iree::tooling::run_module | |
| iree::vm | |
| DATA | |
| ${IREE_LLD_TARGET} | |
| HOSTONLY | |
| SETUP_INSTALL_RPATH | |
| INSTALL_COMPONENT IREETools-Compiler | |
| ) | |
| # Ensure FileCheck and associated binaries get built. Tests don't have | |
| # dependencies in CMake because they aren't targets. So until we fix that, we | |
| # just force this to get built. | |
| # Limiting this to when IREE_BUILD_TESTS is set prevents the installation | |
| # below, which we use for cross-platform testing. | |
| set_target_properties(FileCheck PROPERTIES EXCLUDE_FROM_ALL OFF) | |
| set_target_properties(not PROPERTIES EXCLUDE_FROM_ALL OFF) | |
| elseif(NOT IREE_HOST_BIN_DIR) | |
| message(STATUS | |
| "*Not* building or importing IREE's compiler tools.\n " | |
| "Set IREE_BUILD_COMPILER to build them or IREE_HOST_BIN_DIR to " | |
| "import them.") | |
| endif() |