Browse Source

Add flavor_setting

master
Andreas Berthoud 5 years ago
parent
commit
d29af912cb
  1. 28
      BUILD
  2. 9
      README.md
  3. 18
      build_settings.bzl

28
BUILD

@ -2,6 +2,8 @@ load("@rules_python//python:defs.bzl", "py_binary")
load("@rules_python//python:defs.bzl", "py_runtime_pair") load("@rules_python//python:defs.bzl", "py_runtime_pair")
load("@pip_requirements//:requirements.bzl", "requirement") load("@pip_requirements//:requirements.bzl", "requirement")
load("//:build_settings.bzl", "flavor")
py_runtime( py_runtime(
name = "python37", name = "python37",
interpreter_path = "/usr/local/bin/python3.7", interpreter_path = "/usr/local/bin/python3.7",
@ -25,14 +27,34 @@ toolchain(
toolchain = ":py_runtime_pair", toolchain = ":py_runtime_pair",
toolchain_type = "@rules_python//python:toolchain_type", toolchain_type = "@rules_python//python:toolchain_type",
) )
flavor(
name = "favorite_flavor",
build_setting_default = "ORANGE"
)
config_setting(
name = "apple_flavor_setting",
flag_values = {
":favorite_flavor": "APPLE"
},
)
config_setting(
name = "banana_flavor_setting",
flag_values = {
":favorite_flavor": "BANANA"
},
) )
py_binary( py_binary(
name = "main", name = "main",
srcs = ["main.py"], srcs = ["main.py"],
args = [ args = select({
"--cool", ":apple_flavor_setting": ["--red", "--green"],
], ":banana_flavor_setting": ["--brown", "--curved=true"],
"//conditions:default": ["--orange"],
}),
srcs_version = "PY3", srcs_version = "PY3",
deps = [ deps = [
requirement("pyyaml"), requirement("pyyaml"),

9
README.md

@ -0,0 +1,9 @@
# Bazel playground
## Play with ...
- `bazel run main --//:favorite_flavor="BANANA"`
- `bazel run main --//:favorite_flavor="APPLE"`
- `bazel run main --//:favorite_flavor="ORANGE"`
- `bazel run main`

18
build_settings.bzl

@ -0,0 +1,18 @@
# https://docs.bazel.build/versions/2.1.0/skylark/config.html
FlavorProvider = provider(fields = ['type'])
flavors = ["APPLE", "BANANA", "ORANGE"]
def _impl(ctx):
raw_flavor = ctx.build_setting_value
if raw_flavor not in flavors:
fail(str(ctx.label) + " build setting allowed to take values {"
+ ", ".join(flavors) + "} but was set to unallowed value "
+ raw_flavor)
return FlavorProvider(type = raw_flavor)
flavor = rule(
implementation = _impl,
build_setting = config.string(flag = True)
)
Loading…
Cancel
Save