dart-sdk/runtime/BUILD.gn

308 lines
7.9 KiB
Plaintext
Raw Normal View History

# Copyright (c) 2014, 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("configs.gni")
import("runtime_args.gni")
if (is_fuchsia) {
import("//build/fuchsia/sdk.gni")
}
config("dart_public_config") {
include_dirs = [
".",
"include",
]
}
# Adds PRODUCT define if Flutter has specified "release" for dart_runtime_mode
config("dart_maybe_product_config") {
defines = []
if (dart_runtime_mode != "develop" && dart_runtime_mode != "profile" &&
dart_runtime_mode != "release") {
print("Invalid |dart_runtime_mode|")
assert(false)
}
if (dart_runtime_mode == "release") {
if (dart_debug) {
print("Debug and release mode are mutually exclusive.")
}
assert(!dart_debug)
defines += [ "PRODUCT" ]
}
}
# This is a config to use to build PRODUCT mode artifacts in a RELEASE build.
# If a DEBUG build has been specified it will be ignored.
config("dart_product_config") {
defines = []
if (!dart_debug) {
defines += [ "PRODUCT" ]
}
}
config("dart_precompiled_runtime_config") {
defines = []
defines += [
"DART_PRECOMPILED_RUNTIME",
"EXCLUDE_CFE_AND_KERNEL_PLATFORM",
]
}
# Controls DART_PRECOMPILER #define.
config("dart_precompiler_config") {
defines = []
defines += [ "DART_PRECOMPILER" ]
}
config("dart_nosnapshot_config") {
defines = []
defines += [ "DART_NO_SNAPSHOT" ]
}
config("dart_os_config") {
defines = []
Revert "[build] Rely on default host os TARGET_OS unless cross-compiling." This reverts commit 4167867bb2d5e3ffccffd5a8ff7d701227206f6a as it breaks arm gen_snapshot that are build on linux: ``` $ python tools/build.py -mrelease -aarm --os=android dart process_test runtime_precompiled using /run/user/276040/goma_aam as tmpdir Auto update is skipped because latest/MANIFEST was updated recently. Using goma VERSION=181 (latest) GOMA version 2cc1b3e007b13ab21f982568ba6518c1c29d09e5@1567062346 goma is already running. ninja -C out/ReleaseAndroidARM -j1000 -l64 dart process_test runtime_precompiled ninja: Entering directory `out/ReleaseAndroidARM' [1/1] Regenerating ninja files current_toolchain //build/toolchain/android:clang_arm host_toolchain //build/toolchain/linux:clang_x86 dart_host_toolchain //build/toolchain/linux:clang_x86 current_toolchain //build/toolchain/linux:clang_x86 host_toolchain //build/toolchain/linux:clang_x86 dart_host_toolchain //build/toolchain/linux:clang_x86 ... $ python tools/test.py -n dartkp-android-release-arm ffi/data_not_asan_test ... --- Command "precompiler" (took 39ms): DART_CONFIGURATION=ReleaseAndroidARM out/ReleaseAndroidARM/clang_x86/gen_snapshot --snapshot-kind=app-aot-elf --elf=/usr/local/google/home/aam/p/d/dart-sdk/sdk/out/ReleaseAndroidARM/generated_compilations/dartkp/tests_ffi_data_not_asan_test/out.aotsnapshot --no-sim-use-hardfp --ignore-unrecognized-flags --packages=/usr/local/google/home/aam/p/d/dart-sdk/sdk/.packages /usr/local/google/home/aam/p/d/dart-sdk/sdk/out/ReleaseAndroidARM/generated_compilations/dartkp/tests_ffi_data_not_asan_test/out.dill exit code: 255 stderr: error: import of dart:ffi is not supported in the current Dart runtime --- Re-run this test: python tools/test.py -n dartkp-android-release-arm ffi/data_not_asan_test ``` Change-Id: Ib1d3d11fc7bdb138557cee363681718bc5e88e24 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/118474 Reviewed-by: Alexander Aprelev <aam@google.com>
2019-09-23 23:04:55 +00:00
# If dart_host_toolchain is the current toolchain, and it is different from
# host_toolchain, then we are building the SDK for the host, and should not
# hardcode these defines.
if (current_toolchain != dart_host_toolchain ||
host_toolchain == dart_host_toolchain) {
if (target_os == "android") {
defines += [ "TARGET_OS_ANDROID" ]
} else if (target_os == "fuchsia") {
defines += [ "TARGET_OS_FUCHSIA" ]
} else if (target_os == "ios") {
defines += [ "TARGET_OS_MACOS" ]
defines += [ "TARGET_OS_MACOS_IOS" ]
} else if (target_os == "linux") {
defines += [ "TARGET_OS_LINUX" ]
} else if (target_os == "mac") {
defines += [ "TARGET_OS_MACOS" ]
} else if (target_os == "win") {
defines += [ "TARGET_OS_WINDOWS" ]
} else {
print("Unknown target_os: $target_os")
assert(false)
}
}
}
# We need to build gen_snapshot targeting Fuchsia during a build of the SDK
# targeting Mac and Linux. This configuration is used to unconditionally target
# Fuchsia. It should not be combined with dart_os_config.
config("dart_os_fuchsia_config") {
defines = [ "TARGET_OS_FUCHSIA" ]
}
config("dart_arch_config") {
defines = []
# If dart_host_toolchain is the current toolchain, and it is different from
# host_toolchain, then we are building the SDK for the host, and should not
# hardcode these defines.
if (current_toolchain != dart_host_toolchain ||
host_toolchain == dart_host_toolchain) {
if (dart_target_arch == "arm") {
defines += [ "TARGET_ARCH_ARM" ]
} else if (dart_target_arch == "armv6") {
defines += [ "TARGET_ARCH_ARM" ]
defines += [ "TARGET_ARCH_ARM_6" ]
} else if (dart_target_arch == "armv5te") {
defines += [ "TARGET_ARCH_ARM" ]
defines += [ "TARGET_ARCH_ARM_5TE" ]
} else if (dart_target_arch == "arm64") {
defines += [ "TARGET_ARCH_ARM64" ]
} else if (dart_target_arch == "x64") {
defines += [ "TARGET_ARCH_X64" ]
} else if (dart_target_arch == "ia32" || dart_target_arch == "x86") {
defines += [ "TARGET_ARCH_IA32" ]
} else if (dart_target_arch == "dbc") {
defines += [ "TARGET_ARCH_DBC" ]
defines += [ "USING_SIMULATOR" ]
} else {
print("Invalid dart_target_arch: $dart_target_arch")
assert(false)
}
}
}
config("dart_config") {
defines = []
if (dart_debug) {
defines += [ "DEBUG" ]
} else {
defines += [ "NDEBUG" ]
}
include_dirs = [ "include" ]
if (dart_use_tcmalloc) {
defines += [ "DART_USE_TCMALLOC" ]
include_dirs += [ "../third_party/tcmalloc/gperftools/src" ]
}
[vm/bytecode] Bootstrapping VM from bytecode Previously, core snapshot was generated from AST (because --enable-interpreter/--use-bytecode-compiler was not specified when building core snapshot). As the result, CL https://dart.googlesource.com/sdk/+/da8cb470cc94830a98d49532e8d5d1a5b3d80f8b which declared libraries in bytecode also removed bytecode entirely from core snapshot in Dart SDK. This CL enables bytecode by default if --bytecode argument is specified for gn.py. This enables JIT compiler from bytecode (interpreter is still disabled by default but can be enabled using --enable-interpreter). Core snapshot and other snapshots now have bytecode. This change revealed a bunch of bugs which are fixed in this CL: * _Closure fields were treated as unboxing candidates which triggered assertion in LoadFieldTOS in interpreter. * Several places should load class declarations if they are not loaded yet. * Canonicalization of TypeRef objects which are not fully initialized may cause duplicate entries in the hash table of canonical TypeArguments. This triggers assertions when hash table is rehashed. The solution is to avoid canonicalization of non-root recursive types and recursive type arguments. Also, TypeRef::Canonicalize and TypeRef::Hash are reverted to assert and work only if type was set. * Native wrapper classes are eagerly stamped as type-finalized which caused assertion failures when reading their class declarations from bytecode. * When building flow graph for FFI trampolines kernel offset of library (which is now declared in bytecode) was queried. Added special case to Function::KernelDataProgramOffset(). * In interpreter-only mode with simulator (e.g. SIMARM64) if simulator is not called before code is interrupted with stack overflow check, simulator returns get_sp() = 0, which was treated as stack overflow. * test standalone_2/io/platform_resolved_executable_test.dart spawns sub-process but it didn't pass VM options. Change-Id: I81bc4f1a4c6725cfa246a435ebe5d8abe43abc67 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107199 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Régis Crelier <regis@google.com>
2019-06-26 18:25:26 +00:00
if (dart_platform_bytecode) {
defines += [ "DART_USE_BYTECODE" ]
}
if (is_fuchsia) {
if (using_fuchsia_sdk) {
# TODO(chinmaygarde): Currenty these targets need to be build in the
# Fuchsia tree as well as outside it using the SDK. However, not all
# Fuchsia features are available in the SDK. As these features are added,
# the guards can be removed. Eventually, only SDK builds will be present.
# Then, this flag can be removed completely.
defines += [ "FUCHSIA_SDK" ]
} else {
include_dirs += [ "//zircon/system/ulib/zx/include" ]
}
}
if (!is_win) {
cflags = [
"-Werror",
"-Wall",
"-Wextra", # Also known as -W.
"-Wno-unused-parameter",
"-Wno-unused-private-field",
"-Wnon-virtual-dtor",
"-Wvla",
"-Wno-conversion-null",
"-Woverloaded-virtual",
"-Wno-comments", # Conflicts with clang-format.
"-g3",
"-ggdb3",
"-fno-rtti",
"-fno-exceptions",
"-Wimplicit-fallthrough",
]
ldflags = []
if (is_clang && dart_vm_code_coverage) {
cflags += [
"-O0",
"-fprofile-arcs",
"-ftest-coverage",
]
ldflags += [ "--coverage" ]
} else if (dart_debug) {
cflags += [ "-O${dart_debug_optimization_level}" ]
} else {
cflags += [ "-O3" ]
}
if (defined(is_asan) && is_asan) {
ldflags += [ "-fsanitize=address" ]
}
if (defined(is_msan) && is_msan) {
ldflags += [ "-fsanitize=memory" ]
}
if (defined(is_tsan) && is_tsan) {
ldflags += [ "-fsanitize=thread" ]
}
if (is_fuchsia) {
# safe-stack does not work with the interpreter.
cflags += [ "-fno-sanitize=safe-stack" ]
}
}
}
config("dart_shared_lib") {
if (dart_lib_export_symbols) {
defines = [ "DART_SHARED_LIB" ]
}
}
config("dart_libfuzzer_config") {
defines = [ "FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" ]
cflags = [ "-fsanitize=address,fuzzer-no-link" ]
ldflags = [ "-fsanitize=address,fuzzer" ]
}
source_set("dart_api") {
public_configs = [ ":dart_public_config" ]
sources = [
"include/dart_api.h",
"include/dart_native_api.h",
"include/dart_tools_api.h",
]
}
library_for_all_configs("libdart") {
target_type = dart_component_kind
extra_deps = [
"third_party/double-conversion/src:libdouble_conversion",
":generate_version_cc_file",
]
if (dart_enable_wasm) {
extra_deps += [ "//third_party/wasmer" ]
defines = [ "DART_ENABLE_WASM" ]
}
if (is_fuchsia) {
if (using_fuchsia_sdk) {
extra_deps += [ "$fuchsia_sdk_root/pkg:fdio" ]
} else {
extra_deps += [
"//zircon/public/lib/fbl",
"//zircon/public/lib/trace-engine",
]
}
}
configurable_deps = [
"platform:libdart_platform",
"vm:libdart_lib",
"vm:libdart_vm",
]
extra_configs = [ ":dart_shared_lib" ]
include_dirs = [ "." ]
public_configs = [ ":dart_public_config" ]
sources = [
"$target_gen_dir/version.cc",
"include/dart_api.h",
"include/dart_native_api.h",
"include/dart_tools_api.h",
"vm/dart_api_impl.cc",
"vm/native_api_impl.cc",
"vm/version.h",
]
}
action("generate_version_cc_file") {
inputs = [
"../tools/utils.py",
"../tools/VERSION",
"vm/version_in.cc",
]
if (dart_version_git_info) {
inputs += [ "../.git/logs/HEAD" ]
}
output = "$target_gen_dir/version.cc"
outputs = [
output,
]
script = "../tools/make_version.py"
args = [
"--quiet",
"--output",
rebase_path(output, root_build_dir),
"--input",
rebase_path("vm/version_in.cc", root_build_dir),
]
if (!dart_version_git_info) {
args += [ "--no_git_hash" ]
}
if (dart_custom_version_for_pub != "") {
args += [
"--custom_for_pub",
dart_custom_version_for_pub,
]
}
}