# [Bazel Platforms](https://bazel.build)

This repository houses all canonical
[constraint_setting()](https://docs.bazel.build/versions/main/be/platform.html#constraint_setting)s,
[constraint_value()](https://docs.bazel.build/versions/main/be/platform.html#constraint_value)s
and
[platform()](https://docs.bazel.build/versions/main/be/platform.html#platform)s
that are universally useful across languages and Bazel projects.

For questions or concerns please email
[bazel-discuss@googlegroups.com](mailto://bazel-discuss@googlegroups.com).

# Motivation

Constraints must be carefully organized to avoid fragmentation. If two different
declarations for, say, cpu=x86_64 were to exist at the same time then select()
statements and toolchain selection would stop working across languages and
projects.

# Process

This repository only includes truly ubiquitous constraints.

Most common constraints -- that is settings and values that can be used across
projects - fall into specific areas like "Apple" or "Java". These are declared
in those areas' respective repositories.

A very few constraints (such as OS and cpu) are relevant for essentially all
projects across all areas. These are what this repository is for.

# Adding a canonical constraint value

To add a new canonical constraint value, prepare a PR adding it to that the
appropriate BUILD file.

Note that even global constraint values are typically area values. For example,
ios is an area value for the global setting os but belongs in the apple area.
For the PR's reviewer(s) choose an owner of this repository plus an owner of the
area repository this references..

A constraint value should be:

-   semantically clear, particularly in its distinctions from other values of
    the same setting

-   well-named: consistent with existing values of the same setting and easy to
    understand at usage sites

-   well-documented

Remember that this value will apply for the entire Bazel community and its
semantics will be difficult to impossible to change once it starts being used.

# Adding a canonical constraint setting

New canonical constraint settings should be rare and well-justified.

To add a new setting, prepare a design document according to Bazel's design
review process. This document should explain the need for a new setting and why
it belongs here vs. area-specific repositories. It should clearly explain
semantics, initial values, and criteria for adding new values.

Once the design is approved prepare a PR for the actual change. If any values
are area-specific, include the area repositories' owners as reviewers.

# Private changes to global constraints

If you'd like to experiment with changes to global settings or values, you can
fork this repo for experimental purposes. But in the interest of community
health and interoperability please don't share your changes with anyone not
involved with the experiment. For wider distribution, submit a proper change
here.

Note that you can declare constraint_values in your own repo that are members of
the global constraint_settings. This lets you "extend" global settings within
the confines of your own project. But don't do this if you expect other projects
to use these changes - this can easily lead to fragmentation conflicts.

If you need custom constaint_settings, just declare them in your own repo. They
are, by definition, not global.

If you really need a permanent global change and it isn't design-approved for
this repo, contact
[bazel-dev@googlegroups.com](mailto://bazel-dev@googlegroups.com) to discuss
options.
