dart-sdk/sdk/BUILD.gn

801 lines
23 KiB
Plaintext
Raw Normal View History

# 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")
Reland "[vm] Build dart2native dependencies with the normal "create_sdk" target" The flutter engine DEPS got new icu/boringssl so this CL can safely land and roll into engine. A small change is made in Patchset 1..3. This removes special logic for creating the `dart-sdk` we distribute which used to build release and product mode and copied some binaries from the latter into the former, before the SDK was actuallly ready to test and distribute. This changes the GN build rules to build the necessary gen_snapshot/dart_precompiled_runtime product binaries during the normal release build. Normally during --mode=product builds the global build config in //build/config/BUILDCONFIG.gn will set `-fvisibility=false`. => Doing so results in much smaller binaries - because only explicitly exported symbols are visible, the rest can be tree shaken by the linker. Since we are building --mode=release, the `-fvisibility=false` will not be set. In order to set the flag for the 2 special product-mode binaries we need to add -fvisibility=hidden manually, in: * dart_product_config: Which is used for compiling VM sources. * 3rd party double-conversion library * 3rd party boringssl library * 3rd party icu library The upstream CLs are: * BoringSSL: https://dart-review.googlesource.com/c/boringssl_gen/+/150482 * ICU: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/2236407 Issue https://github.com/dart-lang/sdk/issues/42230 Change-Id: I8d9b37acbb5eb94e44d97652f838948a946fd372 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151505 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
2020-06-17 16:12:26 +00:00
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"
Reland "[vm] Build dart2native dependencies with the normal "create_sdk" target" The flutter engine DEPS got new icu/boringssl so this CL can safely land and roll into engine. A small change is made in Patchset 1..3. This removes special logic for creating the `dart-sdk` we distribute which used to build release and product mode and copied some binaries from the latter into the former, before the SDK was actuallly ready to test and distribute. This changes the GN build rules to build the necessary gen_snapshot/dart_precompiled_runtime product binaries during the normal release build. Normally during --mode=product builds the global build config in //build/config/BUILDCONFIG.gn will set `-fvisibility=false`. => Doing so results in much smaller binaries - because only explicitly exported symbols are visible, the rest can be tree shaken by the linker. Since we are building --mode=release, the `-fvisibility=false` will not be set. In order to set the flag for the 2 special product-mode binaries we need to add -fvisibility=hidden manually, in: * dart_product_config: Which is used for compiling VM sources. * 3rd party double-conversion library * 3rd party boringssl library * 3rd party icu library The upstream CLs are: * BoringSSL: https://dart-review.googlesource.com/c/boringssl_gen/+/150482 * ICU: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/2236407 Issue https://github.com/dart-lang/sdk/issues/42230 Change-Id: I8d9b37acbb5eb94e44d97652f838948a946fd372 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151505 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
2020-06-17 16:12:26 +00:00
dart_precompiled_runtime_stripped_binary = "dart_precompiled_runtime_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)
Reland "[vm] Build dart2native dependencies with the normal "create_sdk" target" The flutter engine DEPS got new icu/boringssl so this CL can safely land and roll into engine. A small change is made in Patchset 1..3. This removes special logic for creating the `dart-sdk` we distribute which used to build release and product mode and copied some binaries from the latter into the former, before the SDK was actuallly ready to test and distribute. This changes the GN build rules to build the necessary gen_snapshot/dart_precompiled_runtime product binaries during the normal release build. Normally during --mode=product builds the global build config in //build/config/BUILDCONFIG.gn will set `-fvisibility=false`. => Doing so results in much smaller binaries - because only explicitly exported symbols are visible, the rest can be tree shaken by the linker. Since we are building --mode=release, the `-fvisibility=false` will not be set. In order to set the flag for the 2 special product-mode binaries we need to add -fvisibility=hidden manually, in: * dart_product_config: Which is used for compiling VM sources. * 3rd party double-conversion library * 3rd party boringssl library * 3rd party icu library The upstream CLs are: * BoringSSL: https://dart-review.googlesource.com/c/boringssl_gen/+/150482 * ICU: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/2236407 Issue https://github.com/dart-lang/sdk/issues/42230 Change-Id: I8d9b37acbb5eb94e44d97652f838948a946fd372 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151505 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
2020-06-17 16:12:26 +00:00
# ......utils/gen_snapshot or utils/gen_snapshot.exe (if not on ia32)
# ......snapshots/
# ........analysis_server.dart.snapshot
# ........dart2js.dart.snapshot
# ........dart2wasm_product.snapshot (if not on ia32)
# ........dartdev.dart.snapshot (app-jit snapshot or kernel dill file)
# ........dartdevc.dart.snapshot
# ........dds_aot.dart.snapshot (AOT snapshot) or dds.dart.snapshot (ia32)
# ........frontend_server_aot.dart.snapshot (AOT snapshot, if not on ia32)
# ........frontend_server.dart.snapshot
# ........gen_kernel_aot.dart.snapshot (if not on ia32)
# ........kernel-service.dart.snapshot
# ........kernel_worker.dart.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_platform_unsound.dill
# ........dart2js_server_platform.dill
# ........dart2js_server_platform_unsound.dill
# ........dart2wasm_outline.dill (if not on ia32)
# ........dart2wasm_platform.dill (if not on ia32)
# ........dart2wasm_stringref_outline.dill (if not on ia32)
# ........dart2wasm_stringref_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/
# ......convert/
# ......core/
# ......dev_compiler/
#.........amd/require.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",
],
[
"dartdev",
"../utils/dartdev:dartdev",
],
[
"frontend_server",
"../utils/kernel-service:frontend_server",
],
]
if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
_platform_sdk_snapshots += [ [
"dds_aot",
"../utils/dds:dds_aot",
] ]
} else {
_platform_sdk_snapshots += [ [
"dds",
"../utils/dds:dds",
] ]
}
if (dart_snapshot_kind == "app-jit") {
_platform_sdk_snapshots += [ [
"kernel-service",
"../utils/kernel-service:kernel-service_snapshot",
] ]
}
_full_sdk_snapshots = _platform_sdk_snapshots + [
[
"dart2js",
"../utils/compiler:dart2js",
],
[
"dartdevc",
"../utils/ddc:dartdevc",
],
[
"kernel_worker",
"../utils/bazel:kernel_worker",
],
]
# Libraries that go under lib/
_full_sdk_libraries = [
"_internal",
"async",
"cli",
"collection",
"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
# From here down to the copy_trees() invocation, we collect all the information
# about trees that need to be copied in the list of scopes, copy_tree_specs.
copy_tree_specs = []
# This rule copies dartdoc templates to
# bin/resources/dartdoc/templates
copy_tree_specs += [
{
target = "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"
ignore_patterns = "{}"
},
]
# This rule copies dartdoc resources to
# bin/resources/dartdoc/resources
copy_tree_specs += [
{
target = "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"
ignore_patterns = "{}"
},
]
# This rule copies the pre-built DevTools application to
# bin/resources/devtools/
copy_tree_specs += [
{
target = "copy_prebuilt_devtools"
visibility = [ ":create_common_sdk" ]
source = "../third_party/devtools/web"
dest = "$root_out_dir/$dart_sdk_output/bin/resources/devtools"
ignore_patterns = "{}"
},
]
# This loop generates rules to copy libraries to lib/
foreach(library, _full_sdk_libraries) {
copy_tree_specs += [
{
target = "copy_${library}_library"
visibility = [
":copy_full_sdk_libraries",
":copy_platform_sdk_libraries",
]
source = "lib/$library"
dest = "$root_out_dir/$dart_sdk_output/lib/$library"
ignore_patterns = "*.svn,doc,*.py,*.gypi,*.sh,.gitignore"
},
]
}
# This generates targets for everything in copy_tree_specs. The targets have the
# same name as the "target" fields in the scopes of copy_tree_specs.
copy_trees("copy_trees") {
sources = copy_tree_specs
}
_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")
Reland "[vm] Build dart2native dependencies with the normal "create_sdk" target" The flutter engine DEPS got new icu/boringssl so this CL can safely land and roll into engine. A small change is made in Patchset 1..3. This removes special logic for creating the `dart-sdk` we distribute which used to build release and product mode and copied some binaries from the latter into the former, before the SDK was actuallly ready to test and distribute. This changes the GN build rules to build the necessary gen_snapshot/dart_precompiled_runtime product binaries during the normal release build. Normally during --mode=product builds the global build config in //build/config/BUILDCONFIG.gn will set `-fvisibility=false`. => Doing so results in much smaller binaries - because only explicitly exported symbols are visible, the rest can be tree shaken by the linker. Since we are building --mode=release, the `-fvisibility=false` will not be set. In order to set the flag for the 2 special product-mode binaries we need to add -fvisibility=hidden manually, in: * dart_product_config: Which is used for compiling VM sources. * 3rd party double-conversion library * 3rd party boringssl library * 3rd party icu library The upstream CLs are: * BoringSSL: https://dart-review.googlesource.com/c/boringssl_gen/+/150482 * ICU: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/2236407 Issue https://github.com/dart-lang/sdk/issues/42230 Change-Id: I8d9b37acbb5eb94e44d97652f838948a946fd372 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151505 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
2020-06-17 16:12:26 +00:00
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_dartaotruntime") {
visibility = [ ":group_dart2native" ]
Reland "[vm] Build dart2native dependencies with the normal "create_sdk" target" The flutter engine DEPS got new icu/boringssl so this CL can safely land and roll into engine. A small change is made in Patchset 1..3. This removes special logic for creating the `dart-sdk` we distribute which used to build release and product mode and copied some binaries from the latter into the former, before the SDK was actuallly ready to test and distribute. This changes the GN build rules to build the necessary gen_snapshot/dart_precompiled_runtime product binaries during the normal release build. Normally during --mode=product builds the global build config in //build/config/BUILDCONFIG.gn will set `-fvisibility=false`. => Doing so results in much smaller binaries - because only explicitly exported symbols are visible, the rest can be tree shaken by the linker. Since we are building --mode=release, the `-fvisibility=false` will not be set. In order to set the flag for the 2 special product-mode binaries we need to add -fvisibility=hidden manually, in: * dart_product_config: Which is used for compiling VM sources. * 3rd party double-conversion library * 3rd party boringssl library * 3rd party icu library The upstream CLs are: * BoringSSL: https://dart-review.googlesource.com/c/boringssl_gen/+/150482 * ICU: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/2236407 Issue https://github.com/dart-lang/sdk/issues/42230 Change-Id: I8d9b37acbb5eb94e44d97652f838948a946fd372 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151505 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
2020-06-17 16:12:26 +00:00
deps = [ "../runtime/bin:dart_precompiled_runtime_product" ]
src_dir = get_label_info("../runtime/bin:dart_precompiled_runtime_product",
"root_out_dir")
sources = [
"$src_dir/${dart_precompiled_runtime_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") {
Reland "[vm] Build dart2native dependencies with the normal "create_sdk" target" The flutter engine DEPS got new icu/boringssl so this CL can safely land and roll into engine. A small change is made in Patchset 1..3. This removes special logic for creating the `dart-sdk` we distribute which used to build release and product mode and copied some binaries from the latter into the former, before the SDK was actuallly ready to test and distribute. This changes the GN build rules to build the necessary gen_snapshot/dart_precompiled_runtime product binaries during the normal release build. Normally during --mode=product builds the global build config in //build/config/BUILDCONFIG.gn will set `-fvisibility=false`. => Doing so results in much smaller binaries - because only explicitly exported symbols are visible, the rest can be tree shaken by the linker. Since we are building --mode=release, the `-fvisibility=false` will not be set. In order to set the flag for the 2 special product-mode binaries we need to add -fvisibility=hidden manually, in: * dart_product_config: Which is used for compiling VM sources. * 3rd party double-conversion library * 3rd party boringssl library * 3rd party icu library The upstream CLs are: * BoringSSL: https://dart-review.googlesource.com/c/boringssl_gen/+/150482 * ICU: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/2236407 Issue https://github.com/dart-lang/sdk/issues/42230 Change-Id: I8d9b37acbb5eb94e44d97652f838948a946fd372 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151505 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
2020-06-17 16:12:26 +00:00
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}",
]
Reland "[vm] Build dart2native dependencies with the normal "create_sdk" target" The flutter engine DEPS got new icu/boringssl so this CL can safely land and roll into engine. A small change is made in Patchset 1..3. This removes special logic for creating the `dart-sdk` we distribute which used to build release and product mode and copied some binaries from the latter into the former, before the SDK was actuallly ready to test and distribute. This changes the GN build rules to build the necessary gen_snapshot/dart_precompiled_runtime product binaries during the normal release build. Normally during --mode=product builds the global build config in //build/config/BUILDCONFIG.gn will set `-fvisibility=false`. => Doing so results in much smaller binaries - because only explicitly exported symbols are visible, the rest can be tree shaken by the linker. Since we are building --mode=release, the `-fvisibility=false` will not be set. In order to set the flag for the 2 special product-mode binaries we need to add -fvisibility=hidden manually, in: * dart_product_config: Which is used for compiling VM sources. * 3rd party double-conversion library * 3rd party boringssl library * 3rd party icu library The upstream CLs are: * BoringSSL: https://dart-review.googlesource.com/c/boringssl_gen/+/150482 * ICU: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/2236407 Issue https://github.com/dart-lang/sdk/issues/42230 Change-Id: I8d9b37acbb5eb94e44d97652f838948a946fd372 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151505 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
2020-06-17 16:12:26 +00:00
}
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" ]
}
}
Reland "[vm] Build dart2native dependencies with the normal "create_sdk" target" The flutter engine DEPS got new icu/boringssl so this CL can safely land and roll into engine. A small change is made in Patchset 1..3. This removes special logic for creating the `dart-sdk` we distribute which used to build release and product mode and copied some binaries from the latter into the former, before the SDK was actuallly ready to test and distribute. This changes the GN build rules to build the necessary gen_snapshot/dart_precompiled_runtime product binaries during the normal release build. Normally during --mode=product builds the global build config in //build/config/BUILDCONFIG.gn will set `-fvisibility=false`. => Doing so results in much smaller binaries - because only explicitly exported symbols are visible, the rest can be tree shaken by the linker. Since we are building --mode=release, the `-fvisibility=false` will not be set. In order to set the flag for the 2 special product-mode binaries we need to add -fvisibility=hidden manually, in: * dart_product_config: Which is used for compiling VM sources. * 3rd party double-conversion library * 3rd party boringssl library * 3rd party icu library The upstream CLs are: * BoringSSL: https://dart-review.googlesource.com/c/boringssl_gen/+/150482 * ICU: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/2236407 Issue https://github.com/dart-lang/sdk/issues/42230 Change-Id: I8d9b37acbb5eb94e44d97652f838948a946fd372 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151505 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
2020-06-17 16:12:26 +00:00
copy("copy_vm_platform_strong_product") {
visibility = [ ":group_dart2native" ]
Reland "[vm] Build dart2native dependencies with the normal "create_sdk" target" The flutter engine DEPS got new icu/boringssl so this CL can safely land and roll into engine. A small change is made in Patchset 1..3. This removes special logic for creating the `dart-sdk` we distribute which used to build release and product mode and copied some binaries from the latter into the former, before the SDK was actuallly ready to test and distribute. This changes the GN build rules to build the necessary gen_snapshot/dart_precompiled_runtime product binaries during the normal release build. Normally during --mode=product builds the global build config in //build/config/BUILDCONFIG.gn will set `-fvisibility=false`. => Doing so results in much smaller binaries - because only explicitly exported symbols are visible, the rest can be tree shaken by the linker. Since we are building --mode=release, the `-fvisibility=false` will not be set. In order to set the flag for the 2 special product-mode binaries we need to add -fvisibility=hidden manually, in: * dart_product_config: Which is used for compiling VM sources. * 3rd party double-conversion library * 3rd party boringssl library * 3rd party icu library The upstream CLs are: * BoringSSL: https://dart-review.googlesource.com/c/boringssl_gen/+/150482 * ICU: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/2236407 Issue https://github.com/dart-lang/sdk/issues/42230 Change-Id: I8d9b37acbb5eb94e44d97652f838948a946fd372 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151505 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
2020-06-17 16:12:26 +00:00
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_dartaotruntime",
":copy_gen_kernel_snapshot",
":copy_gen_snapshot",
Reland "[vm] Build dart2native dependencies with the normal "create_sdk" target" The flutter engine DEPS got new icu/boringssl so this CL can safely land and roll into engine. A small change is made in Patchset 1..3. This removes special logic for creating the `dart-sdk` we distribute which used to build release and product mode and copied some binaries from the latter into the former, before the SDK was actuallly ready to test and distribute. This changes the GN build rules to build the necessary gen_snapshot/dart_precompiled_runtime product binaries during the normal release build. Normally during --mode=product builds the global build config in //build/config/BUILDCONFIG.gn will set `-fvisibility=false`. => Doing so results in much smaller binaries - because only explicitly exported symbols are visible, the rest can be tree shaken by the linker. Since we are building --mode=release, the `-fvisibility=false` will not be set. In order to set the flag for the 2 special product-mode binaries we need to add -fvisibility=hidden manually, in: * dart_product_config: Which is used for compiling VM sources. * 3rd party double-conversion library * 3rd party boringssl library * 3rd party icu library The upstream CLs are: * BoringSSL: https://dart-review.googlesource.com/c/boringssl_gen/+/150482 * ICU: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/2236407 Issue https://github.com/dart-lang/sdk/issues/42230 Change-Id: I8d9b37acbb5eb94e44d97652f838948a946fd372 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151505 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Thomas <athom@google.com>
2020-06-17 16:12:26 +00:00
":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 target puts the frontend_server AOT snapshot into bin/snapshots
copy("copy_frontend_server_aot_snapshot") {
visibility = [
":copy_full_sdk_snapshots",
":copy_platform_sdk_snapshots",
]
deps = [ "../utils/kernel-service:frontend_server_aot" ]
sources = [ "$root_out_dir/frontend_server_aot.dart.snapshot" ]
outputs = [ "$root_out_dir/$dart_sdk_output/bin/snapshots/frontend_server_aot.dart.snapshot" ]
}
# This loop generates "copy" targets that put AppJIT 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") {
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/{{source_file_part}}" ]
}
}
# 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" ]
}
if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
public_deps += [ ":copy_frontend_server_aot_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" ]
}
if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
public_deps += [ ":copy_frontend_server_aot_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",
"../utils/dart2wasm:compile_dart2wasm_stringref_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",
"$root_out_dir/dart2wasm_stringref_outline.dill",
"$root_out_dir/dart2wasm_stringref_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 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_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),
]
}
# 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),
]
}
# 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),
]
}
# 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" ]
}
# 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_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" ]
}
}
}
# 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" ]
}
}