| # 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_action.gni") |
| import("../sdk_args.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 |
| } |
| |
| outline = "vm_outline_strong.dill" |
| if (defined(invoker.outline)) { |
| outline = invoker.outline |
| } |
| |
| if (precompile_tools) { |
| action(target_name) { |
| if (defined(invoker.pool)) { |
| pool = invoker.pool |
| } |
| |
| outputs = invoker.outputs |
| |
| compile_platform_tool = "//utils:compile_platform.exe($host_toolchain)" |
| |
| deps = [ compile_platform_tool ] |
| if (defined(invoker.deps)) { |
| deps += invoker.deps |
| } |
| |
| inputs = [] |
| if (defined(invoker.inputs)) { |
| inputs += invoker.inputs |
| } |
| |
| if (add_implicit_vm_platform_dependency) { |
| inputs += [ "$root_out_dir/$outline" ] |
| deps += [ "$_dart_root/runtime/vm:vm_platform" ] |
| } |
| |
| depfile = outputs[0] + ".d" |
| |
| script = "$_dart_root/build/gn_run_binary.py" |
| args = [ |
| "compiled_action", |
| rebase_path(get_label_info(compile_platform_tool, "root_out_dir") + |
| "/compile_platform.exe", |
| root_build_dir), |
| ] |
| 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("$root_out_dir/$outline", root_build_dir) ] |
| args += rebase_path(outputs, root_build_dir) |
| } |
| } else { |
| prebuilt_dart_action(target_name) { |
| if (defined(invoker.pool)) { |
| pool = invoker.pool |
| } |
| script = "$_dart_root/pkg/front_end/tool/_fasta/compile_platform.dart" |
| |
| packages = "$_dart_root/.dart_tool/package_config.json" |
| |
| outputs = invoker.outputs |
| |
| vm_args = [ "-Dsdk_hash=$sdk_hash" ] |
| |
| 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/$outline" ] |
| deps += [ "$_dart_root/runtime/vm:vm_platform" ] |
| } |
| depfile = outputs[0] + ".d" |
| |
| 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("$root_out_dir/$outline", root_build_dir) ] |
| args += rebase_path(outputs, root_build_dir) |
| } |
| } |
| } |