blob: c3140f0d76a31fff5b21c9b7677f6a0442628b11 [file] [log] [blame]
# 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("gypi_contents.gni")
import("../runtime_args.gni")
# Generate a resources.cc file for the service isolate without Observatory.
action("gen_resources_cc") {
visibility = [ ":*" ] # Only targets in this file can see this.
script = "../tools/create_resources.py"
inputs = [
"../tools/create_resources.py",
]
# The path below is hard coded for the Mojo and Flutter trees. When moving
# the Dart runtime to gn, this path might need to be updated.
sources = rebase_path(resources_sources_gypi, "", "../bin/vmservice/")
outputs = [
"$target_gen_dir/resources_gen.cc",
]
args = [
"--output",
rebase_path("$target_gen_dir/resources_gen.cc", root_build_dir),
"--outer_namespace",
"dart",
"--inner_namespace",
"bin",
"--table_name",
"service_bin",
"--root_prefix",
rebase_path(".", root_build_dir) + "/",
] + rebase_path(sources, root_build_dir)
}
template("gen_library_src_path") {
assert(defined(invoker.sources), "Need sources in $target_name")
assert(defined(invoker.output), "Need output in $target_name")
action(target_name) {
visibility = [ ":*" ] # Only targets in this file can see this.
script = "../tools/gen_library_src_paths.py"
inputs = [
"../tools/gen_library_src_paths.py",
"builtin_in.cc",
] + invoker.sources
outputs = [
invoker.output,
]
name = invoker.name
kind = invoker.kind
library_name = "dart:${name}"
if (defined(invoker.library_name)) {
library_name = invoker.library_name
}
args = [
"--output",
rebase_path(invoker.output, root_build_dir),
"--input_cc",
rebase_path("builtin_in.cc", root_build_dir),
"--include",
"bin/builtin.h",
"--var_name",
"dart::bin::Builtin::${name}_${kind}_paths_",
"--library_name",
library_name,
] + rebase_path(invoker.sources, root_build_dir)
}
}
gen_library_src_path("generate_builtin_cc_file") {
name = "_builtin"
kind = "source"
sources = builtin_sources_gypi
output = "$target_gen_dir/builtin_gen.cc"
}
sdk_io_sources_gypi =
exec_script("../../tools/gypi_to_gn.py",
[ rebase_path("../../sdk/lib/io/io_sources.gypi") ],
"scope",
[ "../../sdk/lib/io/io_sources.gypi" ])
sdk_io_sources =
rebase_path(sdk_io_sources_gypi.sources, ".", "../../sdk/lib/io")
gen_library_src_path("generate_io_cc_file") {
name = "io"
kind = "source"
sources = [ "../../sdk/lib/io/io.dart" ] + sdk_io_sources
output = "$target_gen_dir/io_gen.cc"
}
gen_library_src_path("generate_io_patch_cc_file") {
name = "io"
kind = "patch"
sources = io_sources_gypi
output = "$target_gen_dir/io_patch_gen.cc"
}
gen_library_src_path("generate_html_cc_file") {
name = "html"
kind = "source"
sources = [
"../../sdk/lib/html/dartium/html_dartium.dart",
]
output = "$target_gen_dir/html_gen.cc"
}
gen_library_src_path("generate_html_common_cc_file") {
name = "html_common"
kind = "source"
sources = [
"../../sdk/lib/html/html_common/conversions.dart",
"../../sdk/lib/html/html_common/conversions_dartium.dart",
"../../sdk/lib/html/html_common/css_class_set.dart",
"../../sdk/lib/html/html_common/device.dart",
"../../sdk/lib/html/html_common/filtered_element_list.dart",
"../../sdk/lib/html/html_common/html_common.dart",
"../../sdk/lib/html/html_common/lists.dart",
]
output = "$target_gen_dir/html_common_gen.cc"
}
gen_library_src_path("generate_js_cc_file") {
name = "js"
kind = "source"
sources = [
"../../sdk/lib/js/dartium/js_dartium.dart",
]
output = "$target_gen_dir/js_gen.cc"
}
gen_library_src_path("generate_js_util_cc_file") {
name = "js_util"
kind = "source"
sources = [
"../../sdk/lib/js_util/dartium/js_util_dartium.dart",
]
output = "$target_gen_dir/js_util_gen.cc"
}
gen_library_src_path("generate_blink_cc_file") {
name = "_blink"
kind = "source"
sources = [
"../../sdk/lib/_blink/dartium/_blink_dartium.dart",
]
output = "$target_gen_dir/blink_gen.cc"
}
gen_library_src_path("generate_indexed_db_cc_file") {
name = "indexed_db"
kind = "source"
sources = [
"../../sdk/lib/indexed_db/dartium/indexed_db_dartium.dart",
]
output = "$target_gen_dir/indexed_db_gen.cc"
}
gen_library_src_path("generate_cached_patches_cc_file") {
name = "cached_patches"
library_name = "cached_patches.dart"
kind = "source"
sources = [
"../../sdk/lib/js/dartium/cached_patches.dart",
]
output = "$target_gen_dir/cached_patches_gen.cc"
}
gen_library_src_path("generate_web_gl_cc_file") {
name = "web_gl"
kind = "source"
sources = [
"../../sdk/lib/web_gl/dartium/web_gl_dartium.dart",
]
output = "$target_gen_dir/web_gl_gen.cc"
}
gen_library_src_path("generate_metadata_cc_file") {
name = "metadata"
library_name = "metadata.dart"
kind = "source"
sources = [
"../../sdk/lib/html/html_common/metadata.dart",
]
output = "$target_gen_dir/metadata_gen.cc"
}
gen_library_src_path("generate_web_sql_cc_file") {
name = "web_sql"
kind = "source"
sources = [
"../../sdk/lib/web_sql/dartium/web_sql_dartium.dart",
]
output = "$target_gen_dir/web_sql_gen.cc"
}
gen_library_src_path("generate_svg_cc_file") {
name = "svg"
kind = "source"
sources = [
"../../sdk/lib/svg/dartium/svg_dartium.dart",
]
output = "$target_gen_dir/svg_gen.cc"
}
gen_library_src_path("generate_web_audio_cc_file") {
name = "web_audio"
kind = "source"
sources = [
"../../sdk/lib/web_audio/dartium/web_audio_dartium.dart",
]
output = "$target_gen_dir/web_audio_gen.cc"
}
config("libdart_builtin_config") {
if (!is_win) {
libs = [ "dl" ]
}
if (is_android) {
libs += [
"android",
"log",
]
}
}
static_library("libdart_builtin") {
configs += [
"..:dart_config",
"..:dart_maybe_product_config",
]
public_configs = [ ":libdart_builtin_config" ]
deps = [
":generate_blink_cc_file",
":generate_builtin_cc_file",
":generate_cached_patches_cc_file",
":generate_html_cc_file",
":generate_html_common_cc_file",
":generate_indexed_db_cc_file",
":generate_io_cc_file",
":generate_io_patch_cc_file",
":generate_js_cc_file",
":generate_js_util_cc_file",
":generate_metadata_cc_file",
":generate_svg_cc_file",
":generate_web_audio_cc_file",
":generate_web_gl_cc_file",
":generate_web_sql_cc_file",
]
include_dirs = [ ".." ]
set_sources_assignment_filter([
"*_test.cc",
"*_test.h",
])
sources = [
"log_android.cc",
"log_fuchsia.cc",
"log_linux.cc",
"log_macos.cc",
"log_win.cc",
] + builtin_impl_sources_gypi
}
executable("gen_snapshot") {
configs += [
"..:dart_config",
"..:dart_maybe_product_config",
"..:dart_precompiler_config",
]
deps = [
":gen_resources_cc",
":gen_snapshot_dart_io",
":generate_builtin_cc_file",
":generate_io_cc_file",
":generate_io_patch_cc_file",
":libdart_builtin",
"..:libdart_nosnapshot_with_precompiler",
]
sources = [
# Include generated source files.
"$target_gen_dir/builtin_gen.cc",
"$target_gen_dir/io_gen.cc",
"$target_gen_dir/io_patch_gen.cc",
"$target_gen_dir/resources_gen.cc",
"address_sanitizer.cc",
"builtin.cc",
"builtin.h",
# Very limited native resolver provided.
"builtin_common.cc",
"builtin_gen_snapshot.cc",
"gen_snapshot.cc",
"vmservice_impl.cc",
"vmservice_impl.h",
]
include_dirs = [ ".." ]
if (is_mac) {
libs = [
"CoreFoundation.framework",
"CoreServices.framework",
]
}
if (is_win) {
libs = [
"iphlpapi.lib",
"psapi.lib",
"ws2_32.lib",
"Rpcrt4.lib",
"winmm.lib",
]
}
if (defined(is_fuchsia) && is_fuchsia) {
libs = [ "launchpad" ]
}
}
# A source set for the implementation of 'dart:io' library
# (without secure sockets) suitable for linking with gen_snapshot.
source_set("gen_snapshot_dart_io") {
configs += [
"..:dart_config",
"..:dart_maybe_product_config",
"..:dart_precompiler_config",
]
deps = [
"$dart_zlib_path",
]
custom_sources_filter = [
"*_test.cc",
"*_test.h",
"builtin.cc",
"builtin_common.cc",
"builtin_gen_snapshot.cc",
]
if (!is_mac && !is_ios) {
# Dart tree uses *_macos.* instead of *_mac.*
custom_sources_filter += [
"*_macos.h",
"*_macos.cc",
]
}
set_sources_assignment_filter(custom_sources_filter)
defines = [ "DART_IO_SECURE_SOCKET_DISABLED" ]
sources = io_impl_sources_gypi + builtin_impl_sources_gypi
sources += [
"io_natives.cc",
"io_natives.h",
]
include_dirs = [
"..",
"//third_party",
]
}
source_set("libdart_embedder_noio") {
configs += [
"..:dart_config",
"..:dart_maybe_product_config",
]
deps = [
"..:libdart",
]
}
# A source set for the implementation of 'dart:io' library.
template("dart_io") {
extra_sources = []
if (defined(invoker.extra_sources)) {
extra_sources += invoker.extra_sources
}
source_set(target_name) {
configs += [
"..:dart_config",
"..:dart_maybe_product_config",
]
custom_sources_filter = [
"*_test.cc",
"*_test.h",
"builtin.cc",
"builtin_gen_snapshot.cc",
]
if (!is_mac && !is_ios) {
# Dart tree uses *_macos.* instead of *_mac.*
custom_sources_filter += [
"*_macos.h",
"*_macos.cc",
]
}
set_sources_assignment_filter(custom_sources_filter)
defines = []
if (is_mac || is_ios) {
libs = [
"CoreFoundation.framework",
"Security.framework",
]
if (is_mac) {
libs += [ "CoreServices.framework" ]
}
} else {
deps = [
"//third_party/boringssl",
]
}
if (defined(is_fuchsia) && is_fuchsia) {
libs = [ "launchpad" ]
}
sources = io_impl_sources_gypi + builtin_impl_sources_gypi
sources += [
"builtin_natives.cc",
"io_natives.cc",
"io_natives.h",
"log_android.cc",
"log_linux.cc",
"log_macos.cc",
"log_win.cc",
"log.h",
] + extra_sources
if (is_linux || is_win || (defined(is_fuchsia) && 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("embedded_dart_io") {
extra_sources = [
"builtin_nolib.cc",
"embedded_dart_io.cc",
"embedded_dart_io.h",
]
}
dart_io("standalone_dart_io") {
extra_sources = []
}
action("generate_snapshot_bin") {
deps = [
"../bin:gen_snapshot($host_toolchain)",
]
vm_isolate_snapshot = "$target_gen_dir/vm_isolate_snapshot.bin"
isolate_snapshot = "$target_gen_dir/isolate_snapshot.bin"
gen_snapshot_stamp_file = "$target_gen_dir/gen_snapshot.stamp"
outputs = [
vm_isolate_snapshot,
isolate_snapshot,
gen_snapshot_stamp_file,
]
gen_snapshot_dir =
get_label_info("../bin:gen_snapshot($host_toolchain)", "root_out_dir")
script = rebase_path("../tools/create_snapshot_bin.py")
args = [
"--executable",
rebase_path("$gen_snapshot_dir/gen_snapshot"),
"--vm_output_bin",
rebase_path(vm_isolate_snapshot, root_build_dir),
"--output_bin",
rebase_path(isolate_snapshot, root_build_dir),
"--target_os",
current_os,
"--timestamp_file",
rebase_path(gen_snapshot_stamp_file, root_build_dir),
]
}
action("generate_snapshot_file") {
deps = [
":generate_snapshot_bin",
]
snapshot_in_cc_file = "snapshot_in.cc"
inputs = [
"../tools/create_snapshot_file.py",
snapshot_in_cc_file,
"$target_gen_dir/vm_isolate_snapshot.bin",
"$target_gen_dir/isolate_snapshot.bin",
]
output = "$root_gen_dir/dart_snapshot.cc"
outputs = [
output,
]
script = "../tools/create_snapshot_file.py"
args = [
"--vm_input_bin",
rebase_path("$target_gen_dir/vm_isolate_snapshot.bin"),
"--input_bin",
rebase_path("$target_gen_dir/isolate_snapshot.bin"),
"--input_cc",
rebase_path(snapshot_in_cc_file),
"--output",
rebase_path(output),
]
}
source_set("dart_snapshot_cc") {
sources = [
"$root_gen_dir/dart_snapshot.cc",
]
deps = [
":generate_snapshot_file",
]
}
template("dart_executable") {
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
}
executable(target_name) {
configs += [
"..:dart_config",
"..:dart_maybe_product_config",
] + extra_configs
if (defined(is_fuchsia_host) && is_fuchsia_host) {
# We already have these in the standalone build, but Fuchsia doesn't
# have them. They are needed for running Fuchsia binaries built for the
# host.
if (is_linux) {
configs += [ "../../build/config/gcc:executable_ldconfig" ]
} else if (is_mac) {
configs += [ "../../build/config/mac:mac_dynamic_flags" ]
}
}
deps = [
":gen_resources_cc",
":standalone_dart_io",
":libdart_builtin",
"$dart_zlib_path",
] + extra_deps
defines = extra_defines
if (dart_use_tcmalloc) {
deps += [ "//third_party/tcmalloc" ]
defines += [ "DART_USE_TCMALLOC" ]
}
sources = [
"main.cc",
"vmservice_impl.cc",
"vmservice_impl.h",
"$target_gen_dir/resources_gen.cc",
] + extra_sources
include_dirs = [
"..",
"//third_party",
]
if (is_win) {
ldflags = [ "/EXPORT:Dart_True" ]
} else {
ldflags = [ "-rdynamic" ]
}
if (is_win) {
libs = [
"iphlpapi.lib",
"psapi.lib",
"ws2_32.lib",
"Rpcrt4.lib",
"winmm.lib",
]
}
if (defined(is_fuchsia) && is_fuchsia) {
libs = [ "launchpad" ]
}
}
}
dart_executable("dart") {
extra_deps = [
"..:libdart",
":dart_snapshot_cc",
"../observatory:standalone_observatory_archive",
]
extra_sources = [ "builtin_nolib.cc" ]
}
dart_executable("dart_precompiled_runtime") {
extra_configs = [ "..:dart_precompiled_runtime_config" ]
extra_deps = [
"..:libdart_precompiled_runtime",
"../observatory:standalone_observatory_archive",
]
extra_sources = [
"builtin_nolib.cc",
"snapshot_empty.cc",
]
}
dart_executable("dart_bootstrap") {
extra_configs = [
"..:dart_precompiler_config",
"..:dart_no_snapshot_config",
]
extra_deps = [
":generate_builtin_cc_file",
":generate_io_cc_file",
":generate_io_patch_cc_file",
":generate_html_cc_file",
":generate_html_common_cc_file",
":generate_js_cc_file",
":generate_js_util_cc_file",
":generate_blink_cc_file",
":generate_indexed_db_cc_file",
":generate_cached_patches_cc_file",
":generate_web_gl_cc_file",
":generate_metadata_cc_file",
":generate_web_sql_cc_file",
":generate_svg_cc_file",
":generate_web_audio_cc_file",
"..:libdart_nosnapshot_with_precompiler",
]
extra_defines = [ "NO_OBSERVATORY" ]
extra_sources = [
"builtin.cc",
"builtin.h",
"observatory_assets_empty.cc",
"snapshot_empty.cc",
# Include generated source files.
"$target_gen_dir/builtin_gen.cc",
"$target_gen_dir/io_gen.cc",
"$target_gen_dir/io_patch_gen.cc",
"$target_gen_dir/html_gen.cc",
"$target_gen_dir/html_common_gen.cc",
"$target_gen_dir/js_gen.cc",
"$target_gen_dir/js_util_gen.cc",
"$target_gen_dir/blink_gen.cc",
"$target_gen_dir/indexed_db_gen.cc",
"$target_gen_dir/cached_patches_gen.cc",
"$target_gen_dir/web_gl_gen.cc",
"$target_gen_dir/metadata_gen.cc",
"$target_gen_dir/web_sql_gen.cc",
"$target_gen_dir/svg_gen.cc",
"$target_gen_dir/web_audio_gen.cc",
]
}
if (defined(is_fuchsia) && is_fuchsia) {
copy("hello_fuchsia") {
sources = [
"../tests/vm/dart/hello_fuchsia_test.dart",
]
outputs = [
"$root_out_dir/hello_fuchsia.dart",
]
}
executable("run_vm_tests_fuchsia") {
testonly = true
configs += [ "..:dart_config" ]
sources = [
"run_vm_tests_fuchsia.cc",
]
libs = [
"launchpad",
"magenta",
]
}
}
# This is only needed for the Fuchsia target build until the Observatory is
# supported.
dart_executable("dart_no_observatory") {
extra_deps = [
"..:libdart",
":dart_snapshot_cc",
]
if (defined(is_fuchsia) && is_fuchsia) {
extra_deps += [ ":hello_fuchsia" ]
}
extra_defines = [ "NO_OBSERVATORY" ]
extra_sources = [
"builtin_nolib.cc",
"observatory_assets_empty.cc",
]
}
executable("process_test") {
sources = [
"process_test.cc",
]
}
action("generate_snapshot_test_dat_file") {
snapshot_test_dat_file = "$root_gen_dir/snapshot_test.dat"
snapshot_test_in_dat_file = "../vm/snapshot_test_in.dat"
snapshot_test_dart_file = "../vm/snapshot_test.dart"
inputs = [
"../tools/create_string_literal.py",
snapshot_test_in_dat_file,
snapshot_test_dart_file,
]
outputs = [
snapshot_test_dat_file,
]
script = "../tools/create_string_literal.py"
args = [
"--output",
rebase_path(snapshot_test_dat_file),
"--input_cc",
rebase_path(snapshot_test_in_dat_file),
"--include",
"INTENTIONALLY_LEFT_BLANK",
"--var_name",
"INTENTIONALLY_LEFT_BLANK_TOO",
rebase_path(snapshot_test_dart_file),
]
}
executable("run_vm_tests") {
if (defined(is_fuchsia) && (is_fuchsia || is_fuchsia_host)) {
testonly = true
}
configs += [
"..:dart_config",
"..:dart_maybe_product_config",
]
deps = [
":dart_snapshot_cc",
":generate_snapshot_test_dat_file",
":libdart_builtin",
":standalone_dart_io",
"$dart_zlib_path",
"..:libdart",
]
include_dirs = [
"..",
"$target_gen_dir",
]
defines = [ "TESTING" ]
if (dart_use_tcmalloc) {
deps += [ "//third_party/tcmalloc" ]
defines += [ "DART_USE_TCMALLOC" ]
}
# The VM sources are already included in libdart, so we just want to add in
# the tests here.
vm_tests = rebase_path(vm_tests_list, ".", "../vm")
sources = [
"builtin_nolib.cc",
"run_vm_tests.cc",
] + builtin_impl_tests_list + vm_tests
if (!is_win) {
ldflags = [ "-rdynamic" ]
}
if (is_win) {
libs = [
"iphlpapi.lib",
"psapi.lib",
"ws2_32.lib",
"Rpcrt4.lib",
"winmm.lib",
]
}
}
shared_library("test_extension") {
deps = [
":dart",
]
sources = [
"test_extension.c",
"test_extension_dllmain_win.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) {
libs = [ "dart.lib" ]
abs_root_out_dir = rebase_path(root_out_dir)
ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
}
}
shared_library("sample_extension") {
deps = [
":dart",
]
sources = [
"../../samples/sample_extension/sample_extension.cc",
"../../samples/sample_extension/sample_extension_dllmain_win.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) {
libs = [ "dart.lib" ]
abs_root_out_dir = rebase_path(root_out_dir)
ldflags = [ "/LIBPATH:$abs_root_out_dir" ]
}
}