|  | load("@bazel_skylib//rules:common_settings.bzl", "string_flag", "bool_flag") | 
|  | load("@bazel_skylib//lib:selects.bzl", "selects") | 
|  |  | 
|  | def declare_bool_flag(name, default): | 
|  | """Create a boolean flag and two config_settings with the names: <name>_true, <name>_false. | 
|  |  | 
|  | declare_bool_flag is a Bazel Macro that defines a boolean flag with the given name two | 
|  | config_settings, one for True, one for False. Reminder that Bazel has special syntax for | 
|  | unsetting boolean flags, but this does not work well with aliases. | 
|  | https://docs.bazel.build/versions/main/skylark/config.html#using-build-settings-on-the-command-line | 
|  | Thus it is best to define both an "enabled" alias and a "disabled" alias. | 
|  |  | 
|  | Args: | 
|  | name: string, the name of the flag to create and use for the config_settings | 
|  | default: boolean, if the flag should default to on or off. | 
|  | """ | 
|  |  | 
|  | bool_flag(name = name, build_setting_default = default) | 
|  |  | 
|  | native.config_setting( | 
|  | name = name + "_true", | 
|  | flag_values = { | 
|  | ":" + name: "True", | 
|  | }, | 
|  | visibility = ["//visibility:public"], | 
|  | ) | 
|  |  | 
|  | native.config_setting( | 
|  | name = name + "_false", | 
|  | flag_values = { | 
|  | ":" + name: "False", | 
|  | }, | 
|  | visibility = ["//visibility:public"], | 
|  | ) | 
|  |  | 
|  | def declare_os_flag(): | 
|  | """Creates the 'os' string flag that specifies the OS to target, and a pair of | 
|  | 'tint_build_is_<os>_true' and 'tint_build_is_<os>_false' targets. | 
|  |  | 
|  | The OS flag can be specified on the command line with '--//src/tint:os=<os>' | 
|  | """ | 
|  |  | 
|  | OSes = [ | 
|  | "win", | 
|  | "linux", | 
|  | "mac", | 
|  | "other" | 
|  | ] | 
|  |  | 
|  | string_flag( | 
|  | name = "os", | 
|  | build_setting_default = "other", | 
|  | values = OSes, | 
|  | ) | 
|  |  | 
|  | for os in OSes: | 
|  | native.config_setting( | 
|  | name = "tint_build_is_{}_true".format(os), | 
|  | flag_values = { ":os": os }, | 
|  | visibility = ["//visibility:public"], | 
|  | ) | 
|  | selects.config_setting_group( | 
|  | name = "tint_build_is_{}_false".format(os), | 
|  | match_any = [ "tint_build_is_{}_true".format(other) for other in OSes if other != os], | 
|  | visibility = ["//visibility:public"], | 
|  | ) | 
|  |  | 
|  | COPTS = [ | 
|  | "-fno-rtti", | 
|  | "-fno-exceptions", | 
|  | "--std=c++17", | 
|  | ] + select({ | 
|  | "//src/tint:tint_build_glsl_writer_true": [ "-DTINT_BUILD_GLSL_WRITER" ], | 
|  | "//conditions:default": [], | 
|  | }) + select({ | 
|  | "//src/tint:tint_build_hlsl_writer_true": [ "-DTINT_BUILD_HLSL_WRITER" ], | 
|  | "//conditions:default": [], | 
|  | }) + select({ | 
|  | "//src/tint:tint_build_ir_true":          [ "-DTINT_BUILD_IR" ], | 
|  | "//conditions:default": [], | 
|  | }) + select({ | 
|  | "//src/tint:tint_build_msl_writer_true":  [ "-DTINT_BUILD_MSL_WRITER" ], | 
|  | "//conditions:default": [], | 
|  | }) + select({ | 
|  | "//src/tint:tint_build_spv_reader_true":  [ "-DTINT_BUILD_SPV_READER" ], | 
|  | "//conditions:default": [], | 
|  | }) + select({ | 
|  | "//src/tint:tint_build_spv_writer_true":  [ "-DTINT_BUILD_SPV_WRITER" ], | 
|  | "//conditions:default": [], | 
|  | }) + select({ | 
|  | "//src/tint:tint_build_wgsl_reader_true": [ "-DTINT_BUILD_WGSL_READER" ], | 
|  | "//conditions:default": [], | 
|  | }) + select({ | 
|  | "//src/tint:tint_build_wgsl_writer_true": [ "-DTINT_BUILD_WGSL_WRITER" ], | 
|  | "//conditions:default": [], | 
|  | }) |