|  | # Copyright 2020 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/config/clang/clang.gni") | 
|  | import("//build/config/fuchsia-sdk.gni") | 
|  | import("//build/shellscript_test.gni") | 
|  | import("//third_party/fuchsia-sdk/build/build_id_dir.gni") | 
|  | import("//third_party/fuchsia-sdk/build/cipd.gni") | 
|  | import("//third_party/fuchsia-sdk/build/component.gni") | 
|  | import("//third_party/fuchsia-sdk/build/package.gni") | 
|  |  | 
|  | executable("hello_bin") { | 
|  | sources = [ "hello.cc" ] | 
|  | } | 
|  |  | 
|  | executable("renamed_exe") { | 
|  | sources = [ "hello.cc" ] | 
|  | output_name = "hello" | 
|  | } | 
|  |  | 
|  | # Merge 2 cmx files | 
|  | cmc_merge("merge_cmx") { | 
|  | sources = [ | 
|  | "meta/part1.cmx", | 
|  | "meta/part2.cmx", | 
|  | ] | 
|  | output_name = "combined.cmx" | 
|  | } | 
|  |  | 
|  | cmc_validate("validate_merged") { | 
|  | merged_output = get_target_outputs(":merge_cmx") | 
|  | manifest = merged_output[0] | 
|  | deps = [ ":merge_cmx" ] | 
|  | } | 
|  |  | 
|  | # Invalid cmx, building this label will fail | 
|  | fuchsia_component("invalid_cmx_test") { | 
|  | manifest = "meta/invalid.cmx" | 
|  | } | 
|  |  | 
|  | # Produces meta/test_component.cmx | 
|  | fuchsia_component("test_component_cmx") { | 
|  | manifest = "meta/test_component.cmx" | 
|  | data_deps = [ ":renamed_exe" ] | 
|  | } | 
|  |  | 
|  | # Produces meta/test_component_renamed.cmx | 
|  | fuchsia_component("test_component_renamed_cmx") { | 
|  | manifest = "meta/test_component.cmx" | 
|  | manifest_output_name = "test_component_renamed" | 
|  | data_deps = [ ":hello_bin" ] | 
|  | } | 
|  |  | 
|  | # Produces meta/test_component.cm | 
|  | fuchsia_component("test_component_cm") { | 
|  | manifest = "meta/test_component.cml" | 
|  | data_deps = [ ":hello_bin" ] | 
|  | } | 
|  |  | 
|  | # Produces meta/test_component_renamed.cm | 
|  | fuchsia_component("test_component_renamed_cm") { | 
|  | manifest = "meta/test_component.cml" | 
|  | manifest_output_name = "test_component_renamed" | 
|  | data_deps = [ ":hello_bin" ] | 
|  | } | 
|  |  | 
|  | fuchsia_component("vk_validation_component") { | 
|  | manifest = "meta/test_component.cmx" | 
|  | manifest_output_name = "vk_validation" | 
|  | data_deps = [ | 
|  | ":hello_bin", | 
|  | "//build:vulkan_validation", | 
|  | ] | 
|  | } | 
|  |  | 
|  | fuchsia_component("with_resources") { | 
|  | manifest = "meta/test_component.cmx" | 
|  | manifest_output_name = "resource-user" | 
|  | data_deps = [ ":hello_bin" ] | 
|  | resources = [ | 
|  | { | 
|  | path = "resources.txt" | 
|  | dest = "data/resources.txt" | 
|  | }, | 
|  | ] | 
|  | } | 
|  |  | 
|  | declare_args() { | 
|  | do_rename_test = false | 
|  | } | 
|  |  | 
|  | # Produces meta/overridden_name.cmx | 
|  | fuchsia_component("test_override_component") { | 
|  | manifest = "meta/original.cmx" | 
|  | if (do_rename_test) { | 
|  | manifest_output_name = "overridden_name" | 
|  | } | 
|  | data_deps = [ ":hello_bin" ] | 
|  | } | 
|  |  | 
|  | fuchsia_package("simple_package_v1") { | 
|  | deps = [ ":test_component_cmx" ] | 
|  | } | 
|  |  | 
|  | fuchsia_package("simple_package_v2") { | 
|  | deps = [ ":test_component_cm" ] | 
|  | } | 
|  |  | 
|  | fuchsia_package("package") { | 
|  | deps = [ | 
|  | ":test_component_renamed_cm", | 
|  | ":test_component_renamed_cmx", | 
|  | ":test_override_component", | 
|  | ] | 
|  | } | 
|  |  | 
|  | fuchsia_package("package_with_vk") { | 
|  | deps = [ ":vk_validation_component" ] | 
|  | } | 
|  |  | 
|  | fuchsia_package("resource_pkg") { | 
|  | deps = [ ":with_resources" ] | 
|  | } | 
|  |  | 
|  | # Test the CIPD packaging and build-id dir generation. | 
|  |  | 
|  | fuchsia_cipd_package("cipd_package") { | 
|  | package_definition_name = "cipd.yaml" | 
|  | package = "test/fuchsia/cipd-\${targetarch}" | 
|  | description = "Test package for CIPD rule template." | 
|  |  | 
|  | # Use absolute root path. This models how things are built and then cipd is | 
|  | # run outside the GN/ninja environment, so root_build_dir is not known to | 
|  | # the process running cipd. | 
|  | use_absolute_root_path = true | 
|  |  | 
|  | deps = [ ":package" ] | 
|  |  | 
|  | sources = [ "${root_gen_dir}/tests/package/package/package.far" ] | 
|  | } | 
|  |  | 
|  | # | 
|  | # Create a .build-id directory to contain all the unstripped binaries | 
|  | # for the Fucshia packages being uploaded to CIPD. | 
|  | # | 
|  | _build_ids_path = "${root_build_dir}/cipd/.build-id" | 
|  | build_id_dir(".build-id") { | 
|  | output_path = _build_ids_path | 
|  |  | 
|  | # Include symbols from clang as well | 
|  | build_id_dirs = [ "${clang_base_path}/lib/debug/.build-id" ] | 
|  | deps = [ ":package" ] | 
|  | } | 
|  |  | 
|  | # | 
|  | # Package all the symbols for all Fuchsia packages into a single | 
|  | # CIPD package. | 
|  | # This is a little different since the package root is the | 
|  | # $_build_ids_path, and we want all the contents of it. | 
|  | # so we add the "." directory. | 
|  | fuchsia_cipd_package("debug_symbols") { | 
|  | package_definition_name = "debug_symbols.yaml" | 
|  | package_definition_dir = "${target_gen_dir}/${target_name}" | 
|  | package = "test/fuchsia/debug-symbols-\${targetarch}" | 
|  | description = "Debugging symbols for prebuilt binaries from tests." | 
|  | package_root = _build_ids_path | 
|  |  | 
|  | # Include the .build-id directory, which is at the root. | 
|  | directories = [ "." ] | 
|  |  | 
|  | deps = [ ":.build-id" ] | 
|  | } | 
|  |  | 
|  | # Copy far.sh to the output dir. This script is used | 
|  | # in the static analysis test. | 
|  | # manifest_check.sh looks for a specific manifest file. | 
|  | copy("copy_test_scripts") { | 
|  | sources = [ | 
|  | "//tests/package/cipd_check.sh", | 
|  | "//tests/package/far.sh", | 
|  | "//tests/package/manifest_check.sh", | 
|  | "//tests/package/symbol_check.sh", | 
|  | ] | 
|  | outputs = [ "${target_gen_dir}/{{source_file_part}}" ] | 
|  | } | 
|  |  | 
|  | _packages = [ | 
|  | "package", | 
|  | "simple_package_v2", | 
|  | "simple_package_v1", | 
|  | "package_with_vk", | 
|  | "resource_pkg", | 
|  | ] | 
|  |  | 
|  | foreach(pkg, _packages) { | 
|  | # Static far analysis test. | 
|  | shellscript_test("package_analysis_test_$pkg") { | 
|  | script_template_file = "run_package_analysis_test_template.txt" | 
|  | template_keys = [ | 
|  | "script_path", | 
|  | "far_bin_path", | 
|  | "package_name", | 
|  | ] | 
|  | template_data = { | 
|  | script_path = rebase_path("${target_gen_dir}/far.sh") | 
|  | far_bin_path = rebase_path("${tools_out_dir}/far") | 
|  | package_name = rebase_path("${target_gen_dir}/$pkg/$pkg") | 
|  | } | 
|  | data_deps = [ | 
|  | ":$pkg", | 
|  | ":copy_test_scripts", | 
|  | "//build:sdk_tools", | 
|  | ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # Static far analysis test. | 
|  | shellscript_test("manifest_check_test") { | 
|  | script_template_file = "run_package_analysis_test_template.txt" | 
|  | template_keys = [ | 
|  | "script_path", | 
|  | "far_bin_path", | 
|  | "package_name", | 
|  | "manifest_name", | 
|  | ] | 
|  | template_data = { | 
|  | script_path = rebase_path("${target_gen_dir}/manifest_check.sh") | 
|  | far_bin_path = rebase_path("${tools_out_dir}/far") | 
|  | package_name = rebase_path("${target_gen_dir}/package/package") | 
|  | if (do_rename_test) { | 
|  | manifest_name = "overridden_name.cmx" | 
|  | } else { | 
|  | manifest_name = "original.cmx" | 
|  | } | 
|  | } | 
|  | data_deps = [ | 
|  | ":copy_test_scripts", | 
|  | ":package", | 
|  | "//build:sdk_tools", | 
|  | ] | 
|  | } | 
|  |  | 
|  | shellscript_test("resource_check_test") { | 
|  | script_template_file = "run_package_analysis_test_template.txt" | 
|  | template_keys = [ | 
|  | "script_path", | 
|  | "far_bin_path", | 
|  | "package_name", | 
|  | "manifest_name", | 
|  | ] | 
|  | template_data = { | 
|  | script_path = rebase_path("${target_gen_dir}/manifest_check.sh") | 
|  | far_bin_path = rebase_path("${tools_out_dir}/far") | 
|  | package_name = rebase_path("${target_gen_dir}/resource_pkg/resource_pkg") | 
|  | manifest_name = "data/resources.txt" | 
|  | } | 
|  | data_deps = [ | 
|  | ":copy_test_scripts", | 
|  | ":resource_pkg", | 
|  | "//build:sdk_tools", | 
|  | ] | 
|  | } | 
|  |  | 
|  | shellscript_test("vk_check_test") { | 
|  | script_template_file = "run_package_analysis_test_template.txt" | 
|  | template_keys = [ | 
|  | "script_path", | 
|  | "far_bin_path", | 
|  | "package_name", | 
|  | "manifest_name", | 
|  | ] | 
|  | template_data = { | 
|  | script_path = rebase_path("${target_gen_dir}/manifest_check.sh") | 
|  | far_bin_path = rebase_path("${tools_out_dir}/far") | 
|  | package_name = | 
|  | rebase_path("${target_gen_dir}/package_with_vk/package_with_vk") | 
|  | manifest_name = "lib/VkLayer_khronos_validation.so data/vulkan/explicit_layer.d/VkLayer_khronos_validation.json" | 
|  | } | 
|  | data_deps = [ | 
|  | ":copy_test_scripts", | 
|  | ":package_with_vk", | 
|  | "//build:sdk_tools", | 
|  | ] | 
|  | } | 
|  |  | 
|  | shellscript_test("verify_cipd") { | 
|  | script_template_file = "run_verify_cipd_template.txt" | 
|  | template_keys = [ | 
|  | "cipd_script_path", | 
|  | "cipd_package", | 
|  | "symbols_script_path", | 
|  | "symbols_package", | 
|  | "out_dir", | 
|  | ] | 
|  | template_data = { | 
|  | cipd_script_path = rebase_path("${target_gen_dir}/cipd_check.sh") | 
|  | cipd_package = | 
|  | rebase_path("${root_gen_dir}/tests/package/cipd_package/cipd.yaml") | 
|  | symbols_script_path = rebase_path("${target_gen_dir}/symbol_check.sh") | 
|  | symbols_package = rebase_path( | 
|  | "${root_gen_dir}/tests/package/debug_symbols/debug_symbols.yaml") | 
|  | out_dir = rebase_path(root_out_dir) | 
|  | } | 
|  | data_deps = [ | 
|  | ":cipd_package", | 
|  | ":copy_test_scripts", | 
|  | ":debug_symbols", | 
|  | ] | 
|  | } | 
|  |  | 
|  | group("tests") { | 
|  | testonly = true | 
|  | deps = [ | 
|  | ":manifest_check_test", | 
|  | ":resource_check_test", | 
|  | ":validate_merged", | 
|  | ":verify_cipd", | 
|  | ":vk_check_test", | 
|  | ] | 
|  | foreach(pkg, _packages) { | 
|  | deps += [ ":package_analysis_test_$pkg" ] | 
|  | } | 
|  | } |