|  | # 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/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) | 
|  | } | 
|  | } | 
|  | } |