[docker] More code sharing and use development clang for Bazel builds (#11108)

There's a lot going on here. I'd normally try to break things up into
separate PRs, but building and testing the Docker containers is labor
intensive, so this is all in one. I tried to create a sensible series
of commits for review, at least. If desired, I could do further cleanup
to the commits (give them all names that make sense with less context)
and merge this with a merge commit.

The original goal here was to use the development version of `clang` in
the Bazel build so that we can catch layering issues. Google uses a
close-to-head `clang` internally so we get the new diagnostics and
such and have to deal with them when pulling into the Google monorepo.
In particular, https://github.com/llvm/llvm-project/commit/a002063de3
fixed a bug in the layering detection for `clang` which caused it to
catch a bunch more layering issues, fixed in
https://github.com/iree-org/iree/pull/11166. Given that some of the
main reasons to maintain the Bazel build are to ease integration into
Google's monorepo and to catch layering violations, it seems better to
use development `clang` for this build. Ensuring support for old clang
+ Bazel is not a particularly high priority, especially since few (no?)
project developers actually develop using Bazel.

While doing this, I did a bunch more cleanup though, partially as it
became the easiest way to make some changes.

- The restructuring in https://github.com/iree-org/iree/pull/11083 to
  open up the Docker context enabled increased usage of shared scripts,
  including those we use for non-Docker purposes.
- Similarly, I was able to limit the number of places where we specify
  our minimum supported version. These have frequently not been kept in
  sync (e.g. https://github.com/iree-org/iree/pull/8811 didn't bump the
  SwiftShader version in our user install script).
- I codified Python package versions with pip requirements files
  instead of having them scattered about Dockerfiles and documentation.
- I made all the containers build with "safe" bash by default.
- I bumped our *maximum* supported CMake version.
46 files changed
tree: 8850b12a5df8d9c9d06ef907fa496a5230b3b4f8
  1. .github/
  2. benchmarks/
  3. build_tools/
  4. compiler/
  5. docs/
  6. experimental/
  7. integrations/
  8. llvm-external-projects/
  9. runtime/
  10. samples/
  11. tests/
  12. third_party/
  13. tools/
  14. .bazelignore
  15. .bazelrc
  16. .bazelversion
  17. .clang-format
  18. .dockerignore
  19. .gitignore
  20. .gitmodules
  21. .pylintrc
  22. .style.yapf
  23. .yamllint.yml
  24. AUTHORS
  25. BUILD.bazel
  26. CITATION.cff
  27. CMakeLists.txt
  28. configure_bazel.py
  29. CONTRIBUTING.md
  30. LICENSE
  31. README.md
  32. 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

  • 2021-06-09: IREE Runtime Design Tech Talk (recording and slides)
  • 2020-08-20: IREE CodeGen: MLIR Open Design Meeting Presentation (recording and slides)
  • 2020-03-18: Interactive HAL IR Walkthrough (recording)
  • 2020-01-31: End-to-end MLIR Workflow in IREE: MLIR Open Design Meeting Presentation (recording and slides)

License

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