chromium/components/variations/proto/devtools/BUILD.gn

# 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.

import("//build/config/chromeos/ui_mode.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//third_party/closure_compiler/closure_args.gni")
import("//third_party/closure_compiler/compile_js.gni")

# Some of the Windows builders do not support Java, which is a required
# dependency for this build target. The fuzzable_proto_library doesn't support
# building JS protos when we're using a fuzzing engine that supports
# libprotobuf-mutator, such as libfuzzer. This target is only built
# manually, so it's fine to limit it to Linux non-fuzzer builds.
if (is_linux && !use_fuzzing_engine_with_lpm) {
  # Build this target to generate a small, self-contained utility for parsing a
  # serialized ClientVariations proto from the X-Client-Data header.
  #
  # Run components/variations/proto/devtools/update_client_variations_parser.py
  # to rebuild the library that is synced into the Dev Tools repository.
  group("devtools") {
    deps = [ ":client_variations_uncompiled" ]
  }

  # Note that the name passed to the `js_binary` rule implicitly defines a
  # dependency on the file that matches the build rule's name.
  js_binary("client_variations_uncompiled") {
    outputs = [ "$target_gen_dir/client_variations_gen.js" ]
    deps = [ "..:proto_js" ]
    closure_flags = strict_error_checking_closure_args + [
                      "compilation_level=ADVANCED_OPTIMIZATIONS",
                      "browser_featureset_year=2020",
                      "generate_exports",
                      "export_local_property_definitions",
                      "isolation_mode=IIFE",
                      "jscomp_warning=checkTypes",
                      "jscomp_warning=deprecatedAnnotations",
                      "jscomp_warning=deprecated",
                    ]
  }
}