blob: afc963ab00ada5311caa09305bca19d63be179a7 [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.
declare_args() {
# Instead of using is_debug, we introduce a different flag for specifying a
# Debug build of Dart so that clients can still use a Release build of Dart
# while themselves doing a Debug build.
dart_debug = false
# Set the runtime mode. This affects how the runtime is built and what
# features it has. Valid values are:
# 'develop' (the default) - VM is built to run as a JIT with all development
# features enabled.
# 'profile' - The VM is built to run with AOT compiled code with only the
# CPU profiling features enabled.
# 'release' - The VM is built to run with AOT compiled code with no developer
# features enabled.
#
# These settings are only used for Flutter, at the moment. A standalone build
# of the Dart VM should leave this set to "develop", and should set
# 'is_debug', 'is_release', or 'is_product'.
dart_runtime_mode = "develop"
# Explicitly set the target architecture in case of precompilation. Leaving
# this unspecified results in automatic target architecture detection.
# Available options are: arm, arm64, mips, x64 and ia32
dart_target_arch = ""
dart_experimental_interpreter = false
}
config("dart_public_config") {
include_dirs = [
".",
]
}
# 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"]
}
}
# Adds the DART_PRECOMPILED_RUNTIME define if Flutter has specified "profile" or
# "release" for dart_runtime_mode.
config("dart_maybe_precompiled_runtime_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)
if (!dart_experimental_interpreter) {
defines += ["DART_PRECOMPILED_RUNTIME"]
}
} else if (dart_runtime_mode == "profile") {
if (!dart_experimental_interpreter) {
defines += ["DART_PRECOMPILED_RUNTIME"]
}
}
}
config("dart_precompiled_runtime_config") {
defines = []
defines += ["DART_PRECOMPILED_RUNTIME"]
}
# Controls DART_PRECOMPILER #define.
config("dart_precompiler_config") {
defines = []
defines += ["DART_PRECOMPILER"]
}
config("dart_no_snapshot_config") {
defines = []
defines += ["DART_NO_SNAPSHOT"]
}
config("dart_config") {
defines = []
if (dart_experimental_interpreter) {
dart_target_arch = "dbc"
}
if (dart_target_arch != "") {
if ((dart_target_arch == "arm") ||
(dart_target_arch == "simarm")) {
defines += [ "TARGET_ARCH_ARM" ]
if (target_os == "mac" || target_os == "ios") {
defines += [ "TARGET_ABI_IOS" ]
} else {
defines += [ "TARGET_ABI_EABI" ]
}
} else if ((dart_target_arch == "armv6") ||
(dart_target_arch == "simarmv6")) {
defines += [ "TARGET_ARCH_ARM" ]
defines += [ "TARGET_ARCH_ARM_6" ]
defines += [ "TARGET_ABI_EABI" ]
} else if ((dart_target_arch == "armv5te") ||
(dart_target_arch == "simarmv5te")) {
defines += [ "TARGET_ARCH_ARM" ]
defines += [ "TARGET_ARCH_ARM_5TE" ]
defines += [ "TARGET_ABI_EABI" ]
} else if ((dart_target_arch == "arm64") ||
(dart_target_arch == "simarm64")) {
defines += [ "TARGET_ARCH_ARM64" ]
} else if ((dart_target_arch == "mips") ||
(dart_target_arch == "simmips")) {
defines += [ "TARGET_ARCH_MIPS" ]
} else if (dart_target_arch == "x64") {
defines += [ "TARGET_ARCH_X64" ]
} else if (dart_target_arch == "ia32") {
defines += [ "TARGET_ARCH_IA32" ]
} else if ((dart_target_arch == "dbc") ||
(dart_target_arch == "simdbc") ||
(dart_target_arch == "simdbc64")) {
defines += [ "TARGET_ARCH_DBC" ]
defines += [ "USING_SIMULATOR" ]
} else {
print("Invalid |dart_target_arch|")
assert(false)
}
}
if (dart_debug) {
defines += ["DEBUG"]
} else {
defines += ["NDEBUG"]
}
cflags = [
"-Werror",
"-Wall",
"-Wextra", # Also known as -W.
"-Wno-unused-parameter",
"-Wnon-virtual-dtor",
"-Wvla",
"-Wno-conversion-null",
"-Woverloaded-virtual",
"-g3",
"-ggdb3",
"-fno-rtti",
"-fno-exceptions",
]
if (dart_debug) {
cflags += [
"-O1",
]
} else {
cflags += [
"-O3",
]
}
if (defined(is_asan) && is_asan) {
ldflags = [
"-Wl,-u_sanitizer_options_link_helper",
"-fsanitize=address",
]
}
}
template("libdart_library") {
extra_configs = []
if (defined(invoker.extra_configs)) {
extra_configs += invoker.extra_configs
}
extra_deps = []
if (defined(invoker.extra_deps)) {
extra_deps += invoker.extra_deps
}
static_library(target_name) {
configs += [
":dart_config",
":dart_maybe_product_config"
] + extra_configs
deps = [
"vm:libdart_platform",
"third_party/double-conversion/src:libdouble_conversion",
":generate_version_cc_file",
] + extra_deps
include_dirs = [
".",
]
public_configs = [":dart_public_config"]
sources = [
"include/dart_api.h",
"include/dart_mirrors_api.h",
"include/dart_native_api.h",
"include/dart_tools_api.h",
"vm/dart_api_impl.cc",
"vm/debugger_api_impl.cc",
"vm/mirrors_api_impl.cc",
"vm/native_api_impl.cc",
"vm/version.h",
"$target_gen_dir/version.cc",
]
defines = [
"DART_SHARED_LIB",
]
}
}
libdart_library("libdart") {
extra_configs = [
":dart_maybe_precompiled_runtime_config"
]
extra_deps = [
"vm:libdart_lib",
"vm:libdart_vm",
]
}
libdart_library("libdart_precompiled_runtime") {
extra_configs = [
":dart_precompiled_runtime_config"
]
extra_deps = [
"vm:libdart_lib_precompiled_runtime",
"vm:libdart_vm_precompiled_runtime",
]
}
libdart_library("libdart_nosnapshot") {
extra_configs = [
":dart_no_snapshot_config",
":dart_maybe_precompiled_runtime_config"
]
extra_deps = [
"vm:libdart_lib_nosnapshot",
"vm:libdart_vm_nosnapshot",
]
}
libdart_library("libdart_nosnapshot_precompiled_runtime") {
extra_configs = [
":dart_no_snapshot_config",
":dart_precompiled_runtime_config"
]
extra_deps = [
"vm:libdart_lib_nosnapshot_precompiled_runtime",
"vm:libdart_vm_nosnapshot_precompiled_runtime",
]
}
libdart_library("libdart_nosnapshot_with_precompiler") {
extra_configs = [
":dart_no_snapshot_config",
":dart_precompiler_config",
]
extra_deps = [
"vm:libdart_lib_nosnapshot_with_precompiler",
"vm:libdart_vm_nosnapshot_with_precompiler",
]
}
action("generate_version_cc_file") {
deps = [
":libdart_dependency_helper",
]
inputs = [
"../tools/utils.py",
"../tools/print_version.py",
"../tools/VERSION",
"vm/version_in.cc",
]
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),
]
}
executable("libdart_dependency_helper") {
configs += [":dart_config",
":dart_maybe_product_config"]
deps = [
"vm:libdart_lib_nosnapshot",
"vm:libdart_lib",
"vm:libdart_vm",
"vm:libdart_platform",
"third_party/double-conversion/src:libdouble_conversion",
]
sources = [
"vm/libdart_dependency_helper.cc",
]
}