blob: 07e585cd6b38f567ec1aa6770ee64e6321908e61 [file] [log] [blame]
# Copyright 2018 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.
import("//build/compiled_action.gni")
import("//build/host.gni")
import("//build/python/python_binary.gni")
import("//build/rust/rustc_binary.gni")
import("//build/sdk/sdk_host_tool.gni")
import("//build/testing/golden_files.gni")
import("//tools/cmc/build/cml.gni")
import("//tools/configc/build/config.gni")
if (is_host) {
rustc_binary("configc") {
edition = "2021"
name = "configc"
deps = [
"//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_rust",
"//src/lib/assembly/validate_product",
"//src/lib/fidl/rust/fidl",
"//src/sys/lib/cm_rust",
"//src/sys/lib/cm_types",
"//src/sys/lib/config_encoder",
"//src/sys/pkg/lib/fuchsia-pkg",
"//third_party/rust_crates:anyhow",
"//third_party/rust_crates:argh",
"//third_party/rust_crates:camino",
"//third_party/rust_crates:serde_json",
"//third_party/rust_crates:serde_json5",
"//tools/lib/config_client",
"//tools/lib/config_value_file",
]
sources = [
"src/client_cpp.rs",
"src/client_fidl.rs",
"src/client_rust.rs",
"src/common.rs",
"src/cvf.rs",
"src/cvm.rs",
"src/dump_values.rs",
"src/main.rs",
"src/validate_package.rs",
]
}
sdk_host_tool("configc_sdk") {
category = "partner"
output_name = "configc"
# depending on :configc doesn't work, need one of the gen'd targets
deps = [ ":configc.actual" ]
}
install_host_tools("install") {
deps = [ ":configc" ]
outputs = [ "configc" ]
}
python_binary("validate_config_wrapper") {
main_source = "build/validate_config.py"
sources = []
}
}
# Config Library Golden Tests
cm("config_manifest") {
manifest = "goldens/config_manifest.cml"
output_name = "config_manifest.cm"
config_values_package_path = "goldens/config_values.json5"
}
fidl_config_client_lib_source("fidl_config_lib") {
manifest_outputs = get_target_outputs(":config_manifest")
compiled_manifest = manifest_outputs[0]
name = "my.config.lib"
deps = [ ":config_manifest" ]
testonly = true
}
rust_config_client_lib_source("rust_config_lib") {
manifest_outputs = get_target_outputs(":config_manifest")
compiled_manifest = manifest_outputs[0]
fidl_library_name = "my.config.lib"
deps = [ ":config_manifest" ]
testonly = true
}
cpp_config_client_lib_source("cpp_elf_config_lib") {
manifest_outputs = get_target_outputs(":config_manifest")
compiled_manifest = manifest_outputs[0]
fidl_library_name = "my.config.lib"
deps = [ ":config_manifest" ]
flavor = "elf"
testonly = true
}
_cm = get_target_outputs(":config_manifest")
_cm = _cm[0]
cvf("example_values") {
cm = _cm
value_file = "goldens/config_values.json5"
deps = [ ":config_manifest" ]
}
_cvf = get_target_outputs(":example_values")
_cvf = _cvf[0]
_dumped_values = "$target_out_dir/dumped_values.json"
dump_structured_config("dump_example_values") {
cm = _cm
cvf = _cvf
output = _dumped_values
deps = [
":config_manifest",
":example_values",
]
}
fidl_lib_outputs = get_target_outputs(":fidl_config_lib")
rust_lib_outputs = get_target_outputs(":rust_config_lib")
cpp_elf_lib_outputs = get_target_outputs(":cpp_elf_config_lib")
golden_files("golden_tests") {
testonly = true
comparisons = [
{
golden = "goldens/config.fidl.golden"
candidate = fidl_lib_outputs[0]
},
{
golden = "goldens/config.rs.golden"
candidate = rust_lib_outputs[0]
},
{
golden = "goldens/config.cc.elf.golden"
candidate = cpp_elf_lib_outputs[0]
},
{
golden = "goldens/config.h.elf.golden"
candidate = cpp_elf_lib_outputs[1]
},
{
golden = "goldens/dumped_values.json.golden"
candidate = _dumped_values
},
]
deps = [
":cpp_elf_config_lib",
":dump_example_values",
":fidl_config_lib",
":rust_config_lib",
]
}
group("tests") {
testonly = true
deps = [ ":golden_tests" ]
}
if (is_host) {
group("host_tests") {
testonly = true
deps = [ "tests:fail_validate_without_config" ]
}
}