[ROCM] Build rocm device bc files from source and installation setup. (#15096)

* Adds a scheme whereby compiler targets can tack dependencies onto
libIREECompiler.so by adding targets to the global property
`IREE_COMPILER_DYLIB_DEPENDS` (allowing arbitrary required artifacts to
be guaranteed to be generated when the main shared library is built).
* Added a global property `IREE_COMPILER_DYLIB_RELPATHS` which always
contains the relative paths of all artifacts that must exist along with
libIREECompiler.so (including itself). This is used for installing into
bindings (like Python), etc without all sorts of conditional code going
the wrong way in the project.
* Changed the main shared library to
`CMAKE_PLATFORM_NO_VERSIONED_SONAME` mode always (we were manually
setting this only for pip builds of Python bindings). This makes a lot
of things easier and more consistent. In reality, if ever major
versioning, we will bake a version number into the name, since that is
portable to Windows, versus relying on Unix symlink/versioning arcana.
* Set `CMAKE_RUNTIME_OUTPUT_DIRECTORY`,
`CMAKE_LIBRARY_OUTPUT_DIRECTORY`, and `CMAKE_ARCHIVE_OUTPUT_DIRECTORY`
in the top level compiler/ directory vs having them set inconsistently
throughout the tree. As a side-effect, all libraries in the compiler now
land in lib/. Since they all have fully qualified names, this is fine.
* Define a `IREE_COMPILER_DYLIB_DIR` and
`IREE_COMPILER_DYLIB_INSTALL_PREFIX` at the top level compiler/ dir vs
ad-hoc code throughout checking to see if Windows (in order to special
case DLLs installing next to binaries on that platform).
* Reworked the Python compiler build so that it always builds a symlink
tree in the build directory that matches how it gets installed. While
not done in this PR, this should let us remove all of the weird special
casing for how to find libraries if in a build tree vs deployed. Might
need a bit more massaging to delete the code.
* Adds a `findPlatformLibDirectory(StringRef platformName)` helper that
can always find the `iree_platform_libs/{platformName}` directory
located adjacent to the shared-library/DLL. Uses this to initialize the
flag for finding ROCM bc files. We may want to do this with other
prebuilts too.
* Builds the ROCM bitcode files with our clang and includes them
adjacent to the shared-lib/DLL under iree_platform_libs/rocm, which
should always be available in all build/deploy/install modality.

ci-extra: build_test_all_windows

---------

Co-authored-by: Stanley Winata <stanley@nod-labs.com>
Co-authored-by: Stella Laurenzo <stellaraccident@gmail.com>
Co-authored-by: Scott Todd <scotttodd@google.com>
10 files changed
tree: 96218fc52e2e6be07c813aa92ab3cccd9dcbe0ee
  1. .devcontainer/
  2. .github/
  3. build_tools/
  4. compiler/
  5. docs/
  6. experimental/
  7. integrations/
  8. lib/
  9. llvm-external-projects/
  10. runtime/
  11. samples/
  12. tests/
  13. third_party/
  14. tools/
  15. .bazel_to_cmake.cfg.py
  16. .bazelignore
  17. .bazelrc
  18. .bazelversion
  19. .clang-format
  20. .dockerignore
  21. .git-blame-ignore-revs
  22. .gitignore
  23. .gitmodules
  24. .yamllint.yml
  25. AUTHORS
  26. BUILD.bazel
  27. CITATION.cff
  28. CMakeLists.txt
  29. configure_bazel.py
  30. CONTRIBUTING.md
  31. LICENSE
  32. README.md
  33. WORKSPACE
README.md

IREE: Intermediate Representation Execution Environment

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.

CI Status

Project Status

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!

Communication Channels

Related Project Channels

  • MLIR topic within LLVM Discourse: IREE is enabled by and heavily relies on MLIR. IREE sometimes is referred to in certain MLIR discussions. Useful if you are also interested in MLIR evolution.

Architecture Overview

IREE Architecture IREE Architecture

See our website for more information.

Presentations and Talks

License

IREE is licensed under the terms of the Apache 2.0 License with LLVM Exceptions. See LICENSE for more information.