skia2/build/fuchsia/sdk.gni
Mike Klein 96f6401789 harmonize rewrite-includes and gn-format checks
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>
2020-04-03 17:00:54 +00:00

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
}
}
}