1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project 2*7594170eSAndroid Build Coastguard Worker# 3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*7594170eSAndroid Build Coastguard Worker# 7*7594170eSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*7594170eSAndroid Build Coastguard Worker# 9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*7594170eSAndroid Build Coastguard Worker# limitations under the License. 14*7594170eSAndroid Build Coastguard Worker 15*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:paths.bzl", "paths") 16*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo") 17*7594170eSAndroid Build Coastguard Workerload(":aconfig_value_set.bzl", "AconfigValueSetInfo") 18*7594170eSAndroid Build Coastguard Workerload(":aconfig_value_sets.bzl", "AconfigValueSetsInfo") 19*7594170eSAndroid Build Coastguard Worker 20*7594170eSAndroid Build Coastguard WorkerAconfigDeclarationsInfo = provider(fields = [ 21*7594170eSAndroid Build Coastguard Worker "package", 22*7594170eSAndroid Build Coastguard Worker "intermediate_path", 23*7594170eSAndroid Build Coastguard Worker]) 24*7594170eSAndroid Build Coastguard Worker 25*7594170eSAndroid Build Coastguard Workerdef _aconfig_declarations_rule_impl(ctx): 26*7594170eSAndroid Build Coastguard Worker value_files = [] 27*7594170eSAndroid Build Coastguard Worker transitive = [] 28*7594170eSAndroid Build Coastguard Worker for value_set in ctx.attr._value_sets[AconfigValueSetsInfo].value_sets: 29*7594170eSAndroid Build Coastguard Worker value_set_info = value_set[AconfigValueSetInfo].available_packages.get(ctx.attr.package) 30*7594170eSAndroid Build Coastguard Worker if value_set_info != None: 31*7594170eSAndroid Build Coastguard Worker value_files.extend(value_set_info.to_list()) 32*7594170eSAndroid Build Coastguard Worker transitive.append(value_set_info) 33*7594170eSAndroid Build Coastguard Worker 34*7594170eSAndroid Build Coastguard Worker output = ctx.actions.declare_file(paths.join(ctx.label.name, "intermediate.pb")) 35*7594170eSAndroid Build Coastguard Worker 36*7594170eSAndroid Build Coastguard Worker args = ctx.actions.args() 37*7594170eSAndroid Build Coastguard Worker args.add("create-cache") 38*7594170eSAndroid Build Coastguard Worker args.add_all(["--package", ctx.attr.package]) 39*7594170eSAndroid Build Coastguard Worker for src in ctx.files.srcs: 40*7594170eSAndroid Build Coastguard Worker args.add_all(["--declarations", src.path]) 41*7594170eSAndroid Build Coastguard Worker for value in value_files: 42*7594170eSAndroid Build Coastguard Worker args.add_all(["--values", value]) 43*7594170eSAndroid Build Coastguard Worker args.add_all(["--default-permission", ctx.attr._default_permission[BuildSettingInfo].value]) 44*7594170eSAndroid Build Coastguard Worker args.add_all(["--cache", output.path]) 45*7594170eSAndroid Build Coastguard Worker 46*7594170eSAndroid Build Coastguard Worker inputs = depset( 47*7594170eSAndroid Build Coastguard Worker direct = ctx.files.srcs, 48*7594170eSAndroid Build Coastguard Worker transitive = transitive, 49*7594170eSAndroid Build Coastguard Worker ) 50*7594170eSAndroid Build Coastguard Worker 51*7594170eSAndroid Build Coastguard Worker ctx.actions.run( 52*7594170eSAndroid Build Coastguard Worker inputs = inputs, 53*7594170eSAndroid Build Coastguard Worker executable = ctx.executable._aconfig, 54*7594170eSAndroid Build Coastguard Worker outputs = [output], 55*7594170eSAndroid Build Coastguard Worker arguments = [args], 56*7594170eSAndroid Build Coastguard Worker mnemonic = "AconfigCreateCache", 57*7594170eSAndroid Build Coastguard Worker ) 58*7594170eSAndroid Build Coastguard Worker 59*7594170eSAndroid Build Coastguard Worker return [ 60*7594170eSAndroid Build Coastguard Worker DefaultInfo(files = depset(direct = [output])), 61*7594170eSAndroid Build Coastguard Worker AconfigDeclarationsInfo( 62*7594170eSAndroid Build Coastguard Worker package = ctx.attr.package, 63*7594170eSAndroid Build Coastguard Worker intermediate_path = output, 64*7594170eSAndroid Build Coastguard Worker ), 65*7594170eSAndroid Build Coastguard Worker ] 66*7594170eSAndroid Build Coastguard Worker 67*7594170eSAndroid Build Coastguard Workeraconfig_declarations = rule( 68*7594170eSAndroid Build Coastguard Worker implementation = _aconfig_declarations_rule_impl, 69*7594170eSAndroid Build Coastguard Worker attrs = { 70*7594170eSAndroid Build Coastguard Worker "srcs": attr.label_list( 71*7594170eSAndroid Build Coastguard Worker mandatory = True, 72*7594170eSAndroid Build Coastguard Worker allow_files = True, 73*7594170eSAndroid Build Coastguard Worker ), 74*7594170eSAndroid Build Coastguard Worker "package": attr.string(mandatory = True), 75*7594170eSAndroid Build Coastguard Worker "_aconfig": attr.label( 76*7594170eSAndroid Build Coastguard Worker allow_single_file = True, 77*7594170eSAndroid Build Coastguard Worker executable = True, 78*7594170eSAndroid Build Coastguard Worker cfg = "exec", 79*7594170eSAndroid Build Coastguard Worker default = Label("//build/make/tools/aconfig:aconfig"), 80*7594170eSAndroid Build Coastguard Worker ), 81*7594170eSAndroid Build Coastguard Worker "_value_sets": attr.label( 82*7594170eSAndroid Build Coastguard Worker default = "//build/bazel/product_config:release_aconfig_value_sets", 83*7594170eSAndroid Build Coastguard Worker providers = [AconfigValueSetsInfo], 84*7594170eSAndroid Build Coastguard Worker ), 85*7594170eSAndroid Build Coastguard Worker "_release_version": attr.label( 86*7594170eSAndroid Build Coastguard Worker default = "//build/bazel/product_config:release_version", 87*7594170eSAndroid Build Coastguard Worker ), 88*7594170eSAndroid Build Coastguard Worker "_default_permission": attr.label( 89*7594170eSAndroid Build Coastguard Worker default = "//build/bazel/product_config:release_aconfig_flag_default_permission", 90*7594170eSAndroid Build Coastguard Worker ), 91*7594170eSAndroid Build Coastguard Worker }, 92*7594170eSAndroid Build Coastguard Worker provides = [AconfigDeclarationsInfo], 93*7594170eSAndroid Build Coastguard Worker) 94