1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-30 16:40:57 -05:00
denoland-deno/build_extra/flatbuffers/flatbuffer.gni

240 lines
6.5 KiB
Text
Raw Normal View History

2018-07-04 14:50:28 -04:00
# Copyright 2016 The Chromium 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")
declare_args() {
# Location of flatbuffers source code.
flatbuffers_source_location = "//third_party/flatbuffers/"
# Absolute location flatbuffers BUILD.gn file.
flatbuffers_build_location = "//build_extra/flatbuffers/"
}
# Compile a flatbuffer for C++.
2018-07-04 14:50:28 -04:00
#
# flatc_out_dir (optional)
# Specifies the path suffix that output files are generated under. This
# path will be appended to root_gen_dir.
#
# Targets that depend on the flatbuffer target will be able to include
# the resulting FlatBuffers header with an include like:
# #include "dir/for/my_flatbuffer/buffer_generated.h"
# If undefined, this defaults to matchign the input directory for each
# .fbs file (you should almost always use the default mode).
#
# flatc_include_dirs (optional)
# Specifies the directories which FlatBuffers compiler uses to find
# included .fbs files in. Almost always should be empty.
#
# The list always has an implicit first item corresponding to the root of
# the source tree. This enables including .fbs files by absolute path.
#
# The compiler will try the directories in the order given, and if all
# fail it will try to load relative to the directory of the schema file
# being parsed.
#
# deps (optional)
# Additional dependencies.
#
# Parameters for compiling the generated code:
#
# defines (optional)
# Defines to supply to the source set that compiles the generated source
# code.
#
# extra_configs (optional)
# A list of config labels that will be appended to the configs applying
# to the source set.
#
# testonly (optional)
# Boolean to indicate whether the generated source sets should be labeled
# as testonly.
#
# Example:
# flatbuffer("mylib") {
# sources = [
# "foo.fbs",
# ]
# }
template("flatbuffer") {
assert(defined(invoker.sources), "Need sources for flatbuffers_library")
# Don't apply OS-specific sources filtering to the assignments later on.
# Platform files should have gotten filtered out in the sources assignment
# when this template was invoked. If they weren't, it was on purpose and
# this template shouldn't re-apply the filter.
set_sources_assignment_filter([])
action_name = "${target_name}_gen"
source_set_name = target_name
compiled_action_foreach(action_name) {
visibility = [ ":$source_set_name" ]
tool = "$flatbuffers_build_location:flatc"
2018-07-04 14:50:28 -04:00
sources = invoker.sources
deps = []
if (defined(invoker.flatc_out_dir)) {
out_dir = "$root_gen_dir/" + invoker.flatc_out_dir
} else {
out_dir = "{{source_gen_dir}}"
}
outputs = [
"$out_dir/{{source_name_part}}_generated.h",
]
args = [
"-c",
"--keep-prefix",
"-o",
"$out_dir",
"-I",
rebase_path("//", root_build_dir),
]
if (defined(invoker.flatc_include_dirs)) {
foreach(include_dir, invoker.flatc_include_dirs) {
args += [
"-I",
rebase_path(include_dir, root_build_dir),
]
}
}
args += [ "{{source}}" ]
# The deps may have steps that have to run before running flatc.
if (defined(invoker.deps)) {
deps += invoker.deps
}
}
source_set(target_name) {
forward_variables_from(invoker,
[
"visibility",
"defines",
])
sources = get_target_outputs(":$action_name")
if (defined(invoker.extra_configs)) {
configs += invoker.extra_configs
}
if (defined(invoker.testonly)) {
testonly = invoker.testonly
}
public_configs = [ "$flatbuffers_build_location:flatbuffers_config" ]
2018-07-04 14:50:28 -04:00
public_deps = [
# The generated headers reference headers within FlatBuffers, so
# dependencies must be able to find those headers too.
flatbuffers_build_location,
2018-07-04 14:50:28 -04:00
]
deps = [
":$action_name",
]
# This will link any libraries in the deps (the use of invoker.deps in the
# action won't link it).
if (defined(invoker.deps)) {
deps += invoker.deps
}
# Same for public_deps.
if (defined(invoker.public_deps)) {
public_deps += invoker.public_deps
}
}
}
# Compile a flatbuffer to typescript.
#
# flatc_include_dirs (optional)
# Specifies the directories which FlatBuffers compiler uses to find
# included .fbs files in. Almost always should be empty.
#
# The list always has an implicit first item corresponding to the root of
# the source tree. This enables including .fbs files by absolute path.
#
# The compiler will try the directories in the order given, and if all
# fail it will try to load relative to the directory of the schema file
# being parsed.
#
# deps (optional)
# Additional dependencies.
#
# Example:
# ts_flatbuffer("foo_ts") {
# sources = [
# "foo.fbs",
# ]
# }
template("ts_flatbuffer") {
assert(defined(invoker.sources), "Need sources for flatbuffers_library")
# Don't apply OS-specific sources filtering to the assignments later on.
# Platform files should have gotten filtered out in the sources assignment
# when this template was invoked. If they weren't, it was on purpose and
# this template shouldn't re-apply the filter.
set_sources_assignment_filter([])
copy_name = target_name + "_copy"
copy(copy_name) {
sources = [
"$flatbuffers_source_location/js/flatbuffers.js",
]
outputs = [
"$target_gen_dir/flatbuffers.js",
]
}
compiled_action_foreach(target_name) {
tool = "$flatbuffers_build_location:flatc"
sources = invoker.sources
deps = [
":" + copy_name,
]
out_dir = target_gen_dir
outputs = [
"$out_dir/{{source_name_part}}_generated.ts",
]
args = [
"--ts",
"--no-fb-import",
"--gen-mutable",
"-o",
rebase_path(out_dir, root_build_dir),
"-I",
rebase_path("//", root_build_dir),
]
if (defined(invoker.flatc_include_dirs)) {
foreach(include_dir, invoker.flatc_include_dirs) {
args += [
"-I",
rebase_path(include_dir, root_build_dir),
]
}
}
args += [ "{{source}}" ]
# The deps may have steps that have to run before running flatc.
if (defined(invoker.deps)) {
deps += invoker.deps
}
}
}