Add Support for LLVM's Propeller (basic block sections) Optimization Flags.

Basic Block Sections was recently introduced in LLVM. This supports option
-fbasic-block-sections=list=<file>  which allows basic blocks that are
specified to be placed in unique sections.  This is part of the Propeller
optimization project and is used to perform post link code layout
optimizations :[]

This change adds "propeller_optimize" rule to bazel that allows specifying two
files that would be used to create basic block sections.  The first is called
cc_profile which will be passed to all compile actions.  The second is called
ld_profile which will be passed to the link action.  Both files are expected to
be ".txt".

The cc_profile artifact will be used as input to the
-fbasic-block-sections=list option and the ld_profile artifact will be used as
input to the --symbol-ordering-file link option.  The purpose of this change is
to make sure that these two files are available at the time of the compile/link
action.
PiperOrigin-RevId: 334381480
20 files changed
tree: d5e1c4e0a381e7f90defab1e24311a18456f2e8f
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .bazelrc
  9. .gitattributes
  10. .gitignore
  11. AUTHORS
  12. BUILD
  13. CHANGELOG.md
  14. CODEBASE.md
  15. CODEOWNERS
  16. combine_distfiles.py
  17. combine_distfiles_to_tar.sh
  18. compile.sh
  19. CONTRIBUTING.md
  20. CONTRIBUTORS
  21. distdir.bzl
  22. ISSUE_TEMPLATE.md
  23. LICENSE
  24. README.md
  25. WORKSPACE
README.md

Bazel

{Fast, Correct} - Choose two

Build and test software of any size, quickly and reliably.

  • Speed up your builds and tests: Bazel rebuilds only what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.

  • One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.

  • Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.

  • Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.

Getting Started

Documentation

Contributing to Bazel

See CONTRIBUTING.md

Build status