|  | # 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. | 
|  |  | 
|  | # This GN file contains build rules for assembling the Dart SDK. There are | 
|  | # two possible variants: the "Full" SDK, and the "Platform" SDK. If you want | 
|  | # to make a new subset of the Full SDK, make it the same way we make | 
|  | # the Platform SDK. | 
|  | # | 
|  | # Warning: | 
|  | # If you need to copy something into dart-sdk/lib/foo in addition to the stuff | 
|  | # copied there by :copy_libraries, then you must depend on ":copy_libraries", | 
|  | # or ":copy_libraries" may delete/overwrite your addition, and the build will | 
|  | # fail. | 
|  |  | 
|  | import("../build/dart/copy_tree.gni") | 
|  | import("../build/executable_suffix.gni") | 
|  | import("../sdk_args.gni") | 
|  | import("../utils/application_snapshot.gni") | 
|  |  | 
|  | declare_args() { | 
|  | # Build a SDK with less stuff. It excludes dart2js, ddc, and web libraries. | 
|  | dart_platform_sdk = true | 
|  |  | 
|  | # Path to stripped dart binaries relative to build output directory. | 
|  | dart_stripped_binary = "dart" | 
|  | dart_aotruntime_stripped_binary = "dartaotruntime_product" | 
|  | gen_snapshot_stripped_binary = "gen_snapshot_product" | 
|  | analyze_snapshot_binary = "analyze_snapshot" | 
|  | wasm_opt_stripped_binary = "wasm-opt" | 
|  |  | 
|  | dart_include_wasm_opt = true | 
|  | } | 
|  |  | 
|  | # The directory layout of the SDK is as follows: | 
|  | # | 
|  | # ..dart-sdk/ | 
|  | # ....bin/ | 
|  | # ......dart or dart.exe (executable) | 
|  | # ......dart.lib (import library for VM native extensions on Windows) | 
|  | # ......dartaotruntime or dartaotruntime.exe (executable) | 
|  | # ......utils/gen_snapshot or utils/gen_snapshot.exe (if not on ia32) | 
|  | # ......snapshots/ | 
|  | # ........analysis_server.dart.snapshot | 
|  | # ........analysis_server_aot.dart.snapshot (AOT snapshot, if not on ia32) | 
|  | # ........dart2bytecode.snapshot (AOT snapshot, for selected targets) | 
|  | # ........dart2js_aot.dart.snapshot (AOT snapshot, if not on ia32) | 
|  | # ........dart2js.dart.snapshot (JIT snapshot only on ia32) | 
|  | # ........dart2wasm_product.snapshot (if not on ia32) | 
|  | # ........dartdev.dart.snapshot (app-jit snapshot or kernel dill file) | 
|  | # ........dartdevc_aot.dart.snapshot (AOT snapshot, if not on ia32) | 
|  | # ........dartdevc.dart.snapshot (JIT snapshot only on ia32) | 
|  | # ........dds_aot.dart.snapshot (AOT snapshot, if not on ia32) | 
|  | # ........dds.dart.snapshot (JIT snapshot only on ia32) | 
|  | # ........dart_tooling_daemon_aot.dart.snapshot (AOT snapshot, if not on ia32) | 
|  | # ........dart_tooling_daemon.dart.snapshot (JIT snapshot only on ia32) | 
|  | # ........frontend_server_aot.dart.snapshot (AOT snapshot, if not on ia32) | 
|  | # ........frontend_server.dart.snapshot (JIT snapshot only on ia32) | 
|  | # ........gen_kernel_aot.dart.snapshot (if not on ia32) | 
|  | # ........kernel-service.dart.snapshot | 
|  | # ........kernel_worker_aot.dart.snapshot (AOT snapshot) | 
|  | # ......resources/ | 
|  | # ........dartdoc/ | 
|  | # ..........resources/ | 
|  | # ..........templates/ | 
|  | # ....include/ | 
|  | # ......dart_api.h | 
|  | # ......dart_native_api.h | 
|  | # ......dart_tools_api.h | 
|  | # ....lib/ | 
|  | # ......libraries.json | 
|  | # ......_internal/ | 
|  | # ........dart2js_platform.dill | 
|  | # ........dart2js_server_platform.dill | 
|  | # ........dart2wasm_outline.dill (if not on ia32) | 
|  | # ........dart2wasm_platform.dill (if not on ia32) | 
|  | # ........dart2wasm_js_compatibility_outline.dill (if not on ia32) | 
|  | # ........dart2wasm_js_compatibility_platform.dill (if not on ia32) | 
|  | # ........ddc_outline.dill | 
|  | # ........ddc_platform.dill | 
|  | # ........vm_platform_strong.dill | 
|  | # ........js_dev_runtime/ | 
|  | # ........js_runtime/ | 
|  | # ........js_shared/ | 
|  | # ......async/ | 
|  | # ......collection/ | 
|  | # ......concurrent/ | 
|  | # ......convert/ | 
|  | # ......core/ | 
|  | # ......dev_compiler/ | 
|  | #.........amd/require.js | 
|  | #.........ddc/ddc_module_loader.js | 
|  | #.........web/dart_stack_trace_mapper.js | 
|  | # ......developer/ | 
|  | # ......html/ | 
|  | # ......_http/ | 
|  | # ......internal/ | 
|  | # ......io/ | 
|  | # ......isolate/ | 
|  | # ......js/ | 
|  | # ......js_interop/ | 
|  | # ......js_interop_unsafe/ | 
|  | # ......js_util/ | 
|  | # ......math/ | 
|  | # ......mirrors/ | 
|  | # ......typed_data/ | 
|  | # ......api_readme.md | 
|  |  | 
|  | # Scripts that go under bin/ | 
|  | _platform_sdk_scripts = [] | 
|  |  | 
|  | _full_sdk_scripts = [] | 
|  |  | 
|  | # Snapshots that go under bin/snapshots | 
|  | _platform_sdk_snapshots = [ | 
|  | [ | 
|  | "analysis_server", | 
|  | "../utils/analysis_server", | 
|  | "analysis_server", | 
|  | ], | 
|  | [ | 
|  | "dartdev", | 
|  | "../utils/dartdev:dartdev", | 
|  | "dartdev", | 
|  | ], | 
|  | [ | 
|  | "dart_tooling_daemon", | 
|  | "../utils/dtd:dtd", | 
|  | "dart_tooling_daemon", | 
|  | ], | 
|  | ] | 
|  | if (dart_target_arch != "ia32" && dart_target_arch != "x86") { | 
|  | _platform_sdk_snapshots += [ | 
|  | [ | 
|  | "analysis_server_aot_product", | 
|  | "../utils/analysis_server:analysis_server_aot_product", | 
|  | "analysis_server_aot", | 
|  | ], | 
|  | [ | 
|  | "frontend_server_aot_product", | 
|  | "../utils/kernel-service:frontend_server_aot_product", | 
|  | "frontend_server_aot", | 
|  | ], | 
|  | [ | 
|  | "dds_aot_product", | 
|  | "../utils/dds:dds_aot", | 
|  | "dds_aot", | 
|  | ], | 
|  | [ | 
|  | "dart_tooling_daemon_aot_product", | 
|  | "../utils/dtd:dtd_aot", | 
|  | "dart_tooling_daemon_aot", | 
|  | ], | 
|  | ] | 
|  | } else { | 
|  | _platform_sdk_snapshots += [ | 
|  | [ | 
|  | "frontend_server", | 
|  | "../utils/kernel-service:frontend_server", | 
|  | "frontend_server", | 
|  | ], | 
|  | [ | 
|  | "dds", | 
|  | "../utils/dds:dds", | 
|  | "dds", | 
|  | ], | 
|  | ] | 
|  | } | 
|  | if (dart_snapshot_kind == "app-jit") { | 
|  | _platform_sdk_snapshots += [ [ | 
|  | "kernel-service", | 
|  | "../utils/kernel-service:kernel-service_snapshot", | 
|  | "kernel-service", | 
|  | ] ] | 
|  | } | 
|  |  | 
|  | # dart2bytecode is an AOT snapshot, which is not supported on the ia32 | 
|  | # architecture. It is only included as needed on a subset of OS targets. | 
|  | if ((dart_target_arch == "x64" || dart_target_arch == "arm64") && | 
|  | (dart_dynamic_modules || target_os == "linux" || target_os == "mac")) { | 
|  | _platform_sdk_snapshots += [ [ | 
|  | "dart2bytecode", | 
|  | "../utils/dart2bytecode:dart2bytecode", | 
|  | "dart2bytecode", | 
|  | ] ] | 
|  | } | 
|  |  | 
|  | # AOT snapshots are not supported on the ia32 architecture, we continue | 
|  | # to use JIT snapshots on that architecture, the conditional code below | 
|  | # accounts for this. | 
|  | if (dart_target_arch != "ia32" && dart_target_arch != "x86") { | 
|  | _full_sdk_snapshots = | 
|  | _platform_sdk_snapshots + [ | 
|  | [ | 
|  | "dart2js_aot_product", | 
|  | "../utils/compiler:dart2js_sdk_aot_product", | 
|  | "dart2js_aot", | 
|  | ], | 
|  | [ | 
|  | "dartdevc_aot_product", | 
|  | "../utils/ddc:dartdevc_aot_product", | 
|  | "dartdevc_aot", | 
|  | ], | 
|  | [ | 
|  | "kernel_worker_aot_product", | 
|  | "../utils/bazel:kernel_worker_aot_product", | 
|  | "kernel_worker_aot", | 
|  | ], | 
|  |  | 
|  | # Remove these JIT snapshot in Dart SDK version 3.7 | 
|  | # Please see https://github.com/dart-lang/build/pull/3742 for details. | 
|  | [ | 
|  | "dartdevc", | 
|  | "../utils/ddc:dartdevc", | 
|  | "dartdevc", | 
|  | ], | 
|  | ] | 
|  | } else { | 
|  | _full_sdk_snapshots = _platform_sdk_snapshots + [ | 
|  | [ | 
|  | "dart2js", | 
|  | "../utils/compiler:dart2js", | 
|  | "dart2js", | 
|  | ], | 
|  | [ | 
|  | "dartdevc", | 
|  | "../utils/ddc:dartdevc", | 
|  | "dartdevc", | 
|  | ], | 
|  | [ | 
|  | "kernel_worker", | 
|  | "../utils/bazel:kernel_worker", | 
|  | "kernel_worker", | 
|  | ], | 
|  | ] | 
|  | } | 
|  |  | 
|  | # Libraries that go under lib/ | 
|  | _full_sdk_libraries = [ | 
|  | "_internal", | 
|  | "async", | 
|  | "cli", | 
|  | "collection", | 
|  | "concurrent", | 
|  | "convert", | 
|  | "core", | 
|  | "developer", | 
|  | "ffi", | 
|  | "html", | 
|  | "_http", | 
|  | "indexed_db", | 
|  | "internal", | 
|  | "io", | 
|  | "isolate", | 
|  | "js", | 
|  | "js_interop", | 
|  | "js_interop_unsafe", | 
|  | "js_util", | 
|  | "math", | 
|  | "mirrors", | 
|  | "svg", | 
|  | "typed_data", | 
|  | "_wasm", | 
|  | "web_audio", | 
|  | "web_gl", | 
|  | "web_sql", | 
|  | ] | 
|  |  | 
|  | # Apps running on the platform SDK shouldn't be using Dart4Web libraries, but | 
|  | # the analyzer and dartdoc expect all the library sources to be present. | 
|  | # | 
|  | # _platform_sdk_libraries = [ | 
|  | #   "_internal", | 
|  | #   "async", | 
|  | #   "cli", | 
|  | #   "collection", | 
|  | #   "convert", | 
|  | #   "core", | 
|  | #   "developer", | 
|  | #   "html", | 
|  | #   "_http", | 
|  | #   "internal", | 
|  | #   "io", | 
|  | #   "isolate", | 
|  | #   "math", | 
|  | #   "mirrors", | 
|  | #   "typed_data", | 
|  | # ] | 
|  | _platform_sdk_libraries = _full_sdk_libraries | 
|  |  | 
|  | # This rule copies dartdoc templates to | 
|  | # bin/resources/dartdoc/templates | 
|  | copy_tree("copy_dartdoc_templates") { | 
|  | visibility = [ ":copy_dartdoc_files" ] | 
|  | source = "../third_party/pkg/dartdoc/lib/templates" | 
|  | dest = "$root_out_dir/$dart_sdk_output/bin/resources/dartdoc/templates" | 
|  | exclude = "{}" | 
|  | } | 
|  |  | 
|  | # This rule copies dartdoc resources to | 
|  | # bin/resources/dartdoc/resources | 
|  | copy_tree("copy_dartdoc_resources") { | 
|  | visibility = [ ":copy_dartdoc_files" ] | 
|  | source = "../third_party/pkg/dartdoc/lib/resources" | 
|  | dest = "$root_out_dir/$dart_sdk_output/bin/resources/dartdoc/resources" | 
|  | exclude = "{}" | 
|  | } | 
|  |  | 
|  | # This rule copies the pre-built DevTools application to | 
|  | # bin/resources/devtools/ | 
|  | copy_tree("copy_prebuilt_devtools") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | source = "../third_party/devtools/web" | 
|  | dest = "$root_out_dir/$dart_sdk_output/bin/resources/devtools" | 
|  | exclude = "{}" | 
|  | } | 
|  |  | 
|  | # This loop generates rules to copy libraries to lib/ | 
|  | foreach(library, _full_sdk_libraries) { | 
|  | copy_tree("copy_${library}_library") { | 
|  | visibility = [ | 
|  | ":copy_full_sdk_libraries", | 
|  | ":copy_platform_sdk_libraries", | 
|  | ] | 
|  | source = "lib/$library" | 
|  | dest = "$root_out_dir/$dart_sdk_output/lib/$library" | 
|  | exclude = "*.svn,doc,*.py,*.gypi,*.sh,.git*,*.gn,*.gni" | 
|  | } | 
|  | } | 
|  |  | 
|  | _has_dot_sym = !is_win && rebase_path(".") == rebase_path("//sdk") | 
|  |  | 
|  | # Copies the Dart VM binary into bin/ | 
|  | if (target_os != current_os && target_os == "fuchsia") { | 
|  | # In the Fuchsia build, this has to use a symlink for two reasons. | 
|  | # First, it makes the lookup of shared libraries relative to $ORIGIN | 
|  | # (Linux) or @loader_path (macOS) find the libraries where they are, | 
|  | # since those lookups use the directory of the symlink target rather | 
|  | # than of the link itself (as they would for a copy or hard link). | 
|  | # Second, when the dart binary is built as a "variant" (e.g. with a | 
|  | # sanitizer), then $root_out_dir/dart is itself a symlink to the real | 
|  | # binary in the selected variant toolchain's $root_out_dir and since | 
|  | # the "copy" tool is actually a hard link rather than a copy, it will | 
|  | # make a link to the symlink rather than the symlink's target, and the | 
|  | # relative symlink interpreted from a different containing directory | 
|  | # will not find the actual binary. | 
|  | action("copy_dart") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | dart_label = "../runtime/bin:dart" | 
|  | deps = [ dart_label ] | 
|  | dart_out = get_label_info(dart_label, "root_out_dir") | 
|  | sources = [ "$dart_out/$dart_stripped_binary" ] | 
|  | outputs = [ "$root_out_dir/$dart_sdk_output/bin/$dart_stripped_binary" ] | 
|  | script = "/bin/ln" | 
|  | args = [ | 
|  | "-snf", | 
|  | rebase_path(sources[0], get_path_info(outputs[0], "dir")), | 
|  | rebase_path(outputs[0]), | 
|  | ] | 
|  | } | 
|  | } else { | 
|  | copy("copy_dart") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | deps = [ "../runtime/bin:dart" ] | 
|  | dart_out = get_label_info("../runtime/bin:dart", "root_out_dir") | 
|  | sources = [ "$dart_out/${dart_stripped_binary}${executable_suffix}" ] | 
|  | if (is_win && dart_lib_export_symbols) { | 
|  | sources += [ "$dart_out/dart.lib" ] | 
|  | } | 
|  | if (_has_dot_sym) { | 
|  | sources += [ "$dart_out/dart.sym" ] | 
|  | } | 
|  | outputs = [ "$root_out_dir/$dart_sdk_output/bin/{{source_file_part}}" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | copy("copy_dart_aotruntime") { | 
|  | visibility = [ ":group_dart2native" ] | 
|  | deps = [ "../runtime/bin:dartaotruntime_product" ] | 
|  | src_dir = | 
|  | get_label_info("../runtime/bin:dartaotruntime_product", "root_out_dir") | 
|  | sources = | 
|  | [ "$src_dir/${dart_aotruntime_stripped_binary}${executable_suffix}" ] | 
|  | outputs = [ | 
|  | "$root_out_dir/$dart_sdk_output/bin/dartaotruntime${executable_suffix}", | 
|  | ] | 
|  | } | 
|  |  | 
|  | group("copy_gen_snapshot") { | 
|  | visibility = [ ":group_dart2native" ] | 
|  | public_deps = [ ":copy_gen_snapshot_exe" ] | 
|  | if (_has_dot_sym) { | 
|  | public_deps += [ ":copy_gen_snapshot_sym" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | copy("copy_gen_snapshot_exe") { | 
|  | deps = [ "../runtime/bin:gen_snapshot_product" ] | 
|  | src_dir = | 
|  | get_label_info("../runtime/bin:gen_snapshot_product", "root_out_dir") | 
|  | sources = [ "$src_dir/${gen_snapshot_stripped_binary}${executable_suffix}" ] | 
|  | outputs = [ | 
|  | "$root_out_dir/$dart_sdk_output/bin/utils/gen_snapshot${executable_suffix}", | 
|  | ] | 
|  | } | 
|  |  | 
|  | if (_has_dot_sym) { | 
|  | copy("copy_gen_snapshot_sym") { | 
|  | deps = [ "../runtime/bin:gen_snapshot_product" ] | 
|  | sources = [ "$root_out_dir/gen_snapshot_product.sym" ] | 
|  | outputs = [ "$root_out_dir/$dart_sdk_output/bin/utils/gen_snapshot${executable_suffix}.sym" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | copy("copy_vm_platform_strong_product") { | 
|  | visibility = [ ":group_dart2native" ] | 
|  | deps = [ "../runtime/vm:vm_platform_product" ] | 
|  | src_dir = get_label_info("../runtime/vm:vm_platform_product", "root_out_dir") | 
|  | sources = [ "$src_dir/vm_platform_strong_product.dill" ] | 
|  | outputs = | 
|  | [ "$root_out_dir/$dart_sdk_output/lib/_internal/{{source_file_part}}" ] | 
|  | } | 
|  |  | 
|  | copy("copy_gen_kernel_snapshot") { | 
|  | visibility = [ ":group_dart2native" ] | 
|  | deps = [ "../utils/gen_kernel" ] | 
|  | sources = [ "$root_gen_dir/gen_kernel_aot.dart.snapshot" ] | 
|  | outputs = | 
|  | [ "$root_out_dir/$dart_sdk_output/bin/snapshots/{{source_file_part}}" ] | 
|  | } | 
|  |  | 
|  | group("group_dart2native") { | 
|  | deps = [ | 
|  | ":copy_dart_aotruntime", | 
|  | ":copy_gen_kernel_snapshot", | 
|  | ":copy_gen_snapshot", | 
|  | ":copy_vm_platform_strong_product", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # A template for copying the things in _platform_sdk_scripts and | 
|  | # _full_sdk_scripts into bin/ | 
|  | template("copy_sdk_script") { | 
|  | assert(defined(invoker.name), "copy_sdk_script must define 'name'") | 
|  | name = invoker.name | 
|  | ext = "" | 
|  | if (is_win) { | 
|  | ext = ".bat" | 
|  | } | 
|  | copy(target_name) { | 
|  | visibility = [ | 
|  | ":copy_full_sdk_scripts", | 
|  | ":copy_platform_sdk_scripts", | 
|  | ] | 
|  | sources = [ "bin/${name}_sdk$ext" ] | 
|  | outputs = [ "$root_out_dir/$dart_sdk_output/bin/$name$ext" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | foreach(sdk_script, _full_sdk_scripts) { | 
|  | copy_sdk_script("copy_${sdk_script}_script") { | 
|  | name = sdk_script | 
|  | } | 
|  | } | 
|  |  | 
|  | # This is the main target for copying scripts in _platform_sdk_scripts to bin/ | 
|  | group("copy_platform_sdk_scripts") { | 
|  | visibility = [ ":_create_platform_sdk" ] | 
|  | public_deps = [] | 
|  | foreach(sdk_script, _platform_sdk_scripts) { | 
|  | public_deps += [ ":copy_${sdk_script}_script" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # This is the main target for copying scripts in _full_sdk_scripts to bin/ | 
|  | group("copy_full_sdk_scripts") { | 
|  | visibility = [ ":create_full_sdk" ] | 
|  | public_deps = [] | 
|  | foreach(sdk_script, _full_sdk_scripts) { | 
|  | public_deps += [ ":copy_${sdk_script}_script" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # This loop generates "copy" targets that put snapshots into | 
|  | # bin/snapshots | 
|  | foreach(snapshot, _full_sdk_snapshots) { | 
|  | root = root_gen_dir | 
|  |  | 
|  | # The frontend_server is output to root_out_dir so that it doesn't conflict | 
|  | # with the flutter snapshot by the same name under root_gen_dir. | 
|  | if (snapshot[0] == "frontend_server" || | 
|  | snapshot[0] == "frontend_server_aot_product" || | 
|  | snapshot[0] == "frontend_server_aot") { | 
|  | root = root_out_dir | 
|  | } | 
|  |  | 
|  | # The dds and dtd snapshots are output to root_out_dir in order to be | 
|  | # compatible with the way the dart sdk is distributed internally. | 
|  | if (snapshot[0] == "dds_aot_product" || | 
|  | snapshot[0] == "dart_tooling_daemon_aot_product") { | 
|  | root = root_out_dir | 
|  | } | 
|  | copy("copy_${snapshot[0]}_snapshot") { | 
|  | visibility = [ | 
|  | ":copy_full_sdk_snapshots", | 
|  | ":copy_platform_sdk_snapshots", | 
|  | ] | 
|  | deps = [ snapshot[1] ] | 
|  | sources = [ "$root/${snapshot[0]}.dart.snapshot" ] | 
|  | outputs = [ "$root_out_dir/$dart_sdk_output/bin/snapshots/${snapshot[2]}.dart.snapshot" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # This is the main rule for copying snapshots from _platform_sdk_snapshots to | 
|  | # bin/snapshots | 
|  | group("copy_platform_sdk_snapshots") { | 
|  | visibility = [ ":_create_platform_sdk" ] | 
|  | public_deps = [] | 
|  | foreach(snapshot, _platform_sdk_snapshots) { | 
|  | public_deps += [ ":copy_${snapshot[0]}_snapshot" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # This is the main rule for copying snapshots from _full_sdk_snapshots to | 
|  | # bin/snapshots | 
|  | group("copy_full_sdk_snapshots") { | 
|  | visibility = [ ":create_full_sdk" ] | 
|  | public_deps = [] | 
|  | foreach(snapshot, _full_sdk_snapshots) { | 
|  | public_deps += [ ":copy_${snapshot[0]}_snapshot" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # This is the main rule for copying the files that dartdoc needs. | 
|  | group("copy_dartdoc_files") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | public_deps = [ | 
|  | ":copy_dartdoc_resources", | 
|  | ":copy_dartdoc_templates", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # This rule copies dill files to lib/_internal. | 
|  | copy("copy_vm_dill_files") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | deps = [ | 
|  | ":copy_libraries", | 
|  | "../runtime/vm:kernel_platform_files", | 
|  | ] | 
|  | sources = [ "$root_out_dir/vm_platform_strong.dill" ] | 
|  | outputs = | 
|  | [ "$root_out_dir/$dart_sdk_output/lib/_internal/{{source_file_part}}" ] | 
|  | } | 
|  |  | 
|  | copy("copy_dart2js_dill_files") { | 
|  | visibility = [ ":create_full_sdk" ] | 
|  | deps = [ | 
|  | ":copy_libraries", | 
|  | "../utils/compiler:compile_dart2js_platform", | 
|  | "../utils/compiler:compile_dart2js_server_platform", | 
|  | ] | 
|  | sources = [ | 
|  | "$root_out_dir/dart2js_platform.dill", | 
|  | "$root_out_dir/dart2js_server_platform.dill", | 
|  | ] | 
|  | outputs = | 
|  | [ "$root_out_dir/$dart_sdk_output/lib/_internal/{{source_file_part}}" ] | 
|  | } | 
|  |  | 
|  | copy("copy_dart2wasm_platform") { | 
|  | visibility = [ ":create_full_sdk" ] | 
|  | deps = [ | 
|  | ":copy_libraries", | 
|  | "../:dart2wasm_platform", | 
|  | "../utils/dart2wasm:compile_dart2wasm_js_compatibility_platform", | 
|  | "../utils/dart2wasm:compile_dart2wasm_platform", | 
|  | ] | 
|  | sources = [ | 
|  | "$root_out_dir/dart2wasm_js_compatibility_outline.dill", | 
|  | "$root_out_dir/dart2wasm_js_compatibility_platform.dill", | 
|  | "$root_out_dir/dart2wasm_outline.dill", | 
|  | "$root_out_dir/dart2wasm_platform.dill", | 
|  | ] | 
|  | outputs = | 
|  | [ "$root_out_dir/$dart_sdk_output/lib/_internal/{{source_file_part}}" ] | 
|  | } | 
|  |  | 
|  | copy("copy_dart2wasm_snapshot") { | 
|  | visibility = [ ":create_full_sdk" ] | 
|  | deps = [ | 
|  | ":copy_libraries", | 
|  | "../utils/dart2wasm:dart2wasm_product_snapshot", | 
|  | ] | 
|  | sources = [ "$root_out_dir/dart2wasm_product.snapshot" ] | 
|  | outputs = | 
|  | [ "$root_out_dir/$dart_sdk_output/bin/snapshots/{{source_file_part}}" ] | 
|  | } | 
|  |  | 
|  | copy("copy_wasm_opt") { | 
|  | visibility = [ ":create_full_sdk" ] | 
|  | deps = [ | 
|  | ":copy_libraries", | 
|  | "../third_party/binaryen:wasm-opt", | 
|  | ] | 
|  | sources = [ "$root_out_dir/${wasm_opt_stripped_binary}${executable_suffix}" ] | 
|  | outputs = [ "$root_out_dir/$dart_sdk_output/bin/utils/{{source_file_part}}" ] | 
|  | } | 
|  |  | 
|  | # Copies DDC's SDK full and outline .dill files to lib/_internal. | 
|  | copy("copy_dev_compiler_dills") { | 
|  | visibility = [ ":copy_dev_compiler_sdk" ] | 
|  | deps = [ | 
|  | ":copy_libraries", | 
|  | "../utils/ddc:ddc_platform", | 
|  | ] | 
|  | sources = [ | 
|  | "$root_out_dir/ddc_outline.dill", | 
|  | "$root_out_dir/ddc_platform.dill", | 
|  | ] | 
|  | outputs = | 
|  | [ "$root_out_dir/$dart_sdk_output/lib/_internal/{{source_file_part}}" ] | 
|  | } | 
|  |  | 
|  | # Copies require.js to lib/dev_compiler/amd. | 
|  | # Used to load DDC compiled amd modules. | 
|  | copy("copy_dev_compiler_amd_require_js") { | 
|  | visibility = [ ":copy_dev_compiler_sdk" ] | 
|  | sources = [ "../third_party/requirejs/require.js" ] | 
|  | outputs = [ | 
|  | "$root_out_dir/$dart_sdk_output/lib/dev_compiler/amd/{{source_file_part}}", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # Copies ddc_module_loader.js to lib/dev_compiler/ddc. | 
|  | # Used to manage DDC library and module loading. | 
|  | copy("copy_dev_compiler_ddc_module_loader_js") { | 
|  | visibility = [ ":copy_dev_compiler_sdk" ] | 
|  | sources = [ "../pkg/dev_compiler/lib/js/ddc/ddc_module_loader.js" ] | 
|  | outputs = [ | 
|  | "$root_out_dir/$dart_sdk_output/lib/dev_compiler/ddc/ddc_module_loader.js", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # Copies stack_trace_mapper tool to lib/dev_compiler/web. | 
|  | # Used when running DDC compiled applications. | 
|  | copy("copy_dev_compiler_stack_trace_mapper") { | 
|  | visibility = [ ":copy_dev_compiler_sdk" ] | 
|  | deps = [ "../utils/ddc:stack_trace_mapper" ] | 
|  | dart_out = get_label_info("../utils/ddc:stack_trace_mapper", "root_out_dir") | 
|  | sources = [ "$dart_out/dev_compiler/build/web/dart_stack_trace_mapper.js" ] | 
|  | outputs = [ | 
|  | "$root_out_dir/$dart_sdk_output/lib/dev_compiler/web/{{source_file_part}}", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # Main rule for copying all of DDC's dependencies to lib. | 
|  | group("copy_dev_compiler_sdk") { | 
|  | visibility = [ ":create_full_sdk" ] | 
|  | public_deps = [ | 
|  | ":copy_dev_compiler_amd_require_js", | 
|  | ":copy_dev_compiler_ddc_module_loader_js", | 
|  | ":copy_dev_compiler_dills", | 
|  | ":copy_dev_compiler_stack_trace_mapper", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # This rule copies header files to include/ | 
|  | group("copy_headers") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  |  | 
|  | deps = [ "../runtime/include:copy_headers" ] | 
|  | } | 
|  |  | 
|  | # This rule copies libraries.json files to lib/ | 
|  | copy("copy_libraries_specification") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | sources = [ "lib/libraries.json" ] | 
|  | deps = [ ":copy_libraries" ] | 
|  | outputs = [ "$root_out_dir/$dart_sdk_output/lib/{{source_file_part}}" ] | 
|  | } | 
|  |  | 
|  | # This is the main rule to copy libraries in _platform_sdk_libraries to lib/ | 
|  | group("copy_platform_sdk_libraries") { | 
|  | visibility = [ | 
|  | ":_create_platform_sdk", | 
|  | ":copy_libraries", | 
|  | ] | 
|  | public_deps = [] | 
|  | foreach(library, _platform_sdk_libraries) { | 
|  | public_deps += [ ":copy_${library}_library" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # This is the main rule to copy libraries in _full_sdk_libraries to lib/ | 
|  | group("copy_full_sdk_libraries") { | 
|  | visibility = [ | 
|  | ":copy_libraries", | 
|  | ":create_full_sdk", | 
|  | ] | 
|  | public_deps = [] | 
|  | foreach(library, _full_sdk_libraries) { | 
|  | public_deps += [ ":copy_${library}_library" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | group("copy_libraries") { | 
|  | if (dart_platform_sdk) { | 
|  | public_deps = [ ":copy_platform_sdk_libraries" ] | 
|  | } else { | 
|  | public_deps = [ ":copy_full_sdk_libraries" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # This rule writes the version file. | 
|  | action("write_version_file") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | inputs = [ | 
|  | "../tools/VERSION", | 
|  | "$default_git_folder/logs/HEAD", | 
|  | ] | 
|  | output = "$root_out_dir/$dart_sdk_output/version" | 
|  | outputs = [ output ] | 
|  | script = "../tools/write_version_file.py" | 
|  | args = [ | 
|  | "--output", | 
|  | rebase_path(output), | 
|  | ] | 
|  | if (!dart_version_git_info) { | 
|  | args += [ "--no-git-hash" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # This rule writes the revision file. | 
|  | action("write_revision_file") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | inputs = [ "$default_git_folder/logs/HEAD" ] | 
|  | output = "$root_out_dir/$dart_sdk_output/revision" | 
|  | outputs = [ output ] | 
|  | script = "../tools/write_revision_file.py" | 
|  | args = [ | 
|  | "--output", | 
|  | rebase_path(output), | 
|  | ] | 
|  | if (!dart_version_git_info) { | 
|  | args += [ "--no-git-hash" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # This rule copies the README file. | 
|  | copy("copy_readme") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | sources = [ "../README.dart-sdk" ] | 
|  | outputs = [ "$root_out_dir/$dart_sdk_output/README" ] | 
|  | } | 
|  |  | 
|  | # This rule copies the LICENSE file. | 
|  | copy("copy_license") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | sources = [ "../LICENSE" ] | 
|  | outputs = [ "$root_out_dir/$dart_sdk_output/LICENSE" ] | 
|  | } | 
|  |  | 
|  | # This rule generates a custom dartdoc_options.yaml file. | 
|  | action("write_dartdoc_options") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | inputs = [ "$default_git_folder/logs/HEAD" ] | 
|  | output = "$root_out_dir/$dart_sdk_output/dartdoc_options.yaml" | 
|  | outputs = [ output ] | 
|  | script = "../tools/write_dartdoc_options_file.py" | 
|  | args = [ | 
|  | "--output", | 
|  | rebase_path(output), | 
|  | ] | 
|  | if (!dart_version_git_info) { | 
|  | args += [ "--no-git-hash" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # This rule copies the API readme file to lib/ | 
|  | copy("copy_api_readme") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | sources = [ "api_readme.md" ] | 
|  | outputs = [ "$root_out_dir/$dart_sdk_output/lib/api_readme.md" ] | 
|  | } | 
|  |  | 
|  | # This rule copies the sdk_packages.yaml file to the root of the SDK, which | 
|  | # defines the locations of the vendored SDK packages. | 
|  | copy("copy_sdk_packages_yaml") { | 
|  | visibility = [ ":create_common_sdk" ] | 
|  | sources = [ "../sdk_packages.yaml" ] | 
|  | outputs = [ "$root_out_dir/$dart_sdk_output/sdk_packages.yaml" ] | 
|  | } | 
|  |  | 
|  | # Parts common to both platform and full SDKs. | 
|  | group("create_common_sdk") { | 
|  | visibility = [ | 
|  | ":create_platform_sdk", | 
|  | ":create_sdk", | 
|  | ] | 
|  | public_deps = [ | 
|  | ":copy_api_readme", | 
|  | ":copy_dart", | 
|  | ":copy_dartdoc_files", | 
|  | ":copy_headers", | 
|  | ":copy_libraries_specification", | 
|  | ":copy_license", | 
|  | ":copy_prebuilt_devtools", | 
|  | ":copy_readme", | 
|  | ":copy_sdk_packages_yaml", | 
|  | ":copy_vm_dill_files", | 
|  | ":write_dartdoc_options", | 
|  | ":write_revision_file", | 
|  | ":write_version_file", | 
|  | ] | 
|  |  | 
|  | # We do not support AOT on ia32 and should therefore not add the | 
|  | # dart native compilation files since there is no AOT compiler/runtime | 
|  | # available. | 
|  | if (dart_target_arch != "ia32" && dart_target_arch != "x86") { | 
|  | public_deps += [ ":group_dart2native" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # Parts specific to the platform SDK. | 
|  | group("_create_platform_sdk") { | 
|  | visibility = [ | 
|  | ":create_platform_sdk", | 
|  | ":create_sdk", | 
|  | ] | 
|  | public_deps = [ | 
|  | ":copy_platform_sdk_libraries", | 
|  | ":copy_platform_sdk_scripts", | 
|  | ":copy_platform_sdk_snapshots", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # Parts specific to the full SDK. | 
|  | group("create_full_sdk") { | 
|  | visibility = [ ":create_sdk" ] | 
|  |  | 
|  | public_deps = [ | 
|  | ":copy_dart2js_dill_files", | 
|  | ":copy_dev_compiler_sdk", | 
|  | ":copy_full_sdk_libraries", | 
|  | ":copy_full_sdk_scripts", | 
|  | ":copy_full_sdk_snapshots", | 
|  | ] | 
|  |  | 
|  | if (dart_target_arch != "ia32" && dart_target_arch != "x86") { | 
|  | public_deps += [ | 
|  | ":copy_dart2wasm_platform", | 
|  | ":copy_dart2wasm_snapshot", | 
|  | ] | 
|  | if (dart_include_wasm_opt) { | 
|  | public_deps += [ ":copy_wasm_opt" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | if (dart_target_arch != "ia32" && dart_target_arch != "x86" && | 
|  | dart_target_arch != "arm") { | 
|  | # Do not include gen_snapshot binaries for cross-compilation into | 
|  | # SDK, but add them as a dependency, so that they are built. | 
|  | public_deps += [ | 
|  | "../runtime/bin:gen_snapshot_product_linux_arm64", | 
|  | "../runtime/bin:gen_snapshot_product_linux_x64", | 
|  | ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # Build a SDK with less stuff. It excludes dart2js, ddc, and web libraries. | 
|  | group("create_platform_sdk") { | 
|  | public_deps = [ | 
|  | ":_create_platform_sdk", | 
|  | ":create_common_sdk", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # The main target to depend on from ../BUILD.gn | 
|  | group("create_sdk") { | 
|  | public_deps = [ ":create_common_sdk" ] | 
|  | if (dart_platform_sdk) { | 
|  | public_deps += [ ":_create_platform_sdk" ] | 
|  | } else { | 
|  | public_deps += [ ":create_full_sdk" ] | 
|  | } | 
|  | } |