blob: f4f12067cd4da38e856935daa7470a763add483c [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 Vanik163547a2023-05-15 11:59:13 -0700148 iree::base::internal::flags
Ben Vanikb998f1f2021-09-16 09:50:12 -0700149 iree::base::internal::flatcc::debugging
Ben Vanik163547a2023-05-15 11:59:13 -0700150 iree::base::internal::flatcc::parsing
Ben Vanikbc685ed2020-11-14 17:09:46 -0800151 iree::schemas::bytecode_module_def_c_fbs
Ben Vanikcf49d692023-02-24 20:24:09 -0800152 iree::vm::bytecode::module
Ben Vanikef13fb62020-02-29 08:49:03 -0800153)
154
Ben Vanik0635b092023-03-28 13:03:38 -0700155# Only enable fatelf tool when we're compiling it in.
156# Currently it requires that the host and target both support embedded ELFs as
157# the ELF implementation is only compiled when the target supports it.
Ben Vanike19fc8e2023-04-14 16:08:01 -0700158if(IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF OR
159 IREE_HAL_EXECUTABLE_PLUGIN_EMBEDDED_ELF)
Ben Vanik0635b092023-03-28 13:03:38 -0700160iree_cc_binary(
161 NAME
162 iree-fatelf
163 SRCS
164 "iree-fatelf.c"
165 DEPS
166 iree::base
167 iree::base::internal::file_io
168 iree::base::internal::path
169 iree::hal::local::elf::elf_module
170)
171endif() # IREE_HAL_EXECUTABLE_*_EMBEDDED_ELF
172
Marius Brehler0c0cd9f2020-03-05 15:35:02 -0800173iree_cc_binary(
174 NAME
175 iree-run-module
Ben Vanikef13fb62020-02-29 08:49:03 -0800176 SRCS
Stella Laurenzod318c542023-04-27 17:08:22 -0700177 "iree-run-module-main.c"
Ben Vanikef13fb62020-02-29 08:49:03 -0800178 DEPS
Ben Vanikabe6c762021-06-27 21:57:07 -0700179 iree::base
Ben Vanike28d2532021-02-03 13:44:24 -0800180 iree::base::internal::flags
Ben Vanik56d44bf2020-05-15 13:20:50 -0700181 iree::base::tracing
Ben Vanik007109f2022-08-03 07:26:50 -0700182 iree::hal
183 iree::tooling::context_util
Stella Laurenzod318c542023-04-27 17:08:22 -0700184 iree::tooling::run_module
Ben Vanikabe6c762021-06-27 21:57:07 -0700185 iree::vm
Ben Vanikabe6c762021-06-27 21:57:07 -0700186)
187
188iree_cc_binary(
189 NAME
190 iree-run-trace
191 SRCS
192 "iree-run-trace-main.c"
193 DEPS
194 iree::base
Ben Vanikabe6c762021-06-27 21:57:07 -0700195 iree::base::internal::flags
Ben Vanik1c59c112022-06-08 09:13:34 -0700196 iree::base::internal::path
Ben Vanikabe6c762021-06-27 21:57:07 -0700197 iree::base::tracing
Ben Vanik8acdf392021-06-28 08:32:11 -0700198 iree::hal
Ben Vanikabe6c762021-06-27 21:57:07 -0700199 iree::modules::hal
Ben Vanik097d8262022-06-09 11:35:04 -0700200 iree::tooling::device_util
201 iree::tooling::trace_replay
Ben Vanike91401e2023-03-06 18:05:09 -0800202 iree::tooling::vm_util
Ben Vanik097d8262022-06-09 11:35:04 -0700203 iree::tooling::yaml_util
Ben Vanike8a9ec42020-07-16 22:04:57 -0700204 iree::vm
Ben Vanikabe6c762021-06-27 21:57:07 -0700205 yaml
Ben Vanikef13fb62020-02-29 08:49:03 -0800206)
Geoffrey Martin-Noble34190262020-02-06 10:43:58 -0800207
bjacob5feef482021-10-21 16:53:58 -0400208iree_cc_binary(
209 NAME
210 iree-e2e-matmul-test
211 SRCS
212 "iree-e2e-matmul-test.c"
213 DEPS
214 iree::base
bjacob27ded292022-09-06 16:02:33 -0400215 iree::base::internal::cpu
bjacob5feef482021-10-21 16:53:58 -0400216 iree::base::internal::flags
Ben Vanik1c59c112022-06-08 09:13:34 -0700217 iree::base::internal::path
bjacob5feef482021-10-21 16:53:58 -0400218 iree::base::tracing
219 iree::hal
bjacob5feef482021-10-21 16:53:58 -0400220 iree::modules::hal
Ben Vanik097d8262022-06-09 11:35:04 -0700221 iree::tooling::device_util
222 iree::tooling::trace_replay
223 iree::tooling::yaml_util
bjacob5feef482021-10-21 16:53:58 -0400224 iree::vm
225 yaml
226)
227
Scott Todd1a1aea62022-04-28 09:12:11 -0700228if(IREE_BUILD_COMPILER)
Scott Todd20d746a2023-01-12 09:11:59 -0800229 # If a target backend that requires LLD to link codegen executables is
230 # enabled, install the target.
231 if(IREE_LLD_TARGET)
232 install(
233 TARGETS lld
234 COMPONENT Compiler
235 RUNTIME DESTINATION bin
236 )
237 endif()
238
Marius Brehler1d617e32020-03-06 15:26:33 -0800239 iree_cc_binary(
240 NAME
241 iree-tblgen
242 SRCS
243 "${IREE_ROOT_DIR}/third_party/llvm-project/mlir/tools/mlir-tblgen/mlir-tblgen.cpp"
Stella Laurenzo41a2ceb2022-04-29 12:49:36 -0700244 "${IREE_SOURCE_DIR}/compiler/src/iree/compiler/Dialect/VM/Tools/VMOpEncoderGen.cpp"
245 "${IREE_SOURCE_DIR}/compiler/src/iree/compiler/Dialect/VM/Tools/VMOpTableGen.cpp"
Marius Brehler1d617e32020-03-06 15:26:33 -0800246 DEPS
Ben Vanikd4bb8712020-11-16 05:52:30 -0800247 LLVMSupport
248 LLVMTableGen
Marius Brehler1d617e32020-03-06 15:26:33 -0800249 MLIRSupport
250 MLIRTableGen
Thomas4c2029f2022-08-15 19:20:14 -0700251 MLIRTblgenLib
bjacob1e4bf5f2022-02-02 12:03:59 -0500252 iree::compiler::Utils
Lei Zhang0d281b72020-06-01 20:00:23 -0400253 HOSTONLY
Marius Brehler1d617e32020-03-06 15:26:33 -0800254 )
Stella Laurenzo06034152020-01-03 11:26:31 -0800255
Marius Brehler1d617e32020-03-06 15:26:33 -0800256 iree_cc_binary(
257 NAME
Stella Laurenzo7f2972c2022-03-19 14:09:43 -0700258 iree-compile
Stella Laurenzoae1c3a22022-03-17 11:17:58 -0700259 SRCS
Stella Laurenzo7f2972c2022-03-19 14:09:43 -0700260 "iree-compile-main.cc"
Stella Laurenzoae1c3a22022-03-17 11:17:58 -0700261 DEPS
Stella Laurenzo309dc5b2023-02-22 23:07:43 -0800262 iree::compiler::bindings::c::headers
Stella Laurenzo6dd9de82023-03-07 19:02:25 -0800263 iree::compiler::API::Impl
Stella Laurenzoae1c3a22022-03-17 11:17:58 -0700264 DATA
265 ${IREE_LLD_TARGET}
266 HOSTONLY
Stella Laurenzo7ec09ce2022-11-24 11:13:52 -0800267 SETUP_INSTALL_RPATH
Stella Laurenzoae1c3a22022-03-17 11:17:58 -0700268 )
269
Scott Todd44f95f82022-06-01 09:59:32 -0700270 iree_cc_binary(
Scott Todd1f1ef562022-05-10 08:47:32 -0700271 NAME
Scott Todd44f95f82022-06-01 09:59:32 -0700272 iree-opt
Scott Todd1f1ef562022-05-10 08:47:32 -0700273 SRCS
274 "iree-opt-main.cc"
275 DEPS
Stella Laurenzo309dc5b2023-02-22 23:07:43 -0800276 iree::compiler::bindings::c::headers
Stella Laurenzo6dd9de82023-03-07 19:02:25 -0800277 iree::compiler::API::Impl
Ben Vanikb189c6e2021-06-18 13:19:15 -0700278 DATA
Stella Laurenzo74b04b72022-03-02 10:21:11 -0800279 ${IREE_LLD_TARGET}
Lei Zhang0d281b72020-06-01 20:00:23 -0400280 HOSTONLY
Stella Laurenzo7ec09ce2022-11-24 11:13:52 -0800281 SETUP_INSTALL_RPATH
Marius Brehler1d617e32020-03-06 15:26:33 -0800282 )
Marius Brehler0c0cd9f2020-03-05 15:35:02 -0800283
Marius Brehler1d617e32020-03-06 15:26:33 -0800284 iree_cc_binary(
285 NAME
Scott Todd111be2e2021-06-10 12:56:53 -0700286 iree-mlir-lsp-server
287 SRCS
288 "iree-mlir-lsp-server.cc"
289 DEPS
Stella Laurenzo309dc5b2023-02-22 23:07:43 -0800290 iree::compiler::bindings::c::headers
Stella Laurenzo6dd9de82023-03-07 19:02:25 -0800291 iree::compiler::API::Impl
Stella Laurenzo7ec09ce2022-11-24 11:13:52 -0800292 SETUP_INSTALL_RPATH
Scott Todd111be2e2021-06-10 12:56:53 -0700293 )
294
295 iree_cc_binary(
296 NAME
Marius Brehler1d617e32020-03-06 15:26:33 -0800297 iree-run-mlir
Marius Brehler1d617e32020-03-06 15:26:33 -0800298 SRCS
Geoffrey Martin-Noble0a6b9cc2020-09-22 20:17:05 -0700299 "iree-run-mlir-main.cc"
Marius Brehler1d617e32020-03-06 15:26:33 -0800300 DEPS
Ben Vanik7c2d3102021-04-30 10:32:55 -0700301 iree::base
Ben Vanike28d2532021-02-03 13:44:24 -0800302 iree::base::internal::flags
Ben Vanik56d44bf2020-05-15 13:20:50 -0700303 iree::base::tracing
Stella Laurenzod318c542023-04-27 17:08:22 -0700304 iree::compiler::bindings::c::headers
305 iree::compiler::API::Impl
Ben Vanik193c7602021-04-30 10:29:15 -0700306 iree::hal
Ben Vanik007109f2022-08-03 07:26:50 -0700307 iree::tooling::context_util
Ben Vanik097d8262022-06-09 11:35:04 -0700308 iree::tooling::device_util
Stella Laurenzod318c542023-04-27 17:08:22 -0700309 iree::tooling::run_module
Marius Brehler1d617e32020-03-06 15:26:33 -0800310 iree::vm
Ben Vanikb189c6e2021-06-18 13:19:15 -0700311 DATA
Stella Laurenzo74b04b72022-03-02 10:21:11 -0800312 ${IREE_LLD_TARGET}
Lei Zhang0d281b72020-06-01 20:00:23 -0400313 HOSTONLY
Scott Todd45f11372023-05-02 12:01:39 -0700314 SETUP_INSTALL_RPATH
Marius Brehler1d617e32020-03-06 15:26:33 -0800315 )
Geoffrey Martin-Nobleb1bc0382021-01-06 11:58:38 -0800316
Ben Vanike98a03b2022-09-23 14:17:05 -0700317 # Ensure FileCheck and associated binaries get built. Tests don't have
318 # dependencies in CMake because they aren't targets. So until we fix that, we
319 # just force this to get built.
Geoffrey Martin-Noble435c2702022-01-24 15:56:56 -0800320 # Limiting this to when IREE_BUILD_TESTS is set prevents the installation
321 # below, which we use for cross-platform testing.
322 set_target_properties(FileCheck PROPERTIES EXCLUDE_FROM_ALL OFF)
Ben Vanike98a03b2022-09-23 14:17:05 -0700323 set_target_properties(not PROPERTIES EXCLUDE_FROM_ALL OFF)
Scott Toddde426de2023-01-13 08:26:02 -0800324elseif(NOT IREE_HOST_BIN_DIR)
Scott Todd20d746a2023-01-12 09:11:59 -0800325 message(STATUS
326 "*Not* building or importing IREE's compiler tools.\n "
Scott Toddde426de2023-01-13 08:26:02 -0800327 "Set IREE_BUILD_COMPILER to build them or IREE_HOST_BIN_DIR to "
Scott Todd20d746a2023-01-12 09:11:59 -0800328 "import them.")
329endif()