blob: 5c3546920cf507b11204a7b5f8e737a757bf032f [file] [log] [blame]
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
declare_args() {
# The input to the size checker.
# The build system will produce a JSON file to be consumed by the size checker, which
# will check and prevent integration of subsystems that are over their space allocation.
# The input consists of the following keys:
#
# asset_ext(string array): a list of extensions that should be considered as assets.
#
# asset_limit(number): maximum size (in bytes) allocated for the assets.
#
# core_limit(number): maximum size (in bytes) allocated for the core system and/or services.
# This is sort of a "catch all" component that consists of all the area / packages that weren't
# specified in the components list below.
#
# components(object array): a list of component objects. Each object should contain the following keys:
#
# component(string): name of the component.
#
# src(string array): path of the area / package to be included as part of the component.
# The path should be relative to the obj/ in the output directory.
# For example, consider two packages foo and far, built to out/.../obj/some_big_component/foo and out/.../obj/some_big_component/bar.
# If you want to impose a limit on foo, your src will be ["some_big_component/foo"].
# If you want to impose a limit on both foo and far, your src will be ["some_big_component"].
# If a package has config-data, those prebuilt blobs actually live under the config-data package.
# If you wish to impose a limit of those data as well, you should add "build/images/config-data/$for_pkg" to your src.
# The $for_pkg corresponds to the $for_pkg field in config.gni.
#
# limit(number): maximum size (in bytes) allocated for the component.
#
# Example:
# size_checker_input = {
# asset_ext = [ ".ttf" ]
# asset_limit = 10240
# core_limit = 10240
# components = [
# {
# component = "Foo"
# src = [ "topaz/runtime/foo_runner" ]
# limit = 10240
# },
# {
# component = "Bar"
# src = [ "build/images" ]
# limit = 20480
# },
# ]
# }
size_checker_input = {
}
}
import("//build/go/go_binary.gni")
import("//build/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/host.gni")
group("cmd") {
testonly = true
public_deps = [
":host",
":tests",
]
}
generated_file("size_checker_json") {
outputs = [ "$root_build_dir/size_checker.json" ]
contents = size_checker_input
output_conversion = "json"
}
go_library("size_checker_lib") {
sources = [
"size_checker.go",
"size_checker_test.go",
]
}
go_binary("size_checker") {
gopackage = "go.fuchsia.dev/fuchsia/tools/size_checker/cmd"
deps = [ ":size_checker_lib" ]
non_go_deps = [ ":size_checker_json" ]
}
if (is_host) {
go_test("size_checker_tests") {
gopackages = [ "go.fuchsia.dev/fuchsia/tools/size_checker/cmd" ]
deps = [ ":size_checker_lib" ]
}
}
install_host_tools("host") {
deps = [ ":size_checker" ]
outputs = [ "size_checker" ]
}
group("tests") {
testonly = true
deps = [
":size_checker_tests($host_toolchain)",
# To be able to run `fx test`.
"//tools/symbolizer($host_toolchain)",
]
}