mirror of
https://github.com/dart-lang/sdk
synced 2024-11-05 18:22:09 +00:00
f524ec74ce
This CL makes `FfiNative`s use `DynamicLibrary.process()` lookup if resolving with the resolver set by `Dart_SetFfiNativeResolver` fails. Also moves the implementation over from ffi.cc to ffi_dynamic_library.cc so the implementation can be shared with `DynamicLibrary.process()`. Moves the implementation behind non-simulator and non-precompiler. However, the implementation is tested in vm/cc tests which are in precompiler mode. So enables the implementation if TESTED is defined. This CL massages the build files so that TESTED is properly defined when compiling the runtime for the vm/cc tests, and links the ole32 symbols on windows for vm/cc tests. (And some unrelated small cleanup changes here and there.) TEST=tests/ffi/native_assets/process_test.dart Change-Id: I25395d381db1d9b4b7a5759171a798a1140a6140 Cq-Include-Trybots: luci.dart.try:vm-kernel-win-debug-x64c-try,vm-kernel-win-debug-x64-try,vm-kernel-nnbd-win-debug-x64-try,vm-kernel-precomp-win-debug-x64c-try,dart-sdk-win-try,vm-kernel-win-release-x64-try,vm-kernel-win-release-ia32-try,vm-kernel-precomp-win-product-x64-try,vm-kernel-reload-linux-debug-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/264982 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com>
1121 lines
28 KiB
Text
1121 lines
28 KiB
Text
# 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/config/gclient_args.gni")
|
|
import("../../build/dart/dart_action.gni")
|
|
import("../../sdk_args.gni")
|
|
import("../runtime_args.gni")
|
|
import("../vm/compiler/compiler_sources.gni")
|
|
import("../vm/heap/heap_sources.gni")
|
|
import("../vm/vm_sources.gni")
|
|
import("builtin_impl_sources.gni")
|
|
import("builtin_sources.gni")
|
|
import("cli_impl_sources.gni")
|
|
import("cli_sources.gni")
|
|
import("io_impl_sources.gni")
|
|
import("io_sources.gni")
|
|
|
|
if (is_fuchsia) {
|
|
import("//build/fuchsia/sdk.gni")
|
|
}
|
|
|
|
config("libdart_builtin_config") {
|
|
if (is_win) {
|
|
libs = [ "bcrypt.lib" ]
|
|
} else {
|
|
libs = [ "dl" ]
|
|
}
|
|
if (is_android) {
|
|
libs += [
|
|
"android",
|
|
"log",
|
|
]
|
|
}
|
|
}
|
|
|
|
template("build_libdart_builtin") {
|
|
extra_configs = []
|
|
if (defined(invoker.extra_configs)) {
|
|
extra_configs += invoker.extra_configs
|
|
}
|
|
source_set(target_name) {
|
|
configs += [ "..:dart_config" ] + extra_configs
|
|
public_configs = [ ":libdart_builtin_config" ]
|
|
deps = []
|
|
if (is_fuchsia) {
|
|
if (using_fuchsia_gn_sdk) {
|
|
public_deps = [ "$fuchsia_sdk_root/pkg/fdio" ]
|
|
} else if (using_fuchsia_sdk) {
|
|
public_deps = [ "$fuchsia_sdk_root/pkg:fdio" ]
|
|
} else {
|
|
public_deps = [ "//sdk/lib/fdio" ]
|
|
}
|
|
}
|
|
include_dirs = [ ".." ]
|
|
sources = builtin_impl_sources
|
|
}
|
|
}
|
|
|
|
build_libdart_builtin("libdart_builtin") {
|
|
extra_configs = [
|
|
"..:dart_maybe_product_config",
|
|
"..:dart_os_config",
|
|
"..:dart_arch_config",
|
|
]
|
|
}
|
|
|
|
build_libdart_builtin("libdart_builtin_product") {
|
|
extra_configs = [
|
|
"..:dart_product_config",
|
|
"..:dart_os_config",
|
|
"..:dart_arch_config",
|
|
]
|
|
}
|
|
|
|
build_libdart_builtin("libdart_builtin_fuchsia") {
|
|
extra_configs = [
|
|
"..:dart_maybe_product_config",
|
|
"..:dart_os_fuchsia_config",
|
|
]
|
|
}
|
|
|
|
build_libdart_builtin("libdart_builtin_product_fuchsia") {
|
|
extra_configs = [
|
|
"..:dart_product_config",
|
|
"..:dart_os_fuchsia_config",
|
|
]
|
|
}
|
|
|
|
build_libdart_builtin("libdart_builtin_host_targeting_host") {
|
|
extra_configs = [ "..:dart_maybe_product_config" ]
|
|
}
|
|
|
|
build_libdart_builtin("libdart_builtin_product_host_targeting_host") {
|
|
extra_configs = [ "..:dart_product_config" ]
|
|
}
|
|
|
|
static_library("crashpad") {
|
|
configs += [
|
|
"..:dart_arch_config",
|
|
"..:dart_config",
|
|
"..:dart_product_config",
|
|
"..:dart_os_fuchsia_config",
|
|
]
|
|
include_dirs = [ ".." ]
|
|
sources = [ "crashpad.cc" ]
|
|
|
|
if (dart_use_crashpad) {
|
|
assert(is_win, "dart_use_crashpad is only supported on Windows")
|
|
deps = [
|
|
"//third_party/crashpad/crashpad/client",
|
|
"//third_party/mini_chromium/mini_chromium/base",
|
|
|
|
# This binary is used to handle crashes of the dart binary.
|
|
"//third_party/crashpad/crashpad/handler:crashpad_handler",
|
|
]
|
|
include_dirs += [ "//third_party/crashpad" ]
|
|
defines = [ "DART_USE_CRASHPAD" ]
|
|
}
|
|
}
|
|
|
|
template("build_elf_loader") {
|
|
source_set(target_name) {
|
|
configs += [
|
|
"..:dart_arch_config",
|
|
"..:dart_config",
|
|
"..:dart_product_config",
|
|
"..:dart_os_fuchsia_config",
|
|
]
|
|
include_dirs = [ ".." ]
|
|
sources = [
|
|
"elf_loader.cc",
|
|
"elf_loader.h",
|
|
"virtual_memory.h",
|
|
"virtual_memory_fuchsia.cc",
|
|
"virtual_memory_posix.cc",
|
|
"virtual_memory_win.cc",
|
|
]
|
|
deps = invoker.deps
|
|
}
|
|
}
|
|
|
|
build_elf_loader("elf_loader") {
|
|
deps = [ ":libdart_builtin" ]
|
|
}
|
|
|
|
build_elf_loader("elf_loader_product") {
|
|
deps = [ ":libdart_builtin_product" ]
|
|
}
|
|
|
|
template("build_gen_snapshot") {
|
|
extra_configs = []
|
|
if (defined(invoker.extra_configs)) {
|
|
extra_configs += invoker.extra_configs
|
|
}
|
|
extra_deps = []
|
|
if (defined(invoker.extra_deps)) {
|
|
extra_deps += invoker.extra_deps
|
|
}
|
|
executable(target_name) {
|
|
configs += [
|
|
"..:dart_config",
|
|
"..:dart_precompiler_config",
|
|
] + extra_configs
|
|
deps = extra_deps
|
|
|
|
defines = [ "EXCLUDE_CFE_AND_KERNEL_PLATFORM" ]
|
|
|
|
sources = [
|
|
"address_sanitizer.cc",
|
|
"builtin.cc",
|
|
"builtin.h",
|
|
"error_exit.cc",
|
|
"error_exit.h",
|
|
"gzip.cc",
|
|
"gzip.h",
|
|
"loader.cc",
|
|
"loader.h",
|
|
"snapshot_utils.cc",
|
|
"snapshot_utils.h",
|
|
|
|
# Very limited native resolver provided.
|
|
"builtin_gen_snapshot.cc",
|
|
"dfe.cc",
|
|
"dfe.h",
|
|
"gen_snapshot.cc",
|
|
"options.cc",
|
|
"options.h",
|
|
"vmservice_impl.cc",
|
|
"vmservice_impl.h",
|
|
]
|
|
|
|
include_dirs = [
|
|
"..",
|
|
"//third_party",
|
|
]
|
|
|
|
if (dart_use_tcmalloc) {
|
|
deps += [ "//third_party/tcmalloc" ]
|
|
}
|
|
|
|
if (is_mac) {
|
|
frameworks = [
|
|
"CoreFoundation.framework",
|
|
"CoreServices.framework",
|
|
"Foundation.framework",
|
|
]
|
|
}
|
|
|
|
if (!is_win) {
|
|
# Adds all symbols to the dynamic symbol table, not just used ones.
|
|
# This is needed to make native extensions work. It is also needed to get
|
|
# symbols in VM-generated backtraces and profiles.
|
|
ldflags = [ "-rdynamic" ]
|
|
}
|
|
|
|
if (is_win) {
|
|
libs = [
|
|
"iphlpapi.lib",
|
|
"ws2_32.lib",
|
|
"Rpcrt4.lib",
|
|
"shlwapi.lib",
|
|
"winmm.lib",
|
|
]
|
|
if (target_os != "winuwp") {
|
|
libs += [ "psapi.lib" ]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
build_gen_snapshot("gen_snapshot") {
|
|
extra_configs = [
|
|
"..:dart_maybe_product_config",
|
|
"..:dart_arch_config",
|
|
"..:dart_os_config",
|
|
]
|
|
extra_deps = [
|
|
":gen_snapshot_dart_io",
|
|
":libdart_builtin",
|
|
"..:libdart_precompiler",
|
|
"../platform:libdart_platform_precompiler",
|
|
]
|
|
}
|
|
|
|
build_gen_snapshot("gen_snapshot_product") {
|
|
extra_configs = [
|
|
"..:dart_product_config",
|
|
"..:dart_arch_config",
|
|
"..:dart_os_config",
|
|
]
|
|
extra_deps = [
|
|
":gen_snapshot_dart_io_product",
|
|
":libdart_builtin_product",
|
|
"..:libdart_precompiler_product",
|
|
"../platform:libdart_platform_precompiler_product",
|
|
]
|
|
}
|
|
|
|
build_gen_snapshot("gen_snapshot_fuchsia") {
|
|
extra_configs = [
|
|
"..:dart_maybe_product_config",
|
|
"..:dart_arch_config",
|
|
"..:dart_os_fuchsia_config",
|
|
]
|
|
extra_deps = [
|
|
":gen_snapshot_dart_io_fuchsia",
|
|
":libdart_builtin_fuchsia",
|
|
"..:libdart_precompiler_fuchsia",
|
|
"../platform:libdart_platform_precompiler_fuchsia",
|
|
]
|
|
}
|
|
|
|
build_gen_snapshot("gen_snapshot_product_fuchsia") {
|
|
extra_configs = [
|
|
"..:dart_product_config",
|
|
"..:dart_arch_config",
|
|
"..:dart_os_fuchsia_config",
|
|
]
|
|
extra_deps = [
|
|
":gen_snapshot_dart_io_product_fuchsia",
|
|
":libdart_builtin_product_fuchsia",
|
|
"..:libdart_precompiler_product_fuchsia",
|
|
"../platform:libdart_platform_precompiler_product_fuchsia",
|
|
]
|
|
}
|
|
|
|
build_gen_snapshot("gen_snapshot_host_targeting_host") {
|
|
extra_configs = [ "..:dart_maybe_product_config" ]
|
|
extra_deps = [
|
|
":gen_snapshot_dart_io_host_targeting_host",
|
|
":libdart_builtin_host_targeting_host",
|
|
"..:libdart_precompiler_host_targeting_host",
|
|
"../platform:libdart_platform_precompiler_host_targeting_host",
|
|
]
|
|
}
|
|
|
|
build_gen_snapshot("gen_snapshot_product_host_targeting_host") {
|
|
extra_configs = [ "..:dart_product_config" ]
|
|
extra_deps = [
|
|
":gen_snapshot_dart_io_host_targeting_host",
|
|
":libdart_builtin_host_targeting_host",
|
|
"..:libdart_precompiler_host_targeting_host",
|
|
"../platform:libdart_platform_precompiler_host_targeting_host",
|
|
]
|
|
}
|
|
|
|
# A source set for the implementation of 'dart:io' library
|
|
# (without secure sockets) suitable for linking with gen_snapshot.
|
|
template("build_gen_snapshot_dart_io") {
|
|
extra_configs = []
|
|
if (defined(invoker.extra_configs)) {
|
|
extra_configs += invoker.extra_configs
|
|
}
|
|
source_set(target_name) {
|
|
configs += [
|
|
"..:dart_config",
|
|
"..:dart_precompiler_config",
|
|
] + extra_configs
|
|
|
|
if (is_fuchsia) {
|
|
if (using_fuchsia_gn_sdk) {
|
|
public_deps = [ "$fuchsia_sdk_root/pkg/fdio" ]
|
|
} else if (using_fuchsia_sdk) {
|
|
public_deps = [ "$fuchsia_sdk_root/pkg:fdio" ]
|
|
} else {
|
|
public_deps = [ "//sdk/lib/fdio" ]
|
|
}
|
|
}
|
|
|
|
deps = [ "//third_party/zlib" ]
|
|
|
|
defines = [ "DART_IO_SECURE_SOCKET_DISABLED" ]
|
|
|
|
sources = io_impl_sources + cli_impl_sources
|
|
sources += [
|
|
"io_natives.cc",
|
|
"io_natives.h",
|
|
]
|
|
if (is_ios || is_mac) {
|
|
sources += [
|
|
"platform_macos_cocoa.h",
|
|
"platform_macos_cocoa.mm",
|
|
]
|
|
}
|
|
|
|
include_dirs = [
|
|
"..",
|
|
"//third_party",
|
|
]
|
|
}
|
|
}
|
|
|
|
build_gen_snapshot_dart_io("gen_snapshot_dart_io") {
|
|
extra_configs = [
|
|
"..:dart_maybe_product_config",
|
|
"..:dart_arch_config",
|
|
"..:dart_os_config",
|
|
]
|
|
}
|
|
|
|
build_gen_snapshot_dart_io("gen_snapshot_dart_io_product") {
|
|
extra_configs = [
|
|
"..:dart_product_config",
|
|
"..:dart_arch_config",
|
|
"..:dart_os_config",
|
|
]
|
|
}
|
|
|
|
build_gen_snapshot_dart_io("gen_snapshot_dart_io_host_targeting_host") {
|
|
extra_configs = [ "..:dart_maybe_product_config" ]
|
|
}
|
|
|
|
build_gen_snapshot_dart_io("gen_snapshot_dart_io_product_host_targeting_host") {
|
|
extra_configs = [ "..:dart_product_config" ]
|
|
}
|
|
|
|
build_gen_snapshot_dart_io("gen_snapshot_dart_io_fuchsia") {
|
|
extra_configs = [
|
|
"..:dart_maybe_product_config",
|
|
"..:dart_arch_config",
|
|
"..:dart_os_fuchsia_config",
|
|
]
|
|
}
|
|
|
|
build_gen_snapshot_dart_io("gen_snapshot_dart_io_product_fuchsia") {
|
|
extra_configs = [
|
|
"..:dart_product_config",
|
|
"..:dart_arch_config",
|
|
"..:dart_os_fuchsia_config",
|
|
]
|
|
}
|
|
|
|
# A source set for the implementation of 'dart:io' library.
|
|
template("dart_io") {
|
|
extra_configs = []
|
|
if (defined(invoker.extra_configs)) {
|
|
extra_configs += invoker.extra_configs
|
|
}
|
|
extra_sources = []
|
|
if (defined(invoker.extra_sources)) {
|
|
extra_sources += invoker.extra_sources
|
|
}
|
|
extra_deps = []
|
|
if (defined(invoker.extra_deps)) {
|
|
extra_deps += invoker.extra_deps
|
|
}
|
|
source_set(target_name) {
|
|
configs += [
|
|
"..:dart_arch_config",
|
|
"..:dart_config",
|
|
"..:dart_os_config",
|
|
] + extra_configs
|
|
public_configs = [ "..:dart_public_config" ]
|
|
|
|
defines = []
|
|
deps = [ "//third_party/zlib" ] + extra_deps
|
|
if (is_mac || is_ios) {
|
|
frameworks = [
|
|
"CoreFoundation.framework",
|
|
"Security.framework",
|
|
"Foundation.framework",
|
|
]
|
|
|
|
if (is_mac) {
|
|
frameworks += [ "CoreServices.framework" ]
|
|
}
|
|
}
|
|
|
|
deps += [ "//third_party/boringssl" ]
|
|
|
|
if (is_fuchsia) {
|
|
if (using_fuchsia_gn_sdk) {
|
|
public_deps = [ "$fuchsia_sdk_root/pkg/fdio" ]
|
|
} else if (using_fuchsia_sdk) {
|
|
public_deps = [ "$fuchsia_sdk_root/pkg:fdio" ]
|
|
} else {
|
|
public_deps = [ "//sdk/lib/fdio" ]
|
|
}
|
|
}
|
|
|
|
sources = io_impl_sources + cli_impl_sources
|
|
sources += [
|
|
"builtin_natives.cc",
|
|
"io_natives.cc",
|
|
"io_natives.h",
|
|
] + extra_sources
|
|
if (is_ios || is_mac) {
|
|
sources += [
|
|
"platform_macos_cocoa.h",
|
|
"platform_macos_cocoa.mm",
|
|
]
|
|
}
|
|
|
|
if (is_linux || is_win || is_fuchsia) {
|
|
if (dart_use_fallback_root_certificates) {
|
|
sources += [ "//third_party/root_certificates/root_certificates.cc" ]
|
|
} else {
|
|
defines += [ "DART_IO_ROOT_CERTS_DISABLED" ]
|
|
}
|
|
}
|
|
|
|
include_dirs = [
|
|
"..",
|
|
"//third_party",
|
|
]
|
|
}
|
|
}
|
|
|
|
dart_io("dart_io_api") {
|
|
extra_configs = [ "..:dart_maybe_product_config" ]
|
|
extra_sources = [
|
|
"../include/bin/dart_io_api.h",
|
|
"builtin.cc",
|
|
"dart_io_api_impl.cc",
|
|
]
|
|
extra_deps = [ ":libdart_builtin" ]
|
|
}
|
|
|
|
dart_io("dart_io_api_product") {
|
|
extra_configs = [ "..:dart_product_config" ]
|
|
extra_sources = [
|
|
"../include/bin/dart_io_api.h",
|
|
"builtin.cc",
|
|
"dart_io_api_impl.cc",
|
|
]
|
|
extra_deps = [ ":libdart_builtin_product" ]
|
|
}
|
|
|
|
dart_io("standalone_dart_io") {
|
|
extra_configs = [ "..:dart_maybe_product_config" ]
|
|
extra_sources = []
|
|
extra_deps = [ ":libdart_builtin" ]
|
|
}
|
|
|
|
dart_io("standalone_dart_io_product") {
|
|
extra_configs = [ "..:dart_product_config" ]
|
|
extra_sources = []
|
|
extra_deps = [ ":libdart_builtin_product" ]
|
|
}
|
|
|
|
gen_snapshot_action("generate_snapshot_bin") {
|
|
deps = [ "../vm:vm_platform_stripped" ]
|
|
vm_snapshot_data = "$target_gen_dir/vm_snapshot_data.bin"
|
|
vm_snapshot_instructions = "$target_gen_dir/vm_snapshot_instructions.bin"
|
|
isolate_snapshot_data = "$target_gen_dir/isolate_snapshot_data.bin"
|
|
isolate_snapshot_instructions =
|
|
"$target_gen_dir/isolate_snapshot_instructions.bin"
|
|
|
|
platform_dill = "$root_out_dir/vm_platform_strong_stripped.dill"
|
|
inputs = [ platform_dill ]
|
|
outputs = [
|
|
vm_snapshot_data,
|
|
vm_snapshot_instructions,
|
|
isolate_snapshot_data,
|
|
isolate_snapshot_instructions,
|
|
]
|
|
args = [
|
|
"--sound-null-safety",
|
|
"--deterministic",
|
|
"--snapshot_kind=" + dart_core_snapshot_kind,
|
|
"--vm_snapshot_data=" + rebase_path(vm_snapshot_data, root_build_dir),
|
|
"--vm_snapshot_instructions=" +
|
|
rebase_path(vm_snapshot_instructions, root_build_dir),
|
|
"--isolate_snapshot_data=" +
|
|
rebase_path(isolate_snapshot_data, root_build_dir),
|
|
"--isolate_snapshot_instructions=" +
|
|
rebase_path(isolate_snapshot_instructions, root_build_dir),
|
|
rebase_path(platform_dill),
|
|
]
|
|
}
|
|
|
|
# Generates an assembly file defining a given symbol with the bytes from a
|
|
# binary file. Places the symbol in a text section if 'executable' is true,
|
|
# otherwise places the symbol in a read-only data section.
|
|
template("bin_to_assembly") {
|
|
assert(defined(invoker.deps), "Must define deps")
|
|
assert(defined(invoker.input), "Must define input binary file")
|
|
assert(defined(invoker.symbol), "Must define symbol name")
|
|
assert(defined(invoker.executable), "Must define boolean executable")
|
|
|
|
action(target_name) {
|
|
deps = invoker.deps
|
|
script = "../tools/bin_to_assembly.py"
|
|
output = invoker.input + ".S"
|
|
args = [
|
|
"--input",
|
|
rebase_path(invoker.input, root_build_dir),
|
|
"--output",
|
|
rebase_path(output),
|
|
"--symbol_name",
|
|
invoker.symbol,
|
|
"--target_os",
|
|
current_os,
|
|
]
|
|
if (defined(invoker.size_symbol)) {
|
|
args += [
|
|
"--size_symbol_name",
|
|
invoker.size_symbol,
|
|
"--target_arch",
|
|
current_cpu,
|
|
]
|
|
}
|
|
if (invoker.executable) {
|
|
args += [ "--executable" ]
|
|
}
|
|
if (current_os != "win") {
|
|
args += [ "--incbin" ]
|
|
}
|
|
inputs = [ invoker.input ]
|
|
outputs = [ output ]
|
|
}
|
|
}
|
|
|
|
# Generates an object file defining a given symbol with the bytes from a
|
|
# binary file. Places the symbol in the read-only data section.
|
|
template("bin_to_coff") {
|
|
assert(defined(invoker.deps), "Must define deps")
|
|
assert(defined(invoker.input), "Must define input binary file")
|
|
assert(defined(invoker.symbol), "Must define symbol name")
|
|
assert(defined(invoker.executable), "Must define executable")
|
|
|
|
action(target_name) {
|
|
deps = invoker.deps
|
|
script = "../tools/bin_to_coff.py"
|
|
output = invoker.input + ".o"
|
|
args = [
|
|
"--input",
|
|
rebase_path(invoker.input),
|
|
"--output",
|
|
rebase_path(output),
|
|
"--symbol_name",
|
|
invoker.symbol,
|
|
]
|
|
|
|
if (defined(invoker.size_symbol)) {
|
|
args += [
|
|
"--size_symbol_name",
|
|
invoker.size_symbol,
|
|
]
|
|
}
|
|
|
|
if (invoker.executable) {
|
|
args += [ "--executable" ]
|
|
}
|
|
|
|
args += [ "--arch=$current_cpu" ]
|
|
inputs = [ invoker.input ]
|
|
outputs = [ output ]
|
|
}
|
|
}
|
|
|
|
template("bin_to_linkable") {
|
|
assert(defined(invoker.deps), "Must define deps")
|
|
assert(defined(invoker.input), "Must define input binary file")
|
|
assert(defined(invoker.symbol), "Must define symbol name")
|
|
target_type = "bin_to_assembly"
|
|
if (is_win) {
|
|
target_type = "bin_to_coff"
|
|
}
|
|
|
|
target(target_type, target_name) {
|
|
forward_variables_from(invoker, "*")
|
|
}
|
|
}
|
|
|
|
bin_to_linkable("vm_snapshot_data_linkable") {
|
|
deps = [ ":generate_snapshot_bin" ]
|
|
input = "$target_gen_dir/vm_snapshot_data.bin"
|
|
symbol = "kDartVmSnapshotData"
|
|
executable = false
|
|
}
|
|
|
|
bin_to_linkable("vm_snapshot_instructions_linkable") {
|
|
deps = [ ":generate_snapshot_bin" ]
|
|
input = "$target_gen_dir/vm_snapshot_instructions.bin"
|
|
symbol = "kDartVmSnapshotInstructions"
|
|
executable = true
|
|
}
|
|
|
|
bin_to_linkable("isolate_snapshot_data_linkable") {
|
|
deps = [ ":generate_snapshot_bin" ]
|
|
input = "$target_gen_dir/isolate_snapshot_data.bin"
|
|
symbol = "kDartCoreIsolateSnapshotData"
|
|
executable = false
|
|
}
|
|
|
|
bin_to_linkable("isolate_snapshot_instructions_linkable") {
|
|
deps = [ ":generate_snapshot_bin" ]
|
|
input = "$target_gen_dir/isolate_snapshot_instructions.bin"
|
|
symbol = "kDartCoreIsolateSnapshotInstructions"
|
|
executable = true
|
|
}
|
|
|
|
bin_to_linkable("kernel_service_dill_linkable") {
|
|
deps = [ "../../utils/kernel-service:kernel_service_dill" ]
|
|
input = "$root_gen_dir/kernel_service.dill"
|
|
symbol = "kKernelServiceDill"
|
|
size_symbol = "kKernelServiceDillSize"
|
|
executable = false
|
|
}
|
|
|
|
bin_to_linkable("platform_strong_dill_linkable") {
|
|
deps = [ "../vm:vm_platform" ]
|
|
input = "$root_out_dir/vm_platform_strong.dill"
|
|
symbol = "kPlatformStrongDill"
|
|
size_symbol = "kPlatformStrongDillSize"
|
|
executable = false
|
|
}
|
|
|
|
source_set("dart_snapshot_cc") {
|
|
visibility = [ ":*" ]
|
|
deps = [
|
|
":isolate_snapshot_data_linkable",
|
|
":isolate_snapshot_instructions_linkable",
|
|
":vm_snapshot_data_linkable",
|
|
":vm_snapshot_instructions_linkable",
|
|
]
|
|
sources = get_target_outputs(":isolate_snapshot_data_linkable") +
|
|
get_target_outputs(":isolate_snapshot_instructions_linkable") +
|
|
get_target_outputs(":vm_snapshot_data_linkable") +
|
|
get_target_outputs(":vm_snapshot_instructions_linkable")
|
|
}
|
|
|
|
source_set("dart_kernel_platform_cc") {
|
|
visibility = [ ":*" ]
|
|
deps = [
|
|
":kernel_service_dill_linkable",
|
|
":platform_strong_dill_linkable",
|
|
]
|
|
sources = get_target_outputs(":kernel_service_dill_linkable") +
|
|
get_target_outputs(":platform_strong_dill_linkable")
|
|
}
|
|
|
|
template("dart_executable") {
|
|
use_product_mode = dart_runtime_mode == "release"
|
|
if (defined(invoker.use_product_mode)) {
|
|
use_product_mode = invoker.use_product_mode
|
|
}
|
|
|
|
extra_configs = []
|
|
if (defined(invoker.extra_configs)) {
|
|
extra_configs += invoker.extra_configs
|
|
}
|
|
extra_deps = []
|
|
if (defined(invoker.extra_deps)) {
|
|
extra_deps += invoker.extra_deps
|
|
}
|
|
extra_defines = []
|
|
if (defined(invoker.extra_defines)) {
|
|
extra_defines = invoker.extra_defines
|
|
}
|
|
extra_sources = []
|
|
if (defined(invoker.extra_sources)) {
|
|
extra_sources += invoker.extra_sources
|
|
}
|
|
extra_ldflags = []
|
|
if (defined(invoker.extra_ldflags)) {
|
|
extra_ldflags = invoker.extra_ldflags
|
|
}
|
|
target_type = "executable"
|
|
if (defined(invoker.target_type)) {
|
|
target_type = invoker.target_type
|
|
}
|
|
target(target_type, target_name) {
|
|
configs += [
|
|
"..:dart_arch_config",
|
|
"..:dart_config",
|
|
"..:dart_os_config",
|
|
] + extra_configs
|
|
if (use_product_mode) {
|
|
configs += [ "..:dart_product_config" ]
|
|
} else {
|
|
configs += [ "..:dart_maybe_product_config" ]
|
|
}
|
|
|
|
deps = [
|
|
":crashpad",
|
|
"//third_party/boringssl",
|
|
"//third_party/zlib",
|
|
]
|
|
if (use_product_mode) {
|
|
deps += [ ":standalone_dart_io_product" ]
|
|
} else {
|
|
deps += [ ":standalone_dart_io" ]
|
|
}
|
|
deps += extra_deps
|
|
|
|
defines = extra_defines
|
|
if (exclude_kernel_service) {
|
|
defines += [ "EXCLUDE_CFE_AND_KERNEL_PLATFORM" ]
|
|
}
|
|
|
|
if (dart_use_tcmalloc) {
|
|
deps += [ "//third_party/tcmalloc" ]
|
|
}
|
|
|
|
include_dirs = [
|
|
"..",
|
|
"//third_party",
|
|
]
|
|
|
|
sources = [
|
|
"dart_embedder_api_impl.cc",
|
|
"error_exit.cc",
|
|
"error_exit.h",
|
|
"main_options.cc",
|
|
"main_options.h",
|
|
"options.cc",
|
|
"options.h",
|
|
"snapshot_utils.cc",
|
|
"snapshot_utils.h",
|
|
"vmservice_impl.cc",
|
|
"vmservice_impl.h",
|
|
] + extra_sources
|
|
|
|
if (is_win) {
|
|
ldflags = [ "/EXPORT:Dart_True" ]
|
|
} else {
|
|
# Adds all symbols to the dynamic symbol table, not just used ones.
|
|
# This is needed to make native extensions work. It is also needed to get
|
|
# symbols in VM-generated backtraces and profiles.
|
|
ldflags = [ "-rdynamic" ]
|
|
}
|
|
|
|
ldflags += extra_ldflags
|
|
|
|
if (is_win) {
|
|
libs = [
|
|
# ole32.dll contains CoTaskMemAlloc. Here so that package:ffi can look
|
|
# CoTaskMemAlloc up with `DynamicLibrary.process()`.
|
|
"ole32.lib",
|
|
"iphlpapi.lib",
|
|
"psapi.lib",
|
|
"ws2_32.lib",
|
|
"Rpcrt4.lib",
|
|
"shlwapi.lib",
|
|
"winmm.lib",
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
dart_executable("dart") {
|
|
extra_deps = [
|
|
":dart_snapshot_cc",
|
|
"..:libdart_jit",
|
|
"../platform:libdart_platform_jit",
|
|
]
|
|
if (dart_runtime_mode != "release") {
|
|
extra_deps += [ "../observatory:standalone_observatory_archive" ]
|
|
}
|
|
extra_sources = [
|
|
"builtin.cc",
|
|
"dartdev_isolate.cc",
|
|
"dartdev_isolate.h",
|
|
"dfe.cc",
|
|
"dfe.h",
|
|
"gzip.cc",
|
|
"gzip.h",
|
|
"loader.cc",
|
|
"loader.h",
|
|
"main.cc",
|
|
]
|
|
if (dart_runtime_mode == "release") {
|
|
extra_sources += [ "observatory_assets_empty.cc" ]
|
|
}
|
|
if (!exclude_kernel_service) {
|
|
extra_deps += [ ":dart_kernel_platform_cc" ]
|
|
}
|
|
}
|
|
|
|
dart_executable("dart_precompiled_runtime") {
|
|
extra_configs = [
|
|
"..:dart_precompiled_runtime_config",
|
|
"..:add_empty_macho_section_config",
|
|
]
|
|
extra_deps = [
|
|
"..:libdart_precompiled_runtime",
|
|
"../platform:libdart_platform_precompiled_runtime",
|
|
]
|
|
if (dart_runtime_mode != "release") {
|
|
extra_deps += [ "../observatory:standalone_observatory_archive" ]
|
|
}
|
|
extra_sources = [
|
|
"builtin.cc",
|
|
"gzip.cc",
|
|
"gzip.h",
|
|
"loader.cc",
|
|
"loader.h",
|
|
"main.cc",
|
|
"snapshot_empty.cc",
|
|
]
|
|
|
|
if (dart_runtime_mode == "release") {
|
|
extra_deps += [ ":elf_loader_product" ]
|
|
} else {
|
|
extra_deps += [ ":elf_loader" ]
|
|
}
|
|
|
|
if (dart_runtime_mode == "release") {
|
|
extra_sources += [ "observatory_assets_empty.cc" ]
|
|
}
|
|
}
|
|
|
|
dart_executable("dart_precompiled_runtime_product") {
|
|
use_product_mode = true
|
|
extra_configs = [
|
|
"..:dart_precompiled_runtime_config",
|
|
"..:add_empty_macho_section_config",
|
|
]
|
|
extra_deps = [
|
|
"..:libdart_precompiled_runtime_product",
|
|
"../platform:libdart_platform_precompiled_runtime_product",
|
|
]
|
|
extra_sources = [
|
|
"builtin.cc",
|
|
"gzip.cc",
|
|
"gzip.h",
|
|
"loader.cc",
|
|
"loader.h",
|
|
"main.cc",
|
|
"observatory_assets_empty.cc",
|
|
"snapshot_empty.cc",
|
|
]
|
|
|
|
extra_deps += [ ":elf_loader_product" ]
|
|
}
|
|
|
|
dart_executable("analyze_snapshot") {
|
|
extra_configs = [ "..:dart_precompiled_runtime_config" ]
|
|
extra_deps = [
|
|
"..:libdart_precompiled_runtime",
|
|
"../platform:libdart_platform_precompiled_runtime",
|
|
]
|
|
|
|
extra_sources = [
|
|
"analyze_snapshot.cc",
|
|
"builtin.cc",
|
|
"loader.cc",
|
|
"loader.h",
|
|
]
|
|
|
|
if (dart_runtime_mode == "release") {
|
|
extra_deps += [ ":elf_loader_product" ]
|
|
} else {
|
|
extra_deps += [ ":elf_loader" ]
|
|
}
|
|
}
|
|
|
|
dart_executable("analyze_snapshot_product") {
|
|
use_product_mode = true
|
|
extra_configs = [ "..:dart_precompiled_runtime_config" ]
|
|
extra_deps = [
|
|
"..:libdart_precompiled_runtime_product",
|
|
"../platform:libdart_platform_precompiled_runtime_product",
|
|
]
|
|
|
|
extra_sources = [
|
|
"analyze_snapshot.cc",
|
|
"builtin.cc",
|
|
"loader.cc",
|
|
"loader.h",
|
|
]
|
|
|
|
extra_deps += [ ":elf_loader_product" ]
|
|
}
|
|
|
|
executable("process_test") {
|
|
sources = [ "process_test.cc" ]
|
|
}
|
|
|
|
executable("abstract_socket_test") {
|
|
sources = [ "abstract_socket_test.cc" ]
|
|
include_dirs = [ ".." ]
|
|
}
|
|
|
|
executable("run_vm_tests") {
|
|
if (target_os == "fuchsia") {
|
|
testonly = true
|
|
}
|
|
|
|
configs += [
|
|
"..:dart_arch_config",
|
|
"..:dart_config",
|
|
"..:dart_os_config",
|
|
"..:dart_maybe_product_config",
|
|
]
|
|
|
|
if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
|
|
configs += [ "..:dart_precompiler_config" ]
|
|
}
|
|
|
|
deps = [
|
|
":crashpad",
|
|
":dart_kernel_platform_cc",
|
|
":dart_snapshot_cc",
|
|
":standalone_dart_io",
|
|
"..:libdart_precompiler_testing",
|
|
"//third_party/boringssl", # for secure_socket_utils_test
|
|
"//third_party/zlib",
|
|
]
|
|
include_dirs = [
|
|
"..",
|
|
"$target_gen_dir",
|
|
"//third_party",
|
|
]
|
|
defines = [ "TESTING" ]
|
|
|
|
if (dart_use_tcmalloc) {
|
|
deps += [ "//third_party/tcmalloc" ]
|
|
defines += [ "DART_USE_TCMALLOC" ]
|
|
}
|
|
|
|
if (is_fuchsia) {
|
|
if (using_fuchsia_gn_sdk) {
|
|
include_dirs += [ "$fuchsia_sdk_path/pkg/trace-engine/include" ]
|
|
libs = [ "zircon" ]
|
|
}
|
|
if (!using_fuchsia_gn_sdk && !using_fuchsia_sdk) {
|
|
deps += [ "//zircon/system/ulib/trace" ]
|
|
}
|
|
}
|
|
|
|
# The VM sources are already included in libdart, so we just want to add in
|
|
# the tests here.
|
|
vm_tests = rebase_path(vm_sources_tests, ".", "../vm")
|
|
compiler_tests = rebase_path(compiler_sources_tests, ".", "../vm/compiler")
|
|
heap_tests = rebase_path(heap_sources_tests, ".", "../vm/heap")
|
|
|
|
sources = [
|
|
"builtin.cc",
|
|
"dfe.cc",
|
|
"dfe.h",
|
|
"error_exit.cc",
|
|
"error_exit.h",
|
|
"gzip.cc",
|
|
"gzip.h",
|
|
"loader.cc",
|
|
"loader.h",
|
|
"run_vm_tests.cc",
|
|
"snapshot_utils.cc",
|
|
"snapshot_utils.h",
|
|
"vmservice_impl.cc",
|
|
"vmservice_impl.h",
|
|
] + builtin_impl_tests + vm_tests + compiler_tests + heap_tests +
|
|
io_impl_tests
|
|
|
|
if (!is_win) {
|
|
# Adds all symbols to the dynamic symbol table, not just used ones.
|
|
# This is needed to make native extensions work. It is also needed to get
|
|
# symbols in VM-generated backtraces and profiles.
|
|
ldflags = [ "-rdynamic" ]
|
|
}
|
|
|
|
if (is_win) {
|
|
libs = [
|
|
# ole32.dll contains CoTaskMemAlloc. Here so that package:ffi can look
|
|
# CoTaskMemAlloc up with `DynamicLibrary.process()`.
|
|
"ole32.lib",
|
|
"iphlpapi.lib",
|
|
"psapi.lib",
|
|
"ws2_32.lib",
|
|
"Rpcrt4.lib",
|
|
"shlwapi.lib",
|
|
"winmm.lib",
|
|
]
|
|
}
|
|
}
|
|
|
|
shared_library("entrypoints_verification_test") {
|
|
deps = [ ":dart" ]
|
|
sources = [ "entrypoints_verification_test.cc" ]
|
|
include_dirs = [ ".." ]
|
|
defines = [
|
|
# The only effect of DART_SHARED_LIB is to export the Dart API.
|
|
"DART_SHARED_LIB",
|
|
]
|
|
if (is_linux || is_android) {
|
|
cflags = [ "-fPIC" ]
|
|
}
|
|
if (is_win) {
|
|
# TODO(dartbug.com/40579): This wrongly links in dart.exe on precompiled.
|
|
libs = [ "dart.lib" ]
|
|
abs_root_out_dir = rebase_path(root_out_dir)
|
|
ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
|
|
}
|
|
}
|
|
|
|
shared_library("ffi_test_dynamic_library") {
|
|
deps = [ ":dart" ]
|
|
sources = [ "ffi_test/ffi_test_dynamic_library.cc" ]
|
|
include_dirs = [ ".." ]
|
|
defines = [
|
|
# The only effect of DART_SHARED_LIB is to export the Dart API.
|
|
"DART_SHARED_LIB",
|
|
]
|
|
if (is_linux || is_android) {
|
|
cflags = [ "-fPIC" ]
|
|
}
|
|
if (is_win) {
|
|
# TODO(dartbug.com/40579): This wrongly links in dart.exe on precompiled.
|
|
libs = [ "dart.lib" ]
|
|
abs_root_out_dir = rebase_path(root_out_dir)
|
|
ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
|
|
}
|
|
}
|
|
|
|
shared_library("ffi_test_functions") {
|
|
deps = [ ":dart" ]
|
|
|
|
sources = [
|
|
# This file must be compiled in for dynamic linking.
|
|
"../include/dart_api_dl.c",
|
|
|
|
# The three files here do not depend on each other.
|
|
# flutter/flutter integration tests will only use
|
|
# `ffi_test_functions{,_generated}.cc` - any test functionality using
|
|
# `dart_api.h` has to go into `ffi_test_functions_vmspecific.cc`.
|
|
"ffi_test/ffi_test_functions.cc",
|
|
"ffi_test/ffi_test_functions_generated.cc",
|
|
"ffi_test/ffi_test_functions_vmspecific.cc",
|
|
]
|
|
if (is_win && current_cpu == "x64") {
|
|
sources += [ "ffi_test/clobber_x64_win.S" ]
|
|
} else if (!is_win) {
|
|
sources += [ "ffi_test/clobber_$current_cpu.S" ]
|
|
}
|
|
include_dirs = [ ".." ]
|
|
defines = [
|
|
# The only effect of DART_SHARED_LIB is to export the Dart API.
|
|
"DART_SHARED_LIB",
|
|
]
|
|
if (is_linux || is_android) {
|
|
cflags = [ "-fPIC" ]
|
|
}
|
|
if (is_win) {
|
|
# TODO(dartbug.com/40579): This wrongly links in dart.exe on precompiled.
|
|
libs = [ "dart.lib" ]
|
|
abs_root_out_dir = rebase_path(root_out_dir)
|
|
ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
|
|
}
|
|
}
|
|
|
|
# DartLibFuzzer only "exists" for restricted configurations.
|
|
if (defined(is_linux) && is_linux && defined(is_asan) && is_asan &&
|
|
(dart_target_arch == "x64" || dart_target_arch == "arm64")) {
|
|
dart_executable("dart_libfuzzer") {
|
|
extra_ldflags = [ "-fsanitize=address,fuzzer" ]
|
|
extra_deps = [ "..:libdart_libfuzzer" ]
|
|
extra_sources = [
|
|
"../vm/libfuzzer/dart_libfuzzer.cc",
|
|
"builtin.cc",
|
|
"dfe.cc",
|
|
"dfe.h",
|
|
]
|
|
if (!exclude_kernel_service) {
|
|
extra_deps += [ ":dart_kernel_platform_cc" ]
|
|
}
|
|
}
|
|
}
|