Funnel all JNI load requests through JniLoader.

To avoid symbol collisions in native dependencies, we can safely only load
one shared library to provide our JNI bindings.  Unfortunately, we have
multiple places that attempt to load JNI code, which gives the illusion that
loading more than one library is OK.  To clarify this, centralize all JNI
loads into a single JniLoader entry point.  This change should be a no-op and
does not fix any problems with duplicate symbols yet.

As part of this change, remove the io.bazel.EnableJni JVM system property
that was used to tell Bazel whether to load the JNI code or not... sometimes.
We had many call sites that attempted to load JNI and some checked for this
property and others didn't.  Things worked mostly by chance and were very
fragile, and we can do better by being slightly smarter.

Note that UnixJniLoader and WindowsJniLoader remain after this change but
they are now hidden behind JniLoader.  An upcoming change will further
merge the code of these three, but I'll do it separately for simplicity
reasons.

PiperOrigin-RevId: 335040383
23 files changed
tree: d182dc6dfa8866d89c9db84fc6ded07fe8b29cc3
  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