libsais@2.10.4.bcr.1 (#10267)

Adds an OpenMP option to the libsais overlay, which 2.10.4 was missing.

In 2.10.4 the overlay had no counterpart to the `LIBSAIS_USE_OPENMP`
option of the upstream CMake build, so enabling OpenMP required
consumers to pass global `--copt`/`--linkopt` flags, which apply to
every dependency in the build. This version adds the flag to the overlay
instead:

```sh
bazel build <your target> --@libsais//:openmp
```

It adds `-fopenmp` (`/openmp` on MSVC and clang-cl) to the compile and
link commands and defines `LIBSAIS_OPENMP`. Upstream declares that
definition as `PUBLIC` in CMake, so the overlay uses the propagating
`defines` attribute: the `*_omp` declarations in the public headers are
guarded by it, and dependents need to see them. It is off by default, as
upstream is.

The tests now also run the `*_omp` entry point with two threads when the
flag is set, and a `verify_targets_openmp` task builds and tests
everything with `--@libsais//:openmp`. That task skips macOS, since
Apple clang ships without OpenMP support. libsais only uses `barrier`,
`master`, `parallel num_threads` and `parallel for schedule(static)`,
all of which are within the OpenMP 2.0 subset that MSVC implements, so
Windows is covered.

Apart from that, the archive and the four targets are unchanged from
2.10.4. The new `bazel_skylib` dependency is used for the `bool_flag`
and the `config_setting_group`s that combine the flag with the compiler.

Verified with `bazel test @libsais//...` against a local registry, and
with `bazel cquery --output=build` with and without the flag, to confirm
the flags and the define are applied only when it is set. The OpenMP
configuration itself cannot be built on this machine, so the
`verify_targets_openmp` task is the first real check of it; the tests'
OpenMP branch was at least compiled here with `-DLIBSAIS_OPENMP` against
the upstream headers.

The same build files are proposed upstream in IlyaGrebnov/libsais#37; if
that lands, the overlay can be dropped in a future version.

@bazel-io skip_check unstable_url
10 files changed
tree: e33026e02035772097ec32a1866fc2d690f3b842
  1. .agent/
  2. .bazelci/
  3. .gemini/
  4. .github/
  5. docs/
  6. modules/
  7. tools/
  8. .bazelignore
  9. .bazelversion
  10. .editorconfig
  11. .git-blame-ignore-revs
  12. .gitattributes
  13. .gitignore
  14. .pre-commit-config.yaml
  15. .ruff.toml
  16. AUTHORS
  17. bazel_registry.json
  18. BUILD
  19. CODEOWNERS
  20. GEMINI.md
  21. incompatible_flags.yml
  22. LICENSE
  23. metadata.schema.json
  24. MODULE.bazel
  25. README.md
  26. WORKSPACE
README.md

Bazel Central Registry

Overview

The Bazel Central Registry (BCR) is the default registry for Bazel's external dependency system (“Bzlmod”). This is the GitHub repository backing the contents of the BCR, hosted at https://bcr.bazel.build/. For the website that allows you to search modules and see their versions conveniently, visit https://registry.bazel.build/.

Besides hosting metadata about Bazel-specific libraries (commonly known as “rulesets”), the BCR is also a central host for projects that don't have upstream support for Bazel (most commonly, C/C++ projects).

The BCR is just like a regular Bazel registry, with some extra metadata fields and policy restrictions. You can contribute to the BCR by sending pull requests; see BCR policies and contribution guidelines for more information.

Disclaimer

The core infrastructure of the Bazel Central Registry depends on GitHub and Google Cloud. Bazel users who enable Bzlmod (the default since Bazel 8) depend on the BCR by default. While we try to keep the BCR infrastructure simple and reliable, we assume no liability for any damages caused by build failures due to potential BCR infrastructure failures.

If you consider it necessary, you can do the following to avoid depending on the BCR infrastructure while still making use of the information checked into the BCR.

  • Clone the BCR repository or mirror the content to your own infrastructure and use the --registry option to change the default Bazel registry to your own.
    • --registry is a flag that can be specified multiple times.
    • If no --registry flag is specified, the BCR is the only registry Bazel consults.
    • If any --registry flag is specified, Bazel will consult the specified registries in order, but will not consult the BCR unless the BCR is explicitly specified as a registry. In other words, to use your own registry layered on top of the BCR, use --registry=https://my.own.registry.com/ --registry=https://bcr.bazel.build/.
  • Host your own mirror for all source archive URLs and add the mirror URL in ./bazel_registry.json. You can run bazel run //tools:print_all_src_urls to get the list of source URLs to mirror for all Bazel modules checked into the BCR. For example, https://foo.com/bar.zip should be mirrored to https://<your mirror>/foo.com/bar.zip.