1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//chrome/version.gni")
import("//components/policy/resources/policy_templates.gni")
# Generate .proto files and constants based on policy_templates.json.
#
# Parameters:
#
# chunking (required, boolean)
# Split excess policies into `subProto1`, `subProto2`, etc.
#
# generate_cc (optional, default true)
# Generate C++ source/header files.
#
# generate_app_restrictions (optional, default true)
# Generate app_restrictions.xml (only on Android).
template("generate_policy_source") {
assert(defined(invoker.chunking))
chunking = invoker.chunking
if (defined(invoker.generate_cc)) {
generate_cc = invoker.generate_cc
} else {
generate_cc = true
}
if (defined(invoker.generate_app_restrictions)) {
generate_app_restrictions = invoker.generate_app_restrictions
} else {
generate_app_restrictions = true
}
action(target_name) {
# This protobuf is equivalent to chrome_settings.proto but shares messages
# for policies of the same type, so that less classes have to be generated
# and compiled.
cloud_policy_proto_path = "$target_gen_dir/proto/cloud_policy.proto"
# This is the "full" protobuf, which defines one protobuf message per
# policy. It is also the format currently used by the server.
chrome_settings_proto_path = "$target_gen_dir/proto/chrome_settings.proto"
policy_templates_generated_json_path =
"$policy_templates_base_dir/policy_templates.json"
script = "//components/policy/tools/generate_policy_source.py"
deps = [ "//components/policy:generate_policy_templates" ]
inputs = [ policy_templates_generated_json_path ]
outputs = [
chrome_settings_proto_path,
cloud_policy_proto_path,
]
args = [
# Input information.
"--chrome-version-major=" + chrome_version_major,
"--policy-templates-file=" +
rebase_path(policy_templates_generated_json_path, root_build_dir),
"--target-platform=" + target_os,
]
if (!chunking) {
args += [ "--no-chunking" ]
}
args += [
# Output .proto files to be generated.
"--chrome-settings-protobuf=" +
rebase_path(chrome_settings_proto_path, root_build_dir),
"--cloud-policy-protobuf=" +
rebase_path(cloud_policy_proto_path, root_build_dir),
]
if (generate_cc) {
# Generate C++ headers/sources.
constants_header_path = "$target_gen_dir/policy_constants.h"
constants_source_path = "$target_gen_dir/policy_constants.cc"
risk_tag_header_path = "$target_gen_dir/risk_tag.h"
outputs += [
constants_header_path,
constants_source_path,
risk_tag_header_path,
]
args += [
"--policy-constants-header=" +
rebase_path(constants_header_path, root_build_dir),
"--policy-constants-source=" +
rebase_path(constants_source_path, root_build_dir),
"--risk-tag-header=" +
rebase_path(risk_tag_header_path, root_build_dir),
]
}
if (generate_app_restrictions && target_os == "android") {
# Generate app_restrictions.xml.
app_restrictions_path = "$target_gen_dir/app_restrictions.xml"
outputs += [ app_restrictions_path ]
args += [ "--app-restrictions-definition=" +
rebase_path(app_restrictions_path, root_build_dir) ]
}
}
}
|