commit | 20d746a7877f45c1060a54096875fda7cb06c9ab | [log] [tgz] |
---|---|---|
author | Scott Todd <scotttodd@google.com> | Thu Jan 12 09:11:59 2023 -0800 |
committer | GitHub <noreply@github.com> | Thu Jan 12 09:11:59 2023 -0800 |
tree | 1e425bfacbda099a9bde7bd80393bc22f7e18046 | |
parent | 0d33d961508306969ed9ef6ebda63538750b4e12 [diff] |
Replace CMake `iree_get_executable_path()` with `IMPORTED` targets. (#11764) This changes how to access host tools during CMake's configure step from using a custom `iree_get_executable_path()` function to using `IMPORTED` targets (https://cmake.org/cmake/help/latest/guide/importing-exporting/index.html). A new helper `iree_import_binary` is added to keep `IREE_HOST_BINARY_ROOT` use centralized. ## Details Previously, each CMake file that wanted to use a tool that might be provided by either the current build or a "host install" would use the `iree_get_executable_path` function, e.g. ```cmake # tools/CMakeLists.txt if(IREE_BUILD_COMPILER) iree_cc_binary(NAME iree-compile ...) endif() # some other file iree_get_executable_path(_COMPILE_TOOL_EXECUTABLE "iree-compile") add_custom_command( OUTPUT ${_OUTPUT_FILES} COMMAND ${_COMPILE_TOOL_EXECUTABLE} ${_ARGS} DEPENDS ${_COMPILE_TOOL_EXECUTABLE} ${_SRC_PATH} ) ``` The `iree_get_executable_path` function attempted to find an executable with that name and would add an `IMPORTED` target if one did not already exist. We can simplify that to just defining `IMPORTED` targets directly, right where the targets are normally defined when `IREE_BUILD_COMPILER` is enabled (or `CMAKE_CROSSCOMPILING` is disabled). Importing targets where they are defined (rather than where they are used) will also let us more cleanly solve issues like https://github.com/iree-org/iree/issues/11331. Now this looks more like ```cmake # tools/CMakeLists.txt if(IREE_HOST_BINARY_ROOT AND NOT IREE_BUILD_COMPILER) iree_import_binary(NAME iree-compile) elseif(IREE_BUILD_COMPILER) iree_cc_binary(NAME iree-compile ...) else() # warn about not building or importing endif() # some other file - use the target without caring if it was imported or not add_custom_command( OUTPUT ${_OUTPUT_FILES} COMMAND iree-compile ${_ARGS} DEPENDS iree-compile ${_SRC_PATH} ) ``` ## Other context This is an alternate take on https://github.com/iree-org/iree/pull/11441 and was discussed a bit here: https://github.com/iree-org/iree/pull/11402#discussion_r1041471357. Future PRs may * Remove the implicit `bin/` suffix from `IREE_HOST_BINARY_ROOT` to decouple it from the CMake `install` process * Add `SHARED_LIBRARY_DEPS` to `iree_import_binary`, along with `iree_import_library`, for proper dependency modeling of IREECompiler.dll (assuming that `IMPORTED_RUNTIME_ARTIFACTS` doesn't already do what I want)
IREE (Intermediate Representation Execution Environment, pronounced as “eerie”) is an MLIR-based end-to-end compiler and runtime that lowers Machine Learning (ML) models to a unified IR that scales up to meet the needs of the datacenter and down to satisfy the constraints and special considerations of mobile and edge deployments.
See our website for project details, user guides, and instructions on building from source.
IREE is still in its early phase. We have settled down on the overarching infrastructure and are actively improving various software components as well as project logistics. It is still quite far from ready for everyday use and is made available without any support at the moment. With that said, we welcome any kind of feedback on any communication channels!
See our website for more information.
IREE is licensed under the terms of the Apache 2.0 License with LLVM Exceptions. See LICENSE for more information.