| # Copyright 2019 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Build targets for constructing CIPD release archives. |
| |
| assert(is_fuchsia) |
| |
| import("//build/cipd/cipd.gni") |
| import("//build/config/chrome_build.gni") |
| import("//build/util/process_version.gni") |
| import("//third_party/fuchsia-sdk/sdk/build/build_id_dir.gni") |
| import("//third_party/fuchsia-sdk/sdk/build/cipd.gni") |
| |
| visibility = [ ":*" ] |
| |
| # Allows a builder to explicitly declare the CIPD path. The base path is what |
| # comes after `.../p/` in the CIPD URL. |
| declare_args() { |
| fuchsia_cipd_package_base_path = "" |
| } |
| |
| # TODO(zijiehe): Eliminate the use of 'package_base_path' during the |
| # refactoring. |
| if (fuchsia_cipd_package_base_path == "") { |
| if (is_chrome_branded) { |
| package_base_path = "chrome_internal/fuchsia" |
| } else { |
| package_base_path = "chromium/fuchsia" |
| } |
| } else { |
| package_base_path = fuchsia_cipd_package_base_path |
| } |
| |
| # Archives related specifically to `fuchsia.web` |
| _web_engine_directory = "web_engine" |
| |
| # Archives related specifically to Chrome browser. |
| _chrome_directory = "chrome" |
| |
| # Archives of tools intended to be run on a Linux/Mac host rather than the |
| # Fuchsia device. |
| _host_tools_directory = "host_tools" |
| |
| _archive_suffix = "_archive" |
| |
| # Extracts the numeric Chrome version and writes it to a file in the output |
| # directory. |
| # |
| # To check out the repository on the commit where the version was generated, |
| # simply call `git checkout <version>`, and Git will check out the commit |
| # associated with the <version> tag. |
| process_version("version") { |
| template_file = "version.template" |
| sources = [ "//chrome/VERSION" ] |
| output = "${target_gen_dir}/VERSION" |
| process_only = true |
| } |
| |
| if (target_cpu == "x64") { |
| targetarch = "amd64" |
| } else { |
| targetarch = "arm64" |
| } |
| |
| # Prepares a CIPD archive, produces a corresponding LICENSE file, |
| # LICENSE.spdx.json file and generates a manifest file. |
| # |
| # Parameters: |
| # package_subdirectory: Specify the subdirectory relative to |
| # |package_base_path| in which the package is put. |
| # description: Sets the "description" field in CIPD package definition. |
| # |
| # Optional parameters used directly by fuchsia_cipd_package template: |
| # "install_mode", |
| # "sources", |
| # "data", |
| # "data_deps" |
| # "deps", |
| # "testonly", |
| |
| template("cipd_archive") { |
| forward_variables_from(invoker, |
| [ |
| "package_subdirectory", |
| "description", |
| "install_mode", |
| "sources", |
| "data", |
| "data_deps", |
| "deps", |
| "testonly", |
| ]) |
| |
| _license_path = "${target_gen_dir}/${target_name}/LICENSE" |
| _invoker_dir = get_label_info(":${invoker.target_name}", "dir") |
| _license_target = "${_invoker_dir}:${invoker.target_name}${_archive_suffix}" |
| |
| # GN is used by the script and is thus an input. |
| if (host_os == "mac") { |
| _gn_path = "//buildtools/mac/gn" |
| } else if (host_os == "linux") { |
| _gn_path = "//buildtools/linux64/gn" |
| } |
| |
| # Produces a consolidated license file. |
| action("${target_name}_license") { |
| script = "//tools/licenses/licenses.py" |
| inputs = [ "$_gn_path" ] |
| outputs = [ _license_path ] |
| args = [ |
| "license_file", |
| rebase_path(_license_path, root_build_dir), |
| "--gn-target", |
| _license_target, |
| "--gn-out-dir", |
| ".", |
| ] |
| } |
| |
| # Produces a consolidated license file in spdx format. |
| action("${target_name}_license_spdx") { |
| _license_path_spdx = "${_license_path}.spdx.json" |
| |
| script = "//tools/licenses/licenses.py" |
| inputs = [ "$_gn_path" ] |
| outputs = [ _license_path_spdx ] |
| args = [ |
| "license_file", |
| rebase_path(_license_path_spdx, root_build_dir), |
| "--gn-target", |
| _license_target, |
| "--gn-out-dir", |
| ".", |
| "--format", |
| "spdx", |
| "--spdx-doc-name", |
| "${invoker.target_name}", |
| ] |
| } |
| |
| if (!defined(deps)) { |
| deps = [] |
| } |
| deps += [ |
| ":${target_name}_license", |
| ":${target_name}_license_spdx", |
| ":version", |
| ] |
| |
| if (!defined(sources)) { |
| sources = [] |
| } |
| sources += get_target_outputs(":${target_name}_license") + |
| get_target_outputs(":${target_name}_license_spdx") + |
| [ "${target_gen_dir}/VERSION" ] |
| |
| fuchsia_cipd_package("${target_name}${_archive_suffix}") { |
| package = "${package_base_path}/${package_subdirectory}/${targetarch}/${invoker.target_name}" |
| package_root = "${target_gen_dir}/${invoker.target_name}" |
| package_definition_name = "${invoker.target_name}.yaml" |
| |
| # Always use absolute path. |
| use_absolute_root_path = true |
| } |
| } |
| |
| # Prepares a CIPD test archive, which is a regular CIPD archive that generates |
| # test manifests for a given list of test_sets. |
| # |
| # Parameters: |
| # test_sets: A list of scopes for which test manifests will be created. Each |
| # set contains: |
| # manifest_path: The path to the generated manifest JSON file. |
| # far_sources: An optional list of CFv2 test component .far files. |
| # |
| # Required parameters used by the cipd_archive template: |
| # "package_subdirectory", |
| # |
| # Optional parameters used by the cipd_archive template: |
| # "description" |
| # "install_mode", |
| # "data", |
| # "data_deps" |
| # "deps", |
| # "testonly", |
| |
| template("cipd_test_archive") { |
| forward_variables_from(invoker, |
| [ |
| "package_subdirectory", |
| "description", |
| "install_mode", |
| "data", |
| "data_deps", |
| "deps", |
| "testonly", |
| "test_sets", |
| ]) |
| |
| assert(defined(test_sets) && defined(testonly) && testonly == true) |
| |
| cipd_archive(target_name) { |
| # Build JSON manifests for each suite of tests and include them in the |
| # archive. |
| sources = [] |
| foreach(test_set, test_sets) { |
| assert(defined(test_set.far_sources)) |
| sources += [ test_set.manifest_path ] |
| _manifest_contents = [] |
| if (defined(test_set.far_sources)) { |
| foreach(source, test_set.far_sources) { |
| package_name = get_path_info(source, "name") |
| |
| _manifest_contents += [ |
| { |
| package = package_name |
| component_name = package_name + ".cm" |
| }, |
| ] |
| } |
| sources += test_set.far_sources |
| } |
| write_file(test_set.manifest_path, _manifest_contents, "json") |
| } |
| } |
| } |
| |
| cipd_archive("web_engine") { |
| package_subdirectory = _web_engine_directory |
| description = "Prebuilt WebEngine binaries for Fuchsia." |
| |
| deps = [ "//fuchsia_web/webengine:web_engine" ] |
| sources = |
| [ "${root_gen_dir}/fuchsia_web/webengine/web_engine/web_engine.far" ] |
| } |
| |
| cipd_archive("cast_runner") { |
| package_subdirectory = _web_engine_directory |
| description = "Prebuilt Cast application Runner binaries for Fuchsia." |
| |
| deps = [ "//fuchsia_web/runners:cast_runner_pkg" ] |
| sources = |
| [ "${root_gen_dir}/fuchsia_web/runners/cast_runner/cast_runner.far" ] |
| } |
| |
| cipd_archive("web_engine_shell") { |
| package_subdirectory = _web_engine_directory |
| description = "Simple command-line embedder for WebEngine." |
| testonly = true |
| |
| deps = [ "//fuchsia_web/shell:web_engine_shell_pkg" ] |
| sources = [ |
| "${root_gen_dir}/fuchsia_web/shell/web_engine_shell/web_engine_shell.far", |
| ] |
| } |
| |
| _stripped_chromedriver_file = "${root_out_dir}/clang_x64/stripped/chromedriver" |
| |
| action("strip_chromedriver_binary") { |
| testonly = true |
| |
| prog_name = "${root_out_dir}/clang_x64/chromedriver" |
| |
| deps = [ "//chrome/test/chromedriver:chromedriver_server($host_toolchain)" ] |
| script = "//build/gn_run_binary.py" |
| sources = [ |
| "//buildtools/third_party/eu-strip/bin/eu-strip", |
| prog_name, |
| ] |
| outputs = [ _stripped_chromedriver_file ] |
| args = [ |
| rebase_path("//buildtools/third_party/eu-strip/bin/eu-strip", |
| root_build_dir), |
| "-o", |
| rebase_path(_stripped_chromedriver_file, root_build_dir), |
| rebase_path(prog_name, root_build_dir), |
| ] |
| } |
| |
| cipd_archive("chromedriver") { |
| package_subdirectory = "${_host_tools_directory}/\${os}" |
| description = "Prebuilt Chromedriver binary for Fuchsia host." |
| install_mode = "copy" |
| testonly = true |
| |
| deps = [ ":strip_chromedriver_binary" ] |
| sources = [ _stripped_chromedriver_file ] |
| } |
| |
| cipd_test_archive("tests") { |
| package_subdirectory = _web_engine_directory |
| description = "Prebuilt Chromium tests for Fuchsia." |
| testonly = true |
| |
| deps = [ |
| "//base:base_unittests_pkg", |
| "//fuchsia_web/runners:cast_runner_integration_tests_pkg", |
| "//fuchsia_web/webengine:web_engine_integration_tests_pkg", |
| "//ipc:ipc_tests_pkg", |
| "//media:media_unittests_pkg", |
| "//mojo:mojo_unittests_pkg", |
| "//skia:skia_unittests_pkg", |
| "//third_party/blink/common:blink_common_unittests_pkg", |
| ] |
| |
| test_sets = [ |
| { |
| manifest_path = "${target_gen_dir}/test_manifest.json" |
| far_sources = [ |
| "${root_gen_dir}/base/base_unittests/base_unittests.far", |
| "${root_gen_dir}/fuchsia_web/runners/cast_runner_integration_tests/cast_runner_integration_tests.far", |
| "${root_gen_dir}/fuchsia_web/webengine/web_engine_integration_tests/web_engine_integration_tests.far", |
| "${root_gen_dir}/ipc/ipc_tests/ipc_tests.far", |
| "${root_gen_dir}/media/media_unittests/media_unittests.far", |
| "${root_gen_dir}/mojo/mojo_unittests/mojo_unittests.far", |
| "${root_gen_dir}/skia/skia_unittests/skia_unittests.far", |
| "${root_gen_dir}/third_party/blink/common/blink_common_unittests/blink_common_unittests.far", |
| ] |
| }, |
| { |
| manifest_path = "${target_gen_dir}/common_tests_manifest.json" |
| far_sources = [ |
| "${root_gen_dir}/base/base_unittests/base_unittests.far", |
| "${root_gen_dir}/ipc/ipc_tests/ipc_tests.far", |
| "${root_gen_dir}/media/media_unittests/media_unittests.far", |
| "${root_gen_dir}/mojo/mojo_unittests/mojo_unittests.far", |
| "${root_gen_dir}/skia/skia_unittests/skia_unittests.far", |
| "${root_gen_dir}/third_party/blink/common/blink_common_unittests/blink_common_unittests.far", |
| ] |
| }, |
| { |
| manifest_path = "${target_gen_dir}/web_engine_tests_manifest.json" |
| far_sources = [ "${root_gen_dir}/fuchsia_web/webengine/web_engine_integration_tests/web_engine_integration_tests.far" ] |
| }, |
| { |
| manifest_path = "${target_gen_dir}/cast_runner_tests_manifest.json" |
| far_sources = [ "${root_gen_dir}/fuchsia_web/runners/cast_runner_integration_tests/cast_runner_integration_tests.far" ] |
| }, |
| ] |
| } |
| |
| # Construct a consolidated directory of web_engine debugging symbols using the |
| # GNU .build_id structure for CIPD archival. |
| _web_engine_build_ids_target = "web_engine_debug_symbol_directory" |
| _web_engine_debug_symbols_archive_name = "web_engine_debug_symbols" |
| _web_engine_debug_symbols_outdir = "${target_gen_dir}/${_web_engine_debug_symbols_archive_name}/${_web_engine_build_ids_target}" |
| |
| build_id_dir(_web_engine_build_ids_target) { |
| testonly = true # Some of the archives contain test packages. |
| output_path = _web_engine_debug_symbols_outdir |
| deps = [ ":web_engine_archives_with_tests" ] |
| } |
| |
| fuchsia_cipd_package(_web_engine_debug_symbols_archive_name) { |
| testonly = true |
| package = "${package_base_path}/${_web_engine_directory}/${targetarch}/debug-symbols" |
| package_root = _web_engine_debug_symbols_outdir |
| package_definition_name = "${target_name}.yaml" |
| package_definition_dir = "${target_gen_dir}/${target_name}" |
| description = "Debugging symbols for prebuilt binaries from Chromium." |
| use_absolute_root_path = true |
| |
| directories = [ "." ] |
| deps = [ ":${_web_engine_build_ids_target}" ] |
| } |
| |
| cipd_archive("chrome") { |
| package_subdirectory = _chrome_directory |
| description = "Prebuilt Chrome browser package." |
| |
| deps = [ "//chrome/app:chrome_pkg" ] |
| sources = [ "${root_gen_dir}/chrome/app/chrome/chrome.far" ] |
| } |
| |
| _chrome_build_ids_target = "chrome_debug_symbol_directory" |
| _chrome_debug_symbols_archive_name = "chrome_debug_symbols" |
| _chrome_debug_symbols_outdir = "${target_gen_dir}/${_chrome_debug_symbols_archive_name}/${_chrome_build_ids_target}" |
| |
| build_id_dir(_chrome_build_ids_target) { |
| testonly = true # Some of the archives contain test packages. |
| output_path = _chrome_debug_symbols_outdir |
| deps = [ ":chrome${_archive_suffix}" ] |
| } |
| |
| fuchsia_cipd_package(_chrome_debug_symbols_archive_name) { |
| testonly = true |
| package = |
| "${package_base_path}/${_chrome_directory}/${targetarch}/debug-symbols" |
| package_root = _chrome_debug_symbols_outdir |
| package_definition_name = "${target_name}.yaml" |
| package_definition_dir = "${target_gen_dir}/${target_name}" |
| description = "Debugging symbols for prebuilt binaries from Chromium." |
| use_absolute_root_path = true |
| |
| directories = [ "." ] |
| deps = [ ":${_chrome_build_ids_target}" ] |
| } |
| |
| # A group for production archives to ensure nothing is testonly. |
| group("web_engine_production_archives") { |
| deps = [ |
| ":cast_runner${_archive_suffix}", |
| ":web_engine${_archive_suffix}", |
| ] |
| } |
| |
| # Used by both the main group as well as :debug_symbols. |
| group("web_engine_archives_with_tests") { |
| testonly = true # tests and web_engine_shell are testonly. |
| deps = [ |
| ":tests${_archive_suffix}", |
| ":web_engine_production_archives", |
| ":web_engine_shell${_archive_suffix}", |
| ] |
| } |
| |
| # TODO(zijiehe): Rename to "cipd_yaml" when possible. |
| # This target only creates yaml files and related archives for cipd rather |
| # than executing the cipd instance to upload them. |
| # Currently it's named as "cipd" to match the folder name which introduces |
| # confusions. |
| group("cipd") { |
| testonly = true # Some archives are testonly. |
| deps = [ |
| ":chrome${_archive_suffix}", |
| ":chrome_debug_symbols", |
| ":web_engine_archives_with_tests", |
| |
| # Symbols are not uploaded for the following. |
| ":chromedriver${_archive_suffix}", |
| ":web_engine_debug_symbols", |
| ] |
| visibility = [] # Required to replace the file default. |
| visibility = [ "//:gn_all" ] |
| } |