blob: 3814889beff697bf59bc8a1a3384bb2bf0a1c267 [file] [log] [blame]
Geoffrey Martin-Noble552d3f82021-05-25 17:56:09 -07001# Copyright 2019 The IREE Authors
Ben Vanik512d2d32019-09-20 13:22:34 -07002#
Geoffrey Martin-Noble552d3f82021-05-25 17:56:09 -07003# Licensed under the Apache License v2.0 with LLVM Exceptions.
4# See https://llvm.org/LICENSE.txt for license information.
5# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Ben Vanik6b112ef2019-10-03 10:45:14 -07006
Stella Laurenzobe0f1e12023-04-03 13:34:38 -07007# Special case package namespace for tools/ -> "" (empty string)
8# For example, tools/iree-compile -> iree-compile (no namespace)
9set(IREE_PACKAGE_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}")
10
Scott Todd44f95f82022-06-01 09:59:32 -070011# Tools IREE provides for compiling, executing, and benchmarking programs, as
12# well as other utilities.
13#
14# Only binary targets and their associated main files should go in this
15# directory. Library targets and header files should be placed in the
16# appropriate subtree, e.g. `compiler/src/iree/compiler/Tools/`.
17#
Scott Todd20d746a2023-01-12 09:11:59 -080018# Compiler tools are designed to run on host platforms (Linux, macOS, Windows),
19# so they are only built when IREE_BUILD_COMPILER is set and are tagged
20# "hostonly". When cross-compiling (or generally wanting to use already-built
Scott Toddde426de2023-01-13 08:26:02 -080021# compiler tools), set the IREE_HOST_BIN_DIR CMake option.
Scott Todd44f95f82022-06-01 09:59:32 -070022#
23# This file does not use bazel_to_cmake because of special logic throughout.
Scott Todd6132bb32020-08-11 12:04:40 -070024
Scott Todd20d746a2023-01-12 09:11:59 -080025# Write some important CMake options to a file for convenient use from scripts.
26configure_file(build_config_template.txt.in build_config.txt)
27
Stella Laurenzobe0f1e12023-04-03 13:34:38 -070028# For sub-directories, we want targets fully qualified relative to the
29# root. But after, we want those in *this* directory to be unqualified
30# (i.e. 'iree-compile').
Lei Zhang923535d2023-04-06 18:07:43 -040031set(IREE_PACKAGE_ROOT_PREFIX "iree/tools")
Scott Todd20d746a2023-01-12 09:11:59 -080032iree_add_all_subdirs()
Stella Laurenzobe0f1e12023-04-03 13:34:38 -070033set(IREE_PACKAGE_ROOT_PREFIX "")
Scott Todd20d746a2023-01-12 09:11:59 -080034
35# TODO(scotttodd): Should this be checking IREE_BUILD_COMPILER?
36# Maybe we should disallow setting both at the same time, since it's
37# ambigious which should be used
Scott Toddde426de2023-01-13 08:26:02 -080038if(IREE_HOST_BIN_DIR AND NOT IREE_BUILD_COMPILER)
Scott Todd20d746a2023-01-12 09:11:59 -080039 iree_import_binary(NAME iree-tblgen)
40 iree_import_binary(NAME iree-compile)
41 iree_import_binary(NAME iree-opt)
42 iree_import_binary(NAME iree-run-mlir)
43endif()
44
Scott Todd4c022df2022-05-10 16:55:18 -070045# TODO(#6353): Tools has thread dependencies in gtest, benchmark, yaml, etc.
46# This should be split between runtime/compiler with optional threading support.
Scott Todde93f0ee2022-05-03 12:06:29 -070047if(NOT IREE_ENABLE_THREADING)
Cindy Liu331946c2021-06-01 12:20:30 -070048 return()
49endif()
50
Geoffrey Martin-Noble34190262020-02-06 10:43:58 -080051iree_cc_binary(
52 NAME
53 iree-benchmark-module
Geoffrey Martin-Noble34190262020-02-06 10:43:58 -080054 SRCS
Geoffrey Martin-Noble0a6b9cc2020-09-22 20:17:05 -070055 "iree-benchmark-module-main.cc"
Geoffrey Martin-Noble34190262020-02-06 10:43:58 -080056 DEPS
Geoffrey Martin-Noble34190262020-02-06 10:43:58 -080057 benchmark
Ben Vanik931a3b12021-05-20 13:27:13 -070058 iree::base
Ben Vanike28d2532021-02-03 13:44:24 -080059 iree::base::internal::flags
Ben Vanik56d44bf2020-05-15 13:20:50 -070060 iree::base::tracing
Ben Vanik931a3b12021-05-20 13:27:13 -070061 iree::hal
Ben Vanike9ae9632022-10-04 08:13:30 -070062 iree::modules::hal::types
Ben Vanik007109f2022-08-03 07:26:50 -070063 iree::tooling::context_util
Ben Vanik097d8262022-06-09 11:35:04 -070064 iree::tooling::device_util
Ben Vanik7958fc92023-01-12 08:45:32 -080065 iree::tooling::vm_util
Ben Vanike8a9ec42020-07-16 22:04:57 -070066 iree::vm
Geoffrey Martin-Noble34190262020-02-06 10:43:58 -080067)
Ben Vanikef13fb62020-02-29 08:49:03 -080068
69iree_cc_binary(
70 NAME
Ben Vanik50e46cd2021-06-28 10:19:35 -070071 iree-benchmark-trace
72 SRCS
73 "iree-benchmark-trace-main.c"
74 DEPS
75 iree::base
76 iree::base::internal::atomic_slist
Ben Vanik12b771f2023-03-08 12:27:45 -080077 iree::base::internal::file_io
Ben Vanik50e46cd2021-06-28 10:19:35 -070078 iree::base::internal::flags
Ben Vanik1c59c112022-06-08 09:13:34 -070079 iree::base::internal::path
Ben Vanik50e46cd2021-06-28 10:19:35 -070080 iree::base::tracing
81 iree::hal
Ben Vanik50e46cd2021-06-28 10:19:35 -070082 iree::modules::hal
83 iree::testing::benchmark
Ben Vanik097d8262022-06-09 11:35:04 -070084 iree::tooling::device_util
85 iree::tooling::trace_replay
Ben Vanik12b771f2023-03-08 12:27:45 -080086 iree::tooling::vm_util
Ben Vanik097d8262022-06-09 11:35:04 -070087 iree::tooling::yaml_util
Ben Vanik50e46cd2021-06-28 10:19:35 -070088 iree::vm
89 yaml
Ben Vanik50e46cd2021-06-28 10:19:35 -070090)
91
92iree_cc_binary(
93 NAME
inho9606995d0b72021-01-05 17:07:16 +090094 iree-check-module
inho9606995d0b72021-01-05 17:07:16 +090095 SRCS
96 "iree-check-module-main.cc"
97 DEPS
Ben Vanik7c2d3102021-04-30 10:32:55 -070098 iree::base
inho9606995d0b72021-01-05 17:07:16 +090099 iree::base::core_headers
Ben Vanik5507c6e2021-02-02 21:27:08 -0800100 iree::base::internal::file_io
Ben Vanike28d2532021-02-03 13:44:24 -0800101 iree::base::internal::flags
inho9606995d0b72021-01-05 17:07:16 +0900102 iree::base::tracing
Ben Vanik931a3b12021-05-20 13:27:13 -0700103 iree::hal
Ben Vanikd2f24f02021-06-21 09:13:53 -0700104 iree::modules::check
inho9606995d0b72021-01-05 17:07:16 +0900105 iree::testing::gtest
Ben Vanikbcec0b52022-08-06 08:45:46 -0700106 iree::tooling::context_util
Ben Vanik7859d632022-10-24 14:37:28 -0700107 iree::tooling::device_util
Ben Vanik7958fc92023-01-12 08:45:32 -0800108 iree::tooling::vm_util
Ben Vanik931a3b12021-05-20 13:27:13 -0700109 iree::vm
Ben Vanikcf49d692023-02-24 20:24:09 -0800110 iree::vm::bytecode::module
inho9606995d0b72021-01-05 17:07:16 +0900111 TESTONLY
112)
113
114iree_cc_binary(
115 NAME
Ben Vanik0635b092023-03-28 13:03:38 -0700116 iree-cpuinfo
117 SRCS
118 "iree-cpuinfo.c"
119 DEPS
120 iree::base
121 iree::base::internal::cpu
122 iree::schemas::cpu_data
123)
124
125iree_cc_binary(
126 NAME
Ben Vanikc319c2d2023-02-24 18:18:47 -0800127 iree-dump-instruments
128 SRCS
129 "iree-dump-instruments-main.c"
130 DEPS
131 flatcc::runtime
132 iree::base
133 iree::base::internal::file_io
134 iree::base::internal::flatcc::parsing
135 iree::schemas::instruments
136 iree::schemas::instruments::dispatch_def_c_fbs
137)
138
139iree_cc_binary(
140 NAME
Ben Vanikef13fb62020-02-29 08:49:03 -0800141 iree-dump-module
142 SRCS
Ben Vanik35bc9a12022-03-09 09:05:58 -0800143 "iree-dump-module-main.c"
Ben Vanikef13fb62020-02-29 08:49:03 -0800144 DEPS
Ben Vanik7b8e9f72020-11-20 17:37:51 -0800145 flatcc::runtime
Ben Vanik931a3b12021-05-20 13:27:13 -0700146 iree::base
Ben Vanik5507c6e2021-02-02 21:27:08 -0800147 iree::base::internal::file_io
Ben Vanikb998f1f2021-09-16 09:50:12 -0700148 iree::base::internal::flatcc::debugging
Ben Vanikbc685ed2020-11-14 17:09:46 -0800149 iree::schemas::bytecode_module_def_c_fbs
Ben Vanikcf49d692023-02-24 20:24:09 -0800150 iree::vm::bytecode::module
Ben Vanikef13fb62020-02-29 08:49:03 -0800151)
152
Ben Vanik0635b092023-03-28 13:03:38 -0700153# Only enable fatelf tool when we're compiling it in.
154# Currently it requires that the host and target both support embedded ELFs as
155# the ELF implementation is only compiled when the target supports it.
Ben Vanike19fc8e2023-04-14 16:08:01 -0700156if(IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF OR
157 IREE_HAL_EXECUTABLE_PLUGIN_EMBEDDED_ELF)
Ben Vanik0635b092023-03-28 13:03:38 -0700158iree_cc_binary(
159 NAME
160 iree-fatelf
161 SRCS
162 "iree-fatelf.c"
163 DEPS
164 iree::base
165 iree::base::internal::file_io
166 iree::base::internal::path
167 iree::hal::local::elf::elf_module
168)
169endif() # IREE_HAL_EXECUTABLE_*_EMBEDDED_ELF
170
Marius Brehler0c0cd9f2020-03-05 15:35:02 -0800171iree_cc_binary(
172 NAME
173 iree-run-module
Ben Vanikef13fb62020-02-29 08:49:03 -0800174 SRCS
Stella Laurenzod318c542023-04-27 17:08:22 -0700175 "iree-run-module-main.c"
Ben Vanikef13fb62020-02-29 08:49:03 -0800176 DEPS
Ben Vanikabe6c762021-06-27 21:57:07 -0700177 iree::base
Ben Vanike28d2532021-02-03 13:44:24 -0800178 iree::base::internal::flags
Ben Vanik56d44bf2020-05-15 13:20:50 -0700179 iree::base::tracing
Ben Vanik007109f2022-08-03 07:26:50 -0700180 iree::hal
181 iree::tooling::context_util
Stella Laurenzod318c542023-04-27 17:08:22 -0700182 iree::tooling::run_module
Ben Vanikabe6c762021-06-27 21:57:07 -0700183 iree::vm
Ben Vanikabe6c762021-06-27 21:57:07 -0700184)
185
186iree_cc_binary(
187 NAME
188 iree-run-trace
189 SRCS
190 "iree-run-trace-main.c"
191 DEPS
192 iree::base
Ben Vanikabe6c762021-06-27 21:57:07 -0700193 iree::base::internal::flags
Ben Vanik1c59c112022-06-08 09:13:34 -0700194 iree::base::internal::path
Ben Vanikabe6c762021-06-27 21:57:07 -0700195 iree::base::tracing
Ben Vanik8acdf392021-06-28 08:32:11 -0700196 iree::hal
Ben Vanikabe6c762021-06-27 21:57:07 -0700197 iree::modules::hal
Ben Vanik097d8262022-06-09 11:35:04 -0700198 iree::tooling::device_util
199 iree::tooling::trace_replay
Ben Vanike91401e2023-03-06 18:05:09 -0800200 iree::tooling::vm_util
Ben Vanik097d8262022-06-09 11:35:04 -0700201 iree::tooling::yaml_util
Ben Vanike8a9ec42020-07-16 22:04:57 -0700202 iree::vm
Ben Vanikabe6c762021-06-27 21:57:07 -0700203 yaml
Ben Vanikef13fb62020-02-29 08:49:03 -0800204)
Geoffrey Martin-Noble34190262020-02-06 10:43:58 -0800205
bjacob5feef482021-10-21 16:53:58 -0400206iree_cc_binary(
207 NAME
208 iree-e2e-matmul-test
209 SRCS
210 "iree-e2e-matmul-test.c"
211 DEPS
212 iree::base
bjacob27ded292022-09-06 16:02:33 -0400213 iree::base::internal::cpu
bjacob5feef482021-10-21 16:53:58 -0400214 iree::base::internal::flags
Ben Vanik1c59c112022-06-08 09:13:34 -0700215 iree::base::internal::path
bjacob5feef482021-10-21 16:53:58 -0400216 iree::base::tracing
217 iree::hal
bjacob5feef482021-10-21 16:53:58 -0400218 iree::modules::hal
Ben Vanik097d8262022-06-09 11:35:04 -0700219 iree::tooling::device_util
220 iree::tooling::trace_replay
221 iree::tooling::yaml_util
bjacob5feef482021-10-21 16:53:58 -0400222 iree::vm
223 yaml
224)
225
Scott Todd1a1aea62022-04-28 09:12:11 -0700226if(IREE_BUILD_COMPILER)
Scott Todd20d746a2023-01-12 09:11:59 -0800227 # If a target backend that requires LLD to link codegen executables is
228 # enabled, install the target.
229 if(IREE_LLD_TARGET)
230 install(
231 TARGETS lld
232 COMPONENT Compiler
233 RUNTIME DESTINATION bin
234 )
235 endif()
236
Marius Brehler1d617e32020-03-06 15:26:33 -0800237 iree_cc_binary(
238 NAME
239 iree-tblgen
240 SRCS
241 "${IREE_ROOT_DIR}/third_party/llvm-project/mlir/tools/mlir-tblgen/mlir-tblgen.cpp"
Stella Laurenzo41a2ceb2022-04-29 12:49:36 -0700242 "${IREE_SOURCE_DIR}/compiler/src/iree/compiler/Dialect/VM/Tools/VMOpEncoderGen.cpp"
243 "${IREE_SOURCE_DIR}/compiler/src/iree/compiler/Dialect/VM/Tools/VMOpTableGen.cpp"
Marius Brehler1d617e32020-03-06 15:26:33 -0800244 DEPS
Ben Vanikd4bb8712020-11-16 05:52:30 -0800245 LLVMSupport
246 LLVMTableGen
Marius Brehler1d617e32020-03-06 15:26:33 -0800247 MLIRSupport
248 MLIRTableGen
Thomas4c2029f2022-08-15 19:20:14 -0700249 MLIRTblgenLib
bjacob1e4bf5f2022-02-02 12:03:59 -0500250 iree::compiler::Utils
Lei Zhang0d281b72020-06-01 20:00:23 -0400251 HOSTONLY
Marius Brehler1d617e32020-03-06 15:26:33 -0800252 )
Stella Laurenzo06034152020-01-03 11:26:31 -0800253
Marius Brehler1d617e32020-03-06 15:26:33 -0800254 iree_cc_binary(
255 NAME
Stella Laurenzo7f2972c2022-03-19 14:09:43 -0700256 iree-compile
Stella Laurenzoae1c3a22022-03-17 11:17:58 -0700257 SRCS
Stella Laurenzo7f2972c2022-03-19 14:09:43 -0700258 "iree-compile-main.cc"
Stella Laurenzoae1c3a22022-03-17 11:17:58 -0700259 DEPS
Stella Laurenzo309dc5b2023-02-22 23:07:43 -0800260 iree::compiler::bindings::c::headers
Stella Laurenzo6dd9de82023-03-07 19:02:25 -0800261 iree::compiler::API::Impl
Stella Laurenzoae1c3a22022-03-17 11:17:58 -0700262 DATA
263 ${IREE_LLD_TARGET}
264 HOSTONLY
Stella Laurenzo7ec09ce2022-11-24 11:13:52 -0800265 SETUP_INSTALL_RPATH
Stella Laurenzoae1c3a22022-03-17 11:17:58 -0700266 )
267
Scott Todd44f95f82022-06-01 09:59:32 -0700268 iree_cc_binary(
Scott Todd1f1ef562022-05-10 08:47:32 -0700269 NAME
Scott Todd44f95f82022-06-01 09:59:32 -0700270 iree-opt
Scott Todd1f1ef562022-05-10 08:47:32 -0700271 SRCS
272 "iree-opt-main.cc"
273 DEPS
Stella Laurenzo309dc5b2023-02-22 23:07:43 -0800274 iree::compiler::bindings::c::headers
Stella Laurenzo6dd9de82023-03-07 19:02:25 -0800275 iree::compiler::API::Impl
Ben Vanikb189c6e2021-06-18 13:19:15 -0700276 DATA
Stella Laurenzo74b04b72022-03-02 10:21:11 -0800277 ${IREE_LLD_TARGET}
Lei Zhang0d281b72020-06-01 20:00:23 -0400278 HOSTONLY
Stella Laurenzo7ec09ce2022-11-24 11:13:52 -0800279 SETUP_INSTALL_RPATH
Marius Brehler1d617e32020-03-06 15:26:33 -0800280 )
Marius Brehler0c0cd9f2020-03-05 15:35:02 -0800281
Marius Brehler1d617e32020-03-06 15:26:33 -0800282 iree_cc_binary(
283 NAME
Scott Todd111be2e2021-06-10 12:56:53 -0700284 iree-mlir-lsp-server
285 SRCS
286 "iree-mlir-lsp-server.cc"
287 DEPS
Stella Laurenzo309dc5b2023-02-22 23:07:43 -0800288 iree::compiler::bindings::c::headers
Stella Laurenzo6dd9de82023-03-07 19:02:25 -0800289 iree::compiler::API::Impl
Stella Laurenzo7ec09ce2022-11-24 11:13:52 -0800290 SETUP_INSTALL_RPATH
Scott Todd111be2e2021-06-10 12:56:53 -0700291 )
292
293 iree_cc_binary(
294 NAME
Marius Brehler1d617e32020-03-06 15:26:33 -0800295 iree-run-mlir
Marius Brehler1d617e32020-03-06 15:26:33 -0800296 SRCS
Geoffrey Martin-Noble0a6b9cc2020-09-22 20:17:05 -0700297 "iree-run-mlir-main.cc"
Marius Brehler1d617e32020-03-06 15:26:33 -0800298 DEPS
Ben Vanik7c2d3102021-04-30 10:32:55 -0700299 iree::base
Ben Vanike28d2532021-02-03 13:44:24 -0800300 iree::base::internal::flags
Ben Vanik56d44bf2020-05-15 13:20:50 -0700301 iree::base::tracing
Stella Laurenzod318c542023-04-27 17:08:22 -0700302 iree::compiler::bindings::c::headers
303 iree::compiler::API::Impl
Ben Vanik193c7602021-04-30 10:29:15 -0700304 iree::hal
Ben Vanik007109f2022-08-03 07:26:50 -0700305 iree::tooling::context_util
Ben Vanik097d8262022-06-09 11:35:04 -0700306 iree::tooling::device_util
Stella Laurenzod318c542023-04-27 17:08:22 -0700307 iree::tooling::run_module
Marius Brehler1d617e32020-03-06 15:26:33 -0800308 iree::vm
Ben Vanikb189c6e2021-06-18 13:19:15 -0700309 DATA
Stella Laurenzo74b04b72022-03-02 10:21:11 -0800310 ${IREE_LLD_TARGET}
Lei Zhang0d281b72020-06-01 20:00:23 -0400311 HOSTONLY
Marius Brehler1d617e32020-03-06 15:26:33 -0800312 )
Geoffrey Martin-Nobleb1bc0382021-01-06 11:58:38 -0800313
Ben Vanike98a03b2022-09-23 14:17:05 -0700314 # Ensure FileCheck and associated binaries get built. Tests don't have
315 # dependencies in CMake because they aren't targets. So until we fix that, we
316 # just force this to get built.
Geoffrey Martin-Noble435c2702022-01-24 15:56:56 -0800317 # Limiting this to when IREE_BUILD_TESTS is set prevents the installation
318 # below, which we use for cross-platform testing.
319 set_target_properties(FileCheck PROPERTIES EXCLUDE_FROM_ALL OFF)
Ben Vanike98a03b2022-09-23 14:17:05 -0700320 set_target_properties(not PROPERTIES EXCLUDE_FROM_ALL OFF)
Scott Toddde426de2023-01-13 08:26:02 -0800321elseif(NOT IREE_HOST_BIN_DIR)
Scott Todd20d746a2023-01-12 09:11:59 -0800322 message(STATUS
323 "*Not* building or importing IREE's compiler tools.\n "
Scott Toddde426de2023-01-13 08:26:02 -0800324 "Set IREE_BUILD_COMPILER to build them or IREE_HOST_BIN_DIR to "
Scott Todd20d746a2023-01-12 09:11:59 -0800325 "import them.")
326endif()