blob: 1f74a045cf2a1c6cbff495b8bfcdc45fb6a01eb3 [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("../../build/executable_suffix.gni")
import("../../build/prebuilt_dart_sdk.gni")
import("../../sdk/lib/async/async_sources.gni")
import("../../sdk/lib/collection/collection_sources.gni")
import("../../sdk/lib/convert/convert_sources.gni")
import("../../sdk/lib/core/core_sources.gni")
import("../../sdk/lib/developer/developer_sources.gni")
import("../../sdk/lib/internal/internal_sources.gni")
import("../../sdk/lib/isolate/isolate_sources.gni")
import("../../sdk/lib/math/math_sources.gni")
import("../../sdk/lib/mirrors/mirrors_sources.gni")
import("../../sdk/lib/profiler/profiler_sources.gni")
import("../../sdk/lib/typed_data/typed_data_sources.gni")
import("../../sdk/lib/vmservice/vmservice_sources.gni")
import("../../utils/compile_platform.gni")
import("../../utils/generate_patch_sdk.gni")
import("../bin/io_sources.gni")
import("../lib/async_sources.gni")
import("../lib/collection_sources.gni")
import("../lib/convert_sources.gni")
import("../lib/core_sources.gni")
import("../lib/developer_sources.gni")
import("../lib/internal_sources.gni")
import("../lib/isolate_sources.gni")
import("../lib/math_sources.gni")
import("../lib/mirrors_sources.gni")
import("../lib/profiler_sources.gni")
import("../lib/typed_data_sources.gni")
import("../lib/vmservice_sources.gni")
import("../runtime_args.gni")
import("compiler/compiler_sources.gni")
import("vm_sources.gni")
config("libdart_vm_config") {
if (is_fuchsia) {
libs = [
"zircon",
"trace-engine",
]
} else if (is_win) {
libs = [
"advapi32.lib",
"shell32.lib",
"dbghelp.lib",
]
} else {
libs = [ "dl" ]
if (!is_android) {
libs += [ "pthread" ]
}
if (is_linux) {
libs += [ "rt" ]
}
}
}
template("build_libdart_vm") {
extra_configs = []
if (defined(invoker.extra_configs)) {
extra_configs += invoker.extra_configs
}
source_set(target_name) {
configs += [
"..:dart_arch_config",
"..:dart_config",
"..:dart_os_config",
] + extra_configs
if (is_fuchsia) {
configs -= [ "//build/config:symbol_visibility_hidden" ]
deps = [
# TODO(zra): When the platform-specific timeline code is moved out to
# the embedder, this can go away.
"//zircon/system/ulib/fbl",
# TODO(US-399): Remove time_service specific code when it is no longer
# necessary.
"//garnet/public/lib/time_service/fidl",
"//garnet/public/lib/app/cpp",
]
}
public_configs = [ ":libdart_vm_config" ]
set_sources_assignment_filter([
"*_test.cc",
"*_test.h",
])
sources = vm_sources + rebase_path(compiler_sources, ".", "./compiler/")
include_dirs = [ ".." ]
}
}
build_libdart_vm("libdart_vm_jit") {
extra_configs = [ "..:dart_maybe_product_config" ]
}
build_libdart_vm("libdart_vm_jit_product") {
extra_configs = [ "..:dart_product_config" ]
}
build_libdart_vm("libdart_vm_precompiled_runtime") {
extra_configs = [
"..:dart_maybe_product_config",
"..:dart_precompiled_runtime_config",
]
}
build_libdart_vm("libdart_vm_precompiled_runtime_product") {
extra_configs = [
"..:dart_product_config",
"..:dart_precompiled_runtime_config",
]
}
build_libdart_vm("libdart_vm_nosnapshot") {
extra_configs = [
"..:dart_maybe_product_config",
"..:dart_no_snapshot_config",
]
}
build_libdart_vm("libdart_vm_nosnapshot_with_precompiler") {
extra_configs = [
"..:dart_maybe_product_config",
"..:dart_precompiler_config",
"..:dart_no_snapshot_config",
]
}
build_libdart_vm("libdart_vm_nosnapshot_with_precompiler_product") {
extra_configs = [
"..:dart_product_config",
"..:dart_precompiler_config",
"..:dart_no_snapshot_config",
]
}
build_libdart_vm("libdart_vm_with_precompiler") {
extra_configs = [
"..:dart_maybe_product_config",
"..:dart_precompiler_config",
]
}
build_libdart_vm("libdart_vm_with_precompiler_product") {
extra_configs = [
"..:dart_product_config",
"..:dart_precompiler_config",
]
}
template("process_library_source") {
assert(defined(invoker.libsources), "Need libsources in $target_name")
assert(defined(invoker.output), "Need output in $target_name")
action(target_name) {
visibility = [ ":*" ] # Only targets in this file can see this.
libsources = invoker.libsources
script = invoker.script
inputs = invoker.inputs + libsources
outputs = [
invoker.output,
]
args = invoker.args + rebase_path(libsources, root_build_dir)
}
}
template("generate_library_source") {
assert(defined(invoker.libname), "Need libname in $target_name")
assert(defined(invoker.libsources), "Need libsources in $target_name")
assert(defined(invoker.kind), "Need kind in $target_name")
assert(defined(invoker.output), "Need output in $target_name")
process_library_source(target_name) {
libname = invoker.libname
libsources = invoker.libsources
kind = invoker.kind
script = "../tools/gen_library_src_paths.py"
inputs = [
"../lib/libgen_in.cc",
]
output = invoker.output
args = [
"--output",
rebase_path(invoker.output, root_build_dir),
"--input_cc",
rebase_path("../lib/libgen_in.cc", root_build_dir),
"--include",
"vm/bootstrap.h",
"--var_name",
"dart::Bootstrap::${libname}_${kind}_paths_",
"--library_name",
"dart:${libname}",
]
}
}
template("build_libdart_lib") {
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_sources = []
if (defined(invoker.extra_sources)) {
extra_sources += invoker.extra_sources
}
source_set(target_name) {
configs += [
"..:dart_arch_config",
"..:dart_config",
"..:dart_os_config",
] + extra_configs
if (is_fuchsia) {
configs -= [ "//build/config:symbol_visibility_hidden" ]
}
deps = extra_deps
sources = extra_sources
include_dirs = [ ".." ]
}
}
# This templates expects invoker.sources to be a list of lists.
# The lists contain the following information about each library:
# library name (string)
# library sources (list of strings)
# library source base path (string)
# filename (string)
# do_patch (boolean)
#
# If do_patch is true, the lists additionally contains
# patch sources (list of strings)
# patch source base path (string)
#
# The template iterates over the list, and generates generate_library_source
# actions for each. After that, it generates targets to compile the generated
# sources to make libdart_lib_*.
template("generate_core_libraries") {
assert(defined(invoker.sources), "Need sources in $target_name")
assert(defined(invoker.allsources), "Need allsources in $target_name")
liboutputs = []
libdeps = []
foreach(lib, invoker.sources) {
libname = lib[0]
filename = lib[3]
do_patch = lib[4]
generate_library_source("generate_${filename}_cc_file") {
libname = libname
libsources = rebase_path(lib[1], ".", lib[2])
kind = "source"
output = "$target_gen_dir/${filename}_gen.cc"
}
if (do_patch) {
generate_library_source("generate_${filename}_patch_cc_file") {
libname = libname
libsources = rebase_path(lib[5], ".", lib[6])
kind = "patch"
output = "$target_gen_dir/${filename}_patch_gen.cc"
}
}
liboutputs += [ "$target_gen_dir/${filename}_gen.cc" ]
libdeps += [ ":generate_${filename}_cc_file" ]
if (do_patch) {
liboutputs += [ "$target_gen_dir/${filename}_patch_gen.cc" ]
libdeps += [ ":generate_${filename}_patch_cc_file" ]
}
}
all_libsources = rebase_path(invoker.allsources, ".", "../lib")
build_libdart_lib("libdart_lib_nosnapshot_with_precompiler") {
extra_configs = [
"..:dart_maybe_product_config",
"..:dart_precompiler_config",
]
extra_deps = libdeps
extra_sources = all_libsources + [ "bootstrap.cc" ] + liboutputs
}
build_libdart_lib("libdart_lib_nosnapshot_with_precompiler_product") {
extra_configs = [
"..:dart_product_config",
"..:dart_precompiler_config",
]
extra_deps = libdeps
extra_sources = all_libsources + [ "bootstrap.cc" ] + liboutputs
}
build_libdart_lib("libdart_lib_with_precompiler") {
extra_configs = [
"..:dart_maybe_product_config",
"..:dart_precompiler_config",
]
extra_deps = libdeps
extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
}
build_libdart_lib("libdart_lib_with_precompiler_product") {
extra_configs = [
"..:dart_product_config",
"..:dart_precompiler_config",
]
extra_deps = libdeps
extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
}
build_libdart_lib("libdart_lib_jit") {
extra_configs = [ "..:dart_maybe_product_config" ]
extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
}
build_libdart_lib("libdart_lib_jit_product") {
extra_configs = [ "..:dart_product_config" ]
extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
}
build_libdart_lib("libdart_lib_precompiled_runtime") {
extra_configs = [
"..:dart_maybe_product_config",
"..:dart_precompiled_runtime_config",
]
extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
}
build_libdart_lib("libdart_lib_precompiled_runtime_product") {
extra_configs = [
"..:dart_product_config",
"..:dart_precompiled_runtime_config",
]
extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
}
}
generate_core_libraries("core_libraries") {
sources = [
[
"async",
async_sdk_sources,
"../../sdk/lib/async",
"async",
true,
async_runtime_sources,
"../lib",
],
[
"collection",
collection_sdk_sources,
"../../sdk/lib/collection",
"collection",
true,
collection_runtime_sources,
"../lib",
],
[
"convert",
convert_sdk_sources,
"../../sdk/lib/convert",
"convert",
true,
convert_runtime_sources,
"../lib",
],
[
"core",
core_sdk_sources,
"../../sdk/lib/core",
"core",
true,
core_runtime_sources,
"../lib",
],
[
"developer",
developer_sdk_sources,
"../../sdk/lib/developer",
"developer",
true,
developer_runtime_sources,
"../lib",
],
[
"_internal",
internal_sdk_sources,
"../../sdk/lib/internal",
"internal",
true,
internal_runtime_sources,
"../lib",
],
[
"isolate",
isolate_sdk_sources,
"../../sdk/lib/isolate",
"isolate",
true,
isolate_runtime_sources,
"../lib",
],
[
"math",
math_sdk_sources,
"../../sdk/lib/math",
"math",
true,
math_runtime_sources,
"../lib",
],
[
"mirrors",
mirrors_sdk_sources,
"../../sdk/lib/mirrors",
"mirrors",
true,
mirrors_runtime_sources,
"../lib",
],
[
"profiler",
profiler_sdk_sources,
"../../sdk/lib/profiler",
"profiler",
false,
],
[
"typed_data",
typed_data_sdk_sources,
"../../sdk/lib/typed_data",
"typed_data",
true,
typed_data_runtime_sources,
"../lib",
],
[
"_vmservice",
vmservice_sdk_sources,
"../../sdk/lib/vmservice",
"vmservice",
true,
vmservice_runtime_sources,
"../lib",
],
]
allsources = async_runtime_sources + collection_runtime_sources +
convert_runtime_sources + core_runtime_sources +
developer_runtime_sources + internal_runtime_sources +
isolate_runtime_sources + math_runtime_sources +
mirrors_runtime_sources + profiler_runtime_sources +
typed_data_runtime_sources + vmservice_runtime_sources
}
template("concatenate_patch") {
assert(defined(invoker.libsources), "Need a sources in $target_name")
assert(defined(invoker.output), "Need an output in $target_name")
process_library_source(target_name) {
libsources = invoker.libsources
inputs = []
output = invoker.output
script = "../tools/concatenate_patches.py"
args = [
"--output",
rebase_path(output, root_build_dir),
]
}
}
template("generate_vm_patched_sdk") {
assert(defined(invoker.libraries), "Need libraries in $target_name")
concatenation_target_names = []
# Concatenate vm library patches.
foreach(library, invoker.libraries) {
name = library[0]
target_output = "$target_gen_dir/patches/${name}_patch.dart"
concatenate_patch("concatenate_${name}_patch") {
libsources = rebase_path(library[1], ".", library[2])
output = target_output
}
concatenation_target_names += [ ":concatenate_${name}_patch" ]
}
patched_sdk_dir = "patched_sdk"
other_outputs = [
# Instead of listing all outputs we list those consumed by
# other BUILD rules.
"$root_out_dir/$patched_sdk_dir/lib/libraries.json",
]
# Build the patched sdk out of the concatenated patches and the special
# libraries.
generate_patched_sdk(target_name) {
mode = "vm"
deps = concatenation_target_names
input_patches_dir = "$target_gen_dir/patches"
patched_sdk_dir = patched_sdk_dir
outputs = other_outputs
}
}
generate_vm_patched_sdk("patched_sdk") {
libraries = [
[
"async",
async_runtime_sources,
"../lib",
],
[
"collection",
collection_runtime_sources,
"../lib",
],
[
"convert",
convert_runtime_sources,
"../lib",
],
[
"core",
core_runtime_sources,
"../lib",
],
[
"developer",
developer_runtime_sources,
"../lib",
],
[
"internal",
internal_runtime_sources,
"../lib",
],
[
"isolate",
isolate_runtime_sources,
"../lib",
],
[
"math",
math_runtime_sources,
"../lib",
],
[
"mirrors",
mirrors_runtime_sources,
"../lib",
],
[
"profiler",
profiler_runtime_sources,
"../lib",
],
[
"typed_data",
typed_data_runtime_sources,
"../lib",
],
[
"vmservice",
vmservice_runtime_sources,
"../lib",
],
[
"io",
io_runtime_sources,
"../bin",
],
]
}
compile_platform("vm_legacy_platform") {
sources = [
"../../sdk/lib/libraries.json",
]
outputs = [
"$root_out_dir/vm_platform.dill",
"$root_out_dir/vm_outline.dill",
]
inputs = [
"../../sdk/lib/libraries.yaml",
]
args = [ "dart:core" ]
}
compile_platform("vm_platform") {
sources = [
"$root_out_dir/patched_sdk/lib/libraries.json",
]
outputs = [
"$root_out_dir/vm_platform_strong.dill",
"$root_out_dir/vm_outline_strong.dill",
]
deps = [
":patched_sdk",
]
args = [
"--strong-mode",
"dart:core",
]
}
group("kernel_platform_files") {
public_deps = [
":vm_legacy_platform",
":vm_platform",
]
}