dart-sdk/runtime/bin/BUILD.gn
Daco Harkes f524ec74ce [vm/ffi] FfiNative process lookup
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>
2022-10-25 10:57:07 +00:00

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" ]
}
}
}