File: generate_policy_source.gni

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (105 lines) | stat: -rw-r--r-- 3,518 bytes parent folder | download | duplicates (10)
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) ]
    }
  }
}