chromium/tools/style_variable_generator/style_variable_generator.gni

# Copyright 2020 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 style definitions from json5 files. The output files
# will go under the generated file directory tree with the same path as each
# input file.
#
# For input format examples, see the *_test.json5 files which contain
# illustrations of each feature, as well as expected outputs in the
# corresponding *_test_expected.* files.
#
# Other targets should depend on one of these generated targets (where "foo"
# is the target name):
#
#    foo_css
#      CSS Variables
#
#    foo_views
#      Views generation for use with AshColorProvider
#
#    foo_proto
#      Protobuf message schema generation
#
#    foo_protojson
#      Protobuf JSON value format, contains actual color information
template("style_variable_generator") {
  script_file = "//tools/style_variable_generator/main.py"
  original_target_name = target_name
  common_inputs = [
    "//tools/style_variable_generator/base_generator.py",
    "//tools/style_variable_generator/color.py",
  ]

  if (defined(invoker.gen_css)) {
    gen_css = invoker.gen_css
  } else {
    gen_css = true
  }

  if (defined(invoker.gen_views)) {
    gen_views = invoker.gen_views
  } else {
    gen_views = true
  }

  if (gen_css) {
    action("${target_name}_css") {
      script = script_file
      forward_variables_from(invoker,
                             [
                               "deps",
                               "sources",
                             ])

      inputs =
          common_inputs + [
            "//tools/style_variable_generator/css_generator.py",
            "//tools/style_variable_generator/templates/css_generator.tmpl",
          ]
      out_file = "$target_gen_dir/${original_target_name}.css"
      outputs = [ out_file ]

      args = [
               "--generator=CSS",
               "--out-file",
               rebase_path(out_file, root_build_dir),
             ] + rebase_path(sources, root_build_dir)
    }
  }

  if (gen_views) {
    action("${target_name}_views_generator") {
      script = script_file
      forward_variables_from(invoker,
                             [
                               "deps",
                               "sources",
                               "cpp_namespace",
                             ])

      inputs = common_inputs + [
                 "//tools/style_variable_generator/views_generator.py",
                 "//tools/style_variable_generator/templates/views_generator_cc.tmpl",
                 "//tools/style_variable_generator/templates/views_generator_h.tmpl",
               ]
      out_file_cc = "$target_gen_dir/${original_target_name}.cc"
      out_file_h = "$target_gen_dir/${original_target_name}.h"
      outputs = [
        out_file_cc,
        out_file_h,
      ]
      args = [
               "--generator=ViewsCC",
               "--generator-option",
               "cpp_namespace=$cpp_namespace",
               "--out-file",
               rebase_path(out_file_cc, root_build_dir),
               "--generator=ViewsH",
               "--out-file",
               rebase_path(out_file_h, root_build_dir),
             ] + rebase_path(sources, root_build_dir)
    }

    component("${target_name}_views") {
      sources = [
        "$target_gen_dir/${original_target_name}.cc",
        "$target_gen_dir/${original_target_name}.h",
      ]
      deps = [
        ":${original_target_name}_views_generator",
        "//base",
        "//skia",
      ]
      defines = [ "IS_${original_target_name}_IMPL" ]
    }

    if (defined(invoker.color_id_start_value)) {
      action("${target_name}_color_mappings_generator") {
        script = script_file
        forward_variables_from(invoker,
                               [
                                 "deps",
                                 "sources",
                                 "cpp_namespace",
                                 "color_id_start_value",
                               ])
        inputs = common_inputs + [
                   "//tools/style_variable_generator/color_mappings_generator.py",
                   "//tools/style_variable_generator/templates/color_mappings_generator_cc.tmpl",
                   "//tools/style_variable_generator/templates/color_mappings_generator_h.tmpl",
                 ]
        out_file_cc =
            "$target_gen_dir/${original_target_name}_color_mappings.cc"
        out_file_h = "$target_gen_dir/${original_target_name}_color_mappings.h"
        outputs = [
          out_file_cc,
          out_file_h,
        ]
        args = [
                 "--generator-option",
                 "cpp_namespace=$cpp_namespace",
                 "--generator-option",
                 "color_id_start_value=$color_id_start_value",
                 "--generator=ColorMappingsCC",
                 "--out-file",
                 rebase_path(out_file_cc, root_build_dir),
                 "--generator=ColorMappingsH",
                 "--out-file",
                 rebase_path(out_file_h, root_build_dir),
               ] + rebase_path(sources, root_build_dir)
      }

      component("${target_name}_color_mappings") {
        sources = [
          "$target_gen_dir/${original_target_name}_color_mappings.cc",
          "$target_gen_dir/${original_target_name}_color_mappings.h",
        ]
        deps = [
          ":${original_target_name}_color_mappings_generator",
          "//base",
          "//skia",
          "//ui/color",
        ]
        defines = [ "IS_${original_target_name}_COLOR_MAPPINGS_IMPL" ]
      }
    }
  }

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

    inputs = common_inputs + [
               "//tools/style_variable_generator/proto_generator.py",
               "//tools/style_variable_generator/templates/json_generator.tmpl",
             ]
    out_file = "$target_gen_dir/${original_target_name}.json"
    outputs = [ out_file ]

    args = [
             "--generator=json",
             "--out-file",
             rebase_path(out_file, root_build_dir),
           ] + rebase_path(sources, root_build_dir)
  }
}