blob: 6aa2477e9148e349a2eaa97ce53f84c1b96b2488 [file] [log] [blame]
# Copyright 2015 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.
# Rules to generate zipped applications for Dart.
# Rules to generate dart-pkg and dart-pkg/packages.
import("//build/module_args/mojo.gni")
import("//build/module_args/dart.gni")
# Creates a dartzip package.
template("dartzip_package") {
package_target_name = "$target_name"
package_output = "$target_out_dir/$target_name.dartzip"
if (defined(invoker.uses_pub) && invoker.uses_pub) {
# Repackage all dependencies pulled in via "pub get" in a dartzip file.
action("${package_target_name}_repackage") {
target_dir = get_label_info(":$target_name", "dir")
script = rebase_path("mojo/public/tools/gn/zip.py", ".", mojo_sdk_root)
package_name = "$package_target_name"
if (defined(invoker.package_name_override)) {
package_name = invoker.package_name_override
}
# Get a list of the files in packages/ as inputs.
list_packages_contents_script =
rebase_path("mojo/public/tools/dart_list_packages_contents.py",
".",
mojo_sdk_root)
rebase_target_dir = rebase_path(target_dir, root_build_dir)
inputs = exec_script(list_packages_contents_script,
[
"--target-directory",
rebase_target_dir,
"--package-name",
package_name,
],
"list lines",
[ target_dir + "/pubspec.lock" ])
# Zip up all the pulled-in files relative to their location in the
# packages dir.
output = "$target_out_dir/$target_name.dartzip"
outputs = [
output,
]
rebase_base_dir = rebase_target_dir
rebase_inputs = rebase_path(inputs, root_build_dir)
rebase_output = rebase_path(output, root_build_dir)
args = [
"--base-dir=$rebase_base_dir",
"--inputs=$rebase_inputs",
"--output=$rebase_output",
]
}
}
action("${package_target_name}_package") {
script =
rebase_path("mojo/public/tools/dart_package.py", ".", mojo_sdk_root)
inputs = invoker.sources
deps = []
zip_inputs = []
if (defined(invoker.uses_pub) && invoker.uses_pub) {
deps += [ ":${package_target_name}_repackage" ]
}
if (defined(invoker.deps)) {
deps += invoker.deps
foreach(d, deps) {
dep_name = get_label_info(d, "name")
dep_target_out_dir = get_label_info(d, "target_out_dir")
zip_inputs += [ "$dep_target_out_dir/$dep_name.dartzip" ]
}
}
if (defined(invoker.datadeps)) {
datadeps = invoker.datadeps
}
output = package_output
outputs = [
output,
]
rebase_base_dir =
rebase_path(get_label_info(":$package_target_name", "dir"),
root_build_dir)
if (defined(invoker.base_dir)) {
rebase_base_dir = invoker.base_dir
}
rebase_inputs = rebase_path(inputs, root_build_dir)
rebase_zip_inputs = rebase_path(zip_inputs, root_build_dir)
rebase_output = rebase_path(output, root_build_dir)
args = [
"--base-dir=$rebase_base_dir",
"--inputs=$rebase_inputs",
"--zip-inputs=$rebase_zip_inputs",
"--output=$rebase_output",
]
}
action(target_name) {
script =
rebase_path("mojo/public/tools/dart_analyze.py", ".", mojo_sdk_root)
sources = [
package_output,
]
args = [
"--dart-sdk",
rebase_path(dart_sdk_root),
"--dartzip-file",
rebase_path(package_output),
"--stamp-file",
rebase_path("$target_gen_dir/${package_target_name}_analyze.stamp"),
"--no-hints",
]
public_deps = [
":${package_target_name}_package",
]
if (defined(invoker.deps)) {
deps = invoker.deps
}
if (defined(invoker.datadeps)) {
datadeps = invoker.datadeps
}
outputs = [
"$target_gen_dir/${package_target_name}_analyze.stamp",
]
}
}
# Use this template to generate a .mojo dart application. One of the source
# files should be named main.dart and contain a main function as the
# entry point. Dependencies of dart_packaged_application targets should be
# either mojom targets (and specified using the mojom_deps variable) or
# dartzip_package targets.
template("dartzip_packaged_application") {
package_name = "${target_name}_package"
package_output = "$target_out_dir/$package_name.dartzip"
if (defined(invoker.output_name)) {
mojo_output = "$root_out_dir/" + invoker.output_name + ".mojo"
} else {
mojo_output = "$root_out_dir/" + target_name + ".mojo"
}
dartzip_package(package_name) {
sources = invoker.sources
if (defined(invoker.deps)) {
deps = invoker.deps
}
if (defined(invoker.uses_pub)) {
uses_pub = invoker.uses_pub
}
if (defined(invoker.mojom_deps)) {
mojom_deps = invoker.mojom_deps
}
if (defined(invoker.datadeps)) {
datadeps = invoker.datadeps
}
}
action(target_name) {
script = rebase_path("mojo/public/tools/prepend.py", ".", mojo_sdk_root)
input = package_output
inputs = [
input,
]
output = mojo_output
outputs = [
output,
]
deps = [
":$package_name",
]
if (defined(invoker.deps)) {
deps += invoker.deps
}
if (defined(invoker.mojom_deps)) {
deps += invoker.mojom_deps
}
if (defined(invoker.datadeps)) {
datadeps = invoker.datadeps
}
line = "#!mojo mojo:dart_content_handler"
if (is_debug || (defined(invoker.strict) && invoker.strict == true)) {
line = "#!mojo mojo:dart_content_handler?strict=true"
}
rebase_input = rebase_path(input, root_build_dir)
rebase_output = rebase_path(output, root_build_dir)
args = [
"--input=$rebase_input",
"--output=$rebase_output",
"--line=$line",
]
}
}
# Creates a gen/dart-pkg/package_name directory containing symlinks to package
# sources. Also copies any mojom dependencies into lib/mojom.
#
# sources
# List of non-entrypoint sources to include in the package.
#
# entrypoints (optional)
# List of package entrypoints to pass to the analyzer. If no entry points
# are defined, the analyzer is not run.
#
# pkg_dir (optional)
# Directory containing the package sources. This overrides sources and
# entrypoints. The analyzer will not be run.
#
# deps (optional)
# List of other dart_pkg targets for Dart packages imported by this
# dart_pkg, as well as the mojom targets needed by this dart_pkg.
#
# datadeps (optional)
#
# sdk_ext_directory (optional)
# Directory containing sdk-ext .dart sources.
#
# sdk_ext_files (optional)
# List of sources to include in sdk-ext.
#
# sdk_ext_mappings (optional)
# Mappings for dart libraries that are part of of sdk_ext.
#
template("dart_pkg") {
if (defined(invoker.pkg_dir)) {
pubspec_yaml_path = rebase_path("pubspec.yaml", "", invoker.pkg_dir)
} else {
pubspec_yaml_path = rebase_path("pubspec.yaml")
}
dart_package_name_script =
rebase_path("mojo/public/tools/dart_package_name.py", ".", mojo_sdk_root)
package_name = exec_script(dart_package_name_script,
[
"--pubspec",
pubspec_yaml_path,
],
"trim string",
[ pubspec_yaml_path ])
pkg_directory = rebase_path("$root_gen_dir/dart-pkg")
package_root = rebase_path("$root_gen_dir/dart-pkg/packages")
stamp_file = "$root_gen_dir/dart-pkg/${package_name}.stamp"
output_dir = "$root_gen_dir/dart-pkg/${package_name}"
assert(defined(invoker.sources) || defined(invoker.pkg_dir))
action(target_name) {
deps = []
if (defined(invoker.deps)) {
deps += invoker.deps
}
datadeps = []
if (defined(invoker.datadeps)) {
datadeps += invoker.datadeps
}
list_mojoms_script =
rebase_path("mojo/public/tools/dart_list_mojoms.py", ".", mojo_sdk_root)
mojom_sources = []
foreach(d, deps) {
root_prefix = rebase_path(".", "", mojo_sdk_root)
source_directory = rebase_path(get_label_info(d, "dir"))
mojom_sources += exec_script(list_mojoms_script,
[
source_directory,
root_prefix,
],
"list lines")
}
sdk_ext_directory = []
if (defined(invoker.sdk_ext_directory)) {
sdk_ext_directory += [ invoker.sdk_ext_directory ]
}
sdk_ext_files = []
if (defined(invoker.sdk_ext_files)) {
sdk_ext_files += invoker.sdk_ext_files
}
sdk_ext_mappings = []
if (defined(invoker.sdk_ext_mappings)) {
sdk_ext_mappings += invoker.sdk_ext_mappings
}
script = rebase_path("mojo/public/tools/dart_pkg.py", ".", mojo_sdk_root)
outputs = [
output_dir,
stamp_file,
]
entrypoints = []
if (defined(invoker.entrypoints)) {
entrypoints += invoker.entrypoints
}
sources = []
if (defined(invoker.sources)) {
sources += invoker.sources
} else {
assert(defined(invoker.pkg_dir))
list_script = rebase_path("build/ls.py", ".", mojo_sdk_root)
sources += exec_script(list_script,
[
"--target-directory",
rebase_path(invoker.pkg_dir),
],
"list lines")
}
inputs = [
list_mojoms_script,
script,
] + rebase_path(sources)
args = [
"--package-name",
package_name,
"--dart-sdk",
rebase_path(dart_sdk_root),
"--gen-directory",
rebase_path("$root_gen_dir/dart-gen"),
"--pkg-directory",
pkg_directory,
"--package-root",
package_root,
"--stamp-file",
rebase_path(stamp_file),
"--package-sources",
] + rebase_path(sources) + [ "--package-entrypoints" ] +
rebase_path(entrypoints) + [ "--mojom-sources" ] +
rebase_path(mojom_sources, "", mojo_sdk_root) +
[ "--sdk-ext-directories" ] + rebase_path(sdk_ext_directory) +
[ "--sdk-ext-files" ] + rebase_path(sdk_ext_files) +
[ "--sdk-ext-mappings" ] + sdk_ext_mappings
}
}