1*61c4878aSAndroid Build Coastguard Worker# Copyright 2024 The Pigweed Authors 2*61c4878aSAndroid Build Coastguard Worker# 3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of 5*61c4878aSAndroid Build Coastguard Worker# the License at 6*61c4878aSAndroid Build Coastguard Worker# 7*61c4878aSAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 8*61c4878aSAndroid Build Coastguard Worker# 9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under 13*61c4878aSAndroid Build Coastguard Worker# the License. 14*61c4878aSAndroid Build Coastguard Worker"""Functions for merging flags for platforms and transitions.""" 15*61c4878aSAndroid Build Coastguard Worker 16*61c4878aSAndroid Build Coastguard Workerdef flags_from_dict(flags_dict): 17*61c4878aSAndroid Build Coastguard Worker """Convert a dict of flags into a list. 18*61c4878aSAndroid Build Coastguard Worker 19*61c4878aSAndroid Build Coastguard Worker Args: 20*61c4878aSAndroid Build Coastguard Worker flags_dict: Dict mapping flag labels to values. 21*61c4878aSAndroid Build Coastguard Worker 22*61c4878aSAndroid Build Coastguard Worker Returns: 23*61c4878aSAndroid Build Coastguard Worker A list of flags in a format accepted by the `flags` attribute of `platform`. 24*61c4878aSAndroid Build Coastguard Worker """ 25*61c4878aSAndroid Build Coastguard Worker return ["--{}={}".format(k, v) for k, v in flags_dict.items()] 26*61c4878aSAndroid Build Coastguard Worker 27*61c4878aSAndroid Build Coastguard Workerdef merge_flags(base, override): 28*61c4878aSAndroid Build Coastguard Worker """Merge flags for platforms. 29*61c4878aSAndroid Build Coastguard Worker 30*61c4878aSAndroid Build Coastguard Worker See https://pigweed.dev/bazel_compatibility.html#provide-default-backend-collections-as-dicts 31*61c4878aSAndroid Build Coastguard Worker for a usage example. 32*61c4878aSAndroid Build Coastguard Worker 33*61c4878aSAndroid Build Coastguard Worker Args: 34*61c4878aSAndroid Build Coastguard Worker base: Dict of flags to use as the starting point. Typically one of 35*61c4878aSAndroid Build Coastguard Worker the dictionaries provided in @pigweed//pw_build:backends.bzl. 36*61c4878aSAndroid Build Coastguard Worker override: Dict of overrides or additions to the base dict. 37*61c4878aSAndroid Build Coastguard Worker 38*61c4878aSAndroid Build Coastguard Worker Returns: 39*61c4878aSAndroid Build Coastguard Worker A list of flags in a format accepted by the `flags` attribute of `platform`. 40*61c4878aSAndroid Build Coastguard Worker """ 41*61c4878aSAndroid Build Coastguard Worker return flags_from_dict(base | override) 42*61c4878aSAndroid Build Coastguard Worker 43*61c4878aSAndroid Build Coastguard Workerdef merge_flags_for_transition_impl(base, override): 44*61c4878aSAndroid Build Coastguard Worker """Merge flags for a transition's impl function. 45*61c4878aSAndroid Build Coastguard Worker 46*61c4878aSAndroid Build Coastguard Worker Args: 47*61c4878aSAndroid Build Coastguard Worker base: Dict of flags to use as the starting point. Typically one of 48*61c4878aSAndroid Build Coastguard Worker the dictionaries provided in @pigweed//pw_build:backends.bzl. 49*61c4878aSAndroid Build Coastguard Worker override: Dict of overrides or additions to the base dict. 50*61c4878aSAndroid Build Coastguard Worker """ 51*61c4878aSAndroid Build Coastguard Worker return base | override 52*61c4878aSAndroid Build Coastguard Worker 53*61c4878aSAndroid Build Coastguard Workerdef merge_flags_for_transition_outputs(base, override): 54*61c4878aSAndroid Build Coastguard Worker """Merge flags for a transition's output function. 55*61c4878aSAndroid Build Coastguard Worker 56*61c4878aSAndroid Build Coastguard Worker Args: 57*61c4878aSAndroid Build Coastguard Worker base: Dict of flags to use as the starting point. Typically one of 58*61c4878aSAndroid Build Coastguard Worker the dictionaries provided in @pigweed//pw_build:backends.bzl. 59*61c4878aSAndroid Build Coastguard Worker override: Dict of overrides or additions to the base dict. 60*61c4878aSAndroid Build Coastguard Worker """ 61*61c4878aSAndroid Build Coastguard Worker return (base | override).keys() 62