96f6401789
The CheckGeneratedFiles bot only required rewriting .gn files, while the presubmit wants both .gn and .gni files. It also appears that the #includes rewrite script runs on both the presubmit and CheckGeneratedFiles bots. These presubmits run on the CQ before landing right? If so, no need for them in the CheckGeneratedFIles bot at all. And of course, format .gni files. Change-Id: Icd4526d62f85088862ad93566cc9ace11dc3e33f Reviewed-on: https://skia-review.googlesource.com/c/skia/+/281505 Reviewed-by: Eric Boren <borenet@google.com> Commit-Queue: Mike Klein <mtklein@google.com>
390 lines
9.8 KiB
Plaintext
390 lines
9.8 KiB
Plaintext
# Copyright 2019 Google LLC. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# import("//gn/skia.gni")
|
|
|
|
declare_args() {
|
|
using_fuchsia_sdk = true
|
|
|
|
# Fuchsia SDK install dir.
|
|
fuchsia_sdk_path = "//fuchsia/sdk/$host_os"
|
|
|
|
# Clang install dir.
|
|
fuchsia_toolchain_path = "//fuchsia/toolchain/$host_os"
|
|
|
|
# Path to GN-generated GN targets derived from parsing json file at
|
|
# |fuchsia_sdk_manifest_path|. The parsing logic can be found in sdk.gni.
|
|
fuchsia_sdk_root = "//build/fuchsia"
|
|
}
|
|
|
|
declare_args() {
|
|
fuchsia_sdk_manifest_path = "${fuchsia_sdk_path}/meta/manifest.json"
|
|
}
|
|
|
|
template("_fuchsia_sysroot") {
|
|
assert(defined(invoker.meta), "The meta.json file path must be specified.")
|
|
assert(target_cpu == "x64" || target_cpu == "arm64",
|
|
"We currently only support 'x64' and 'arm64' targets for fuchsia.")
|
|
|
|
meta_json = read_file(invoker.meta, "json")
|
|
|
|
assert(meta_json.type == "sysroot")
|
|
|
|
meta_json_versions = meta_json.versions
|
|
if (target_cpu == "x64") {
|
|
defs = meta_json_versions.x64
|
|
} else {
|
|
defs = meta_json_versions.arm64
|
|
}
|
|
|
|
_libs = []
|
|
_lib_dirs = []
|
|
_include_dirs = []
|
|
|
|
foreach(link_lib, defs.link_libs) {
|
|
if (link_lib != "arch/${target_cpu}/sysroot/lib/Scrt1.o") {
|
|
_libs += [ rebase_path("$fuchsia_sdk_path/$link_lib") ]
|
|
}
|
|
}
|
|
|
|
defs_include_dir = defs.include_dir
|
|
_include_dirs += [ rebase_path("$fuchsia_sdk_path/$defs_include_dir") ]
|
|
|
|
config_name = "config_$target_name"
|
|
config(config_name) {
|
|
lib_dirs = _lib_dirs
|
|
libs = _libs
|
|
include_dirs = _include_dirs
|
|
}
|
|
|
|
group(target_name) {
|
|
public_configs = [ ":$config_name" ]
|
|
}
|
|
}
|
|
|
|
template("_fuchsia_fidl_library") {
|
|
assert(defined(invoker.meta), "The meta.json file path must be specified.")
|
|
assert(target_cpu == "x64" || target_cpu == "arm64",
|
|
"We currently only support 'x64' and 'arm64' targets for fuchsia.")
|
|
|
|
meta_json = read_file(invoker.meta, "json")
|
|
|
|
assert(meta_json.type == "fidl_library")
|
|
|
|
_deps = [ "../pkg:fidl_cpp" ]
|
|
|
|
library_name = string_replace(meta_json.name, "fuchsia.", "")
|
|
library_name_json = "$library_name.json"
|
|
|
|
foreach(dep, meta_json.deps) {
|
|
_deps += [ ":$dep" ]
|
|
}
|
|
|
|
config_name = "config_$target_name"
|
|
config(config_name) {
|
|
include_dirs = [ target_gen_dir ]
|
|
}
|
|
|
|
fidl_gen_target_name = "fidlgen_$target_name"
|
|
action(fidl_gen_target_name) {
|
|
script = "//build/fuchsia/fidl_gen_cpp"
|
|
|
|
library_name_slashes = string_replace(library_name, ".", "/")
|
|
|
|
inputs = [ invoker.meta ]
|
|
|
|
outputs = [
|
|
"$target_gen_dir/fuchsia/$library_name_slashes/c/fidl.h",
|
|
"$target_gen_dir/fuchsia/$library_name_slashes/c/tables.c",
|
|
"$target_gen_dir/fuchsia/$library_name_slashes/cpp/fidl.h",
|
|
"$target_gen_dir/fuchsia/$library_name_slashes/cpp/fidl.cc",
|
|
]
|
|
|
|
args = [
|
|
"--fidlc-bin",
|
|
rebase_path("$fuchsia_sdk_path/tools/fidlc"),
|
|
"--fidlgen-bin",
|
|
rebase_path("$fuchsia_sdk_path/tools/fidlgen"),
|
|
"--sdk-base",
|
|
rebase_path("$fuchsia_sdk_path"),
|
|
"--root",
|
|
rebase_path(invoker.meta),
|
|
"--json",
|
|
rebase_path("$target_gen_dir/$library_name_json"),
|
|
"--include-base",
|
|
rebase_path("$target_gen_dir"),
|
|
"--output-base-cc",
|
|
rebase_path("$target_gen_dir/fuchsia/$library_name_slashes/cpp/fidl"),
|
|
"--output-c-header",
|
|
rebase_path("$target_gen_dir/fuchsia/$library_name_slashes/c/fidl.h"),
|
|
"--output-c-tables",
|
|
rebase_path("$target_gen_dir/fuchsia/$library_name_slashes/c/tables.c"),
|
|
]
|
|
}
|
|
|
|
source_set(target_name) {
|
|
public_configs = [ ":$config_name" ]
|
|
|
|
sources = get_target_outputs(":$fidl_gen_target_name")
|
|
|
|
deps = [ ":$fidl_gen_target_name" ]
|
|
|
|
public_deps = _deps
|
|
}
|
|
}
|
|
|
|
#
|
|
# Produce a cc source library from invoker's json file.
|
|
# Primary output is the source_set.
|
|
#
|
|
template("_fuchsia_cc_source_library") {
|
|
assert(defined(invoker.meta), "The meta.json file path must be specified.")
|
|
|
|
meta_json = read_file(invoker.meta, "json")
|
|
|
|
assert(meta_json.type == "cc_source_library")
|
|
|
|
_output_name = meta_json.name
|
|
_include_dirs = []
|
|
_public_headers = []
|
|
_sources = []
|
|
_deps = []
|
|
|
|
meta_json_include_dir = meta_json.include_dir
|
|
_include_dirs += [ rebase_path("$fuchsia_sdk_path/$meta_json_include_dir") ]
|
|
|
|
foreach(header, meta_json.headers) {
|
|
rebased_header = []
|
|
rebased_header = [ rebase_path("$fuchsia_sdk_path/$header") ]
|
|
_public_headers += rebased_header
|
|
_sources += rebased_header
|
|
}
|
|
|
|
foreach(source, meta_json.sources) {
|
|
_sources += [ "$fuchsia_sdk_path/$source" ]
|
|
}
|
|
|
|
config_name = "config_$target_name"
|
|
config(config_name) {
|
|
include_dirs = _include_dirs
|
|
}
|
|
|
|
foreach(dep, meta_json.deps) {
|
|
_deps += [ "../pkg:$dep" ]
|
|
}
|
|
|
|
foreach(dep, meta_json.fidl_deps) {
|
|
_deps += [ "../fidl:$dep" ]
|
|
}
|
|
|
|
source_set(target_name) {
|
|
output_name = _output_name
|
|
public = _public_headers
|
|
sources = _sources
|
|
public_configs = [ ":$config_name" ]
|
|
public_deps = _deps
|
|
}
|
|
}
|
|
|
|
template("_fuchsia_cc_prebuilt_library") {
|
|
assert(defined(invoker.meta), "The meta.json file path must be specified.")
|
|
meta_json = read_file(invoker.meta, "json")
|
|
|
|
_include_dirs = []
|
|
_deps = []
|
|
_libs = []
|
|
|
|
meta_json_include_dir = meta_json.include_dir
|
|
_include_dirs += [ "$fuchsia_sdk_path/$meta_json_include_dir" ]
|
|
|
|
foreach(dep, meta_json.deps) {
|
|
_deps += [ ":$dep" ]
|
|
}
|
|
|
|
meta_json_binaries = meta_json.binaries
|
|
if (target_cpu == "x64") {
|
|
meta_json_binaries_arch = meta_json_binaries.x64
|
|
} else {
|
|
meta_json_binaries_arch = meta_json_binaries.arm64
|
|
}
|
|
prebuilt_lib = meta_json_binaries_arch.link
|
|
_libs = [ "$fuchsia_sdk_path/$prebuilt_lib" ]
|
|
|
|
config_name = "config_$target_name"
|
|
config(config_name) {
|
|
include_dirs = _include_dirs
|
|
libs = _libs
|
|
}
|
|
|
|
group(target_name) {
|
|
public_configs = [ ":$config_name" ]
|
|
public_deps = _deps
|
|
}
|
|
}
|
|
|
|
#
|
|
# Read SDK manifest json file and produce gn build targets for all
|
|
# "enabled_parts" as specified by the template invoker.
|
|
#
|
|
# Fuchsia SDK manifest is primarily a "parts" array.
|
|
#
|
|
template("fuchsia_sdk") {
|
|
assert(defined(invoker.meta), "The meta.json file path must be specified.")
|
|
assert(defined(invoker.enabled_parts),
|
|
"A list containing the parts of the SDK to generate targets for.")
|
|
|
|
meta_json = read_file(invoker.meta, "json")
|
|
|
|
foreach(part, meta_json.parts) {
|
|
part_meta_json = {
|
|
}
|
|
|
|
part_meta = part.meta
|
|
part_meta_rebased = "$fuchsia_sdk_path/$part_meta"
|
|
|
|
part_meta_json = read_file(part_meta_rebased, "json")
|
|
subtarget_name = part_meta_json.name
|
|
|
|
foreach(enabled_part, invoker.enabled_parts) {
|
|
if (part.type == "cc_source_library") {
|
|
if (part.type == enabled_part) {
|
|
_fuchsia_cc_source_library(subtarget_name) {
|
|
meta = part_meta_rebased
|
|
}
|
|
}
|
|
} else if (part.type == "sysroot") {
|
|
if (part.type == enabled_part) {
|
|
_fuchsia_sysroot(subtarget_name) {
|
|
meta = part_meta_rebased
|
|
}
|
|
}
|
|
} else if (part.type == "fidl_library") {
|
|
if (part.type == enabled_part) {
|
|
_fuchsia_fidl_library(subtarget_name) {
|
|
meta = part_meta_rebased
|
|
}
|
|
}
|
|
} else if (part.type == "cc_prebuilt_library") {
|
|
if (part.type == enabled_part) {
|
|
_fuchsia_cc_prebuilt_library(subtarget_name) {
|
|
meta = part_meta_rebased
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
group(target_name) {
|
|
}
|
|
}
|
|
|
|
#
|
|
# Create package in 'gen' directory.
|
|
#
|
|
template("fuchsia_package") {
|
|
assert(defined(invoker.name), "The name of the package must be specified.")
|
|
assert(defined(invoker.version), "The package version must be specified.")
|
|
|
|
pkg_dir = target_gen_dir
|
|
pkg_name = invoker.name
|
|
pkg_version = invoker.version
|
|
pkg_manifest = invoker.pkg_manifest
|
|
|
|
pkg_id_path = "${pkg_dir}/meta/package"
|
|
gen_far_target_name = "gen_far_${target_name}"
|
|
pkg_archive = "${pkg_dir}/${pkg_name}-${pkg_version}.far"
|
|
|
|
action(gen_far_target_name) {
|
|
script = "//build/fuchsia/gen_package"
|
|
|
|
pm_binary = rebase_path("$fuchsia_sdk_path/tools/pm")
|
|
|
|
inputs = [ pm_binary ]
|
|
|
|
outputs = [
|
|
pkg_id_path,
|
|
pkg_archive,
|
|
]
|
|
|
|
args = [
|
|
"--pm-bin",
|
|
pm_binary,
|
|
"--pkg-dir",
|
|
rebase_path(pkg_dir),
|
|
"--pkg-name",
|
|
pkg_name,
|
|
"--pkg-version",
|
|
"$pkg_version",
|
|
"--pkg-manifest",
|
|
rebase_path(pkg_manifest),
|
|
]
|
|
|
|
if (defined(invoker.deps)) {
|
|
deps = invoker.deps
|
|
}
|
|
if (defined(invoker.testonly)) {
|
|
testonly = invoker.testonly
|
|
}
|
|
}
|
|
|
|
copy(target_name) {
|
|
if (defined(invoker.testonly)) {
|
|
testonly = invoker.testonly
|
|
}
|
|
|
|
sources = [ pkg_archive ]
|
|
|
|
output_name = "${root_out_dir}/far/${pkg_name}.far"
|
|
outputs = [ output_name ]
|
|
|
|
deps = [ ":$gen_far_target_name" ]
|
|
}
|
|
}
|
|
|
|
#
|
|
# Places repo in output ('obj') directory.
|
|
#
|
|
template("fuchsia_repo") {
|
|
assert(defined(invoker.archives),
|
|
"The list of archives to publish must be specified.")
|
|
assert(defined(invoker.repo), "The location of the repo should be specified.")
|
|
|
|
action(target_name) {
|
|
if (defined(invoker.testonly)) {
|
|
testonly = invoker.testonly
|
|
}
|
|
script = "//build/fuchsia/gen_repo"
|
|
|
|
pm_binary = rebase_path("$fuchsia_sdk_path/tools/pm")
|
|
repo_directory = invoker.repo
|
|
|
|
inputs = [ pm_binary ]
|
|
|
|
archive_flags = []
|
|
|
|
foreach(archive, invoker.archives) {
|
|
assert(get_path_info(archive, "extension") == "far",
|
|
"Archive '$archive' does not have the .far extension.")
|
|
inputs += [ archive ]
|
|
archive_flags += [
|
|
"--archive",
|
|
rebase_path(archive),
|
|
]
|
|
}
|
|
|
|
outputs = [ repo_directory ]
|
|
|
|
args = [
|
|
"--pm-bin",
|
|
pm_binary,
|
|
"--repo-dir",
|
|
rebase_path(repo_directory),
|
|
] + archive_flags
|
|
|
|
if (defined(invoker.deps)) {
|
|
deps = invoker.deps
|
|
}
|
|
}
|
|
}
|