File: json_data_generator.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 (81 lines) | stat: -rw-r--r-- 2,843 bytes parent folder | download | duplicates (11)
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
# Copyright 2022 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Generates cross-language JSON data from json5 files. Use this generator
# if you want to share JSON data between different languages. The generator
# will render your designate template file with the JSON content.
#
# Variables:
#   sources: (mandatory)
#     The json data source files.
#
#   output_dir: (optional)
#     The output directory for the generated files. By default it will be the
#     $target_gen_dir, which is the directory where the gn task is invoked.
#
#   templates: (mandatory)
#     List of Jinja template files to be generated. The generated file name
#     will be the template file name without the '.jinja' suffix, e.g. template
#     'abc.cc.jinja' will generate 'abc.cc'.
#   template_helper: (optional)
#     A python file to provide custom globals and filters for Jinja templates.
#     Jinja template only supports very limited python expressions, to provide
#     custom globals/filter specific to your source JSON files, you can pass a
#     additional python path to this parameter, the python file you pass must
#     include 2 functions: `get_custom_globals(model)` and
#     `get_custom_filters(model)`, the parsed JSON model will be passed to your
#     custom functions.
#
# Example:
#   json_data_generator("my_json_data") {
#     sources = [ "my_json_data.json5" ]
#     templates = [
#       "my_json_data.cc.jinja",
#       "my_json_data.js.jinja",
#     ]
#     output_dir = "$root_gen_dir/my_dir"
#   }
#
# See README.md for more information.

template("json_data_generator") {
  script_file = "//tools/json_data_generator/main.py"
  common_inputs = [ "//tools/json_data_generator/generator.py" ]

  action(target_name) {
    script = script_file
    forward_variables_from(invoker,
                           [
                             "deps",
                             "sources",
                           ])

    assert(defined(sources), "Source json files must be defined.")
    assert(defined(invoker.templates), "Template files must be defined.")

    inputs = common_inputs + invoker.templates
    output_dir = invoker.output_dir
    if (!defined(invoker.output_dir)) {
      output_dir = target_gen_dir
    }
    outputs = []
    foreach(t, get_path_info(invoker.templates, "name")) {
      outputs += [ "$output_dir/$t" ]
    }

    args =
        [ "--templates" ] + rebase_path(invoker.templates, root_build_dir) + [
          "--out-dir",
          rebase_path(output_dir, root_build_dir),
          "--sources",
        ] + rebase_path(sources, root_build_dir)

    if (defined(invoker.template_helper)) {
      args += [
        "--template-helper",
        rebase_path(invoker.template_helper, root_build_dir),
      ]
    }
  }
}