blob: 9c157b7b2662065ff5a2221d1726cbe30321b2ca [file] [log] [blame]
# Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
# for details. 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/dart/dart_host_sdk_toolchain.gni")
import("../build/dart/prebuilt_dart_sdk.gni")
_is_fuchsia = defined(is_fuchsia_tree) && is_fuchsia_tree
if (_is_fuchsia) {
import("//build/dart/dart.gni")
}
_dart_root = get_path_info("..", "abspath")
template("compile_platform") {
assert(defined(invoker.libraries_specification_uri),
"Need 'libraries_specification_uri' in $target_name")
assert(defined(invoker.outputs), "Need 'outputs' in $target_name")
assert(defined(invoker.args), "Need 'args' in $target_name")
if (defined(invoker.single_root_scheme)) {
assert(defined(invoker.single_root_base),
"Need 'single_root_base' in $target_name")
}
if (defined(invoker.single_root_base)) {
assert(defined(invoker.single_root_scheme),
"Need 'single_root_scheme' in $target_name")
}
assert(!defined(invoker.script), "Remove 'script' from $target_name")
assert(!defined(invoker.depfile), "Remove 'depfile' from $target_name")
# In order to automatically compute dependencies, we need to add a dependency
# on vm_outline.dill. This is used to include the source code of Fasta itself
# in the dependency file. Without this, a change to Fasta wouldn't cause the
# platform dill files to be rebuilt. However, when building
# vm_outline_strong.dill, we shouldn't list it as a dependency as this would
# lead to cyclic dependencies.
add_implicit_vm_platform_dependency = true
if (defined(invoker.add_implicit_vm_platform_dependency)) {
add_implicit_vm_platform_dependency =
invoker.add_implicit_vm_platform_dependency
}
action(target_name) {
script = "$_dart_root/tools/compile_platform.py"
outputs = invoker.outputs
inputs = []
deps = []
args = []
if (defined(invoker.deps)) {
deps += invoker.deps
}
if (defined(invoker.inputs)) {
inputs += invoker.inputs
}
if (add_implicit_vm_platform_dependency) {
inputs += [ "$root_out_dir/vm_outline_strong.dill" ]
deps += [ "$_dart_root/runtime/vm:vm_platform" ]
}
depfile = outputs[0] + ".d"
if (_is_fuchsia) {
args += [
"--dart-executable",
rebase_path(prebuilt_dart),
]
} else if (!prebuilt_dart_exe_works) {
deps += [ "$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)" ]
dart_out_dir = get_label_info(
"$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)",
"root_out_dir")
args += [
"--dart-executable",
rebase_path("$dart_out_dir/dart_bootstrap$executable_suffix"),
]
}
args += invoker.args
if (defined(invoker.single_root_scheme)) {
args += ["--single-root-scheme=" + invoker.single_root_scheme]
}
if (defined(invoker.single_root_base)) {
args += ["--single-root-base=" + invoker.single_root_base]
}
if (defined(invoker.single_root_scheme)) {
args += [invoker.libraries_specification_uri]
} else {
args += [rebase_path(invoker.libraries_specification_uri, root_build_dir)]
}
args += rebase_path(outputs, root_build_dir)
}
}