blob: 823a47eab4552d0d5868306b9769cefd7de5a845 [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/dart_host_sdk_toolchain.gni")
import("runtime_args.gni")
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" ]
}
}
# This is a config to use to build PRODUCT mode artifacts in a RELEASE build.
# If a DEBUG build has been specified it will be ignored.
config("dart_product_config") {
defines = []
if (!dart_debug) {
defines += [ "PRODUCT" ]
}
}
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_os_config") {
defines = []
# If dart_host_toolchain is the current toolchain, and it is different from
# host_toolchain, then we are building the SDK for the host, and should not
# hardcode these defines.
if (current_toolchain != dart_host_toolchain ||
host_toolchain == dart_host_toolchain) {
if (target_os == "android") {
defines += [ "TARGET_OS_ANDROID" ]
} else if (target_os == "fuchsia") {
defines += [ "TARGET_OS_FUCHSIA" ]
} else if (target_os == "ios") {
defines += [ "TARGET_OS_MACOS" ]
defines += [ "TARGET_OS_MACOS_IOS" ]
} else if (target_os == "linux") {
defines += [ "TARGET_OS_LINUX" ]
} else if (target_os == "mac") {
defines += [ "TARGET_OS_MACOS" ]
} else if (target_os == "win") {
defines += [ "TARGET_OS_WINDOWS" ]
} else {
print("Unknown target_os: $target_os")
assert(false)
}
}
}
config("dart_arch_config") {
defines = []
# If dart_host_toolchain is the current toolchain, and it is different from
# host_toolchain, then we are building the SDK for the host, and should not
# hardcode these defines.
if (current_toolchain != dart_host_toolchain ||
host_toolchain == dart_host_toolchain) {
if (dart_target_arch == "arm") {
defines += [ "TARGET_ARCH_ARM" ]
} else if (dart_target_arch == "armv6") {
defines += [ "TARGET_ARCH_ARM" ]
defines += [ "TARGET_ARCH_ARM_6" ]
} else if (dart_target_arch == "armv5te") {
defines += [ "TARGET_ARCH_ARM" ]
defines += [ "TARGET_ARCH_ARM_5TE" ]
} else if (dart_target_arch == "arm64") {
defines += [ "TARGET_ARCH_ARM64" ]
} else if (dart_target_arch == "x64") {
defines += [ "TARGET_ARCH_X64" ]
} else if (dart_target_arch == "ia32" || dart_target_arch == "x86") {
defines += [ "TARGET_ARCH_IA32" ]
} else if (dart_target_arch == "dbc") {
defines += [ "TARGET_ARCH_DBC" ]
defines += [ "USING_SIMULATOR" ]
} else {
print("Invalid dart_target_arch: $dart_target_arch")
assert(false)
}
}
}
config("dart_config") {
defines = []
if (dart_debug) {
defines += [ "DEBUG" ]
} else {
defines += [ "NDEBUG" ]
}
include_dirs = []
if (dart_use_tcmalloc) {
defines += [ "DART_USE_TCMALLOC" ]
include_dirs += [ "../third_party/tcmalloc/gperftools/src" ]
}
if (is_fuchsia) {
defines += [ "DART_USE_JEMALLOC" ]
include_dirs += [
"//zircon/system/ulib/zx/include",
"//zircon/third_party/ulib/jemalloc/include",
]
}
if (!is_win) {
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 += [ "-O${dart_debug_optimization_level}" ]
} else {
cflags += [ "-O3" ]
}
ldflags = []
if (defined(is_asan) && is_asan) {
ldflags += [ "-fsanitize=address" ]
}
if (defined(is_msan) && is_msan) {
ldflags += [ "-fsanitize=memory" ]
}
if (defined(is_tsan) && is_tsan) {
ldflags += [ "-fsanitize=thread" ]
}
}
}
source_set("dart_api") {
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",
]
}
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_arch_config",
":dart_config",
":dart_os_config",
] + extra_configs
if (is_fuchsia) {
configs -= [ "//build/config:symbol_visibility_hidden" ]
}
deps = [
"third_party/double-conversion/src:libdouble_conversion",
":generate_version_cc_file",
] + extra_deps
include_dirs = [ "." ]
public_configs = [ ":dart_public_config" ]
sources = [
"$target_gen_dir/version.cc",
"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/mirrors_api_impl.cc",
"vm/native_api_impl.cc",
"vm/version.h",
]
defines = [ "DART_SHARED_LIB" ]
}
}
libdart_library("libdart_jit") {
extra_configs = [ ":dart_maybe_product_config" ]
extra_deps = [
"platform:libdart_platform",
"vm:libdart_lib_jit",
"vm:libdart_vm_jit",
]
}
libdart_library("libdart_jit_product") {
extra_configs = [ ":dart_product_config" ]
extra_deps = [
"platform:libdart_platform_product",
"vm:libdart_lib_jit_product",
"vm:libdart_vm_jit_product",
]
}
libdart_library("libdart_precompiled_runtime") {
extra_configs = [
":dart_maybe_product_config",
":dart_precompiled_runtime_config",
]
extra_deps = [
"platform:libdart_platform",
"vm:libdart_lib_precompiled_runtime",
"vm:libdart_vm_precompiled_runtime",
]
}
libdart_library("libdart_precompiled_runtime_product") {
extra_configs = [
":dart_product_config",
":dart_precompiled_runtime_config",
]
extra_deps = [
"platform:libdart_platform_product",
"vm:libdart_lib_precompiled_runtime_product",
"vm:libdart_vm_precompiled_runtime_product",
]
}
libdart_library("libdart_nosnapshot_with_precompiler") {
extra_configs = [
":dart_maybe_product_config",
":dart_no_snapshot_config",
":dart_precompiler_config",
]
extra_deps = [
"platform:libdart_platform",
"vm:libdart_lib_nosnapshot_with_precompiler",
"vm:libdart_vm_nosnapshot_with_precompiler",
]
}
libdart_library("libdart_nosnapshot_with_precompiler_product") {
extra_configs = [
":dart_product_config",
":dart_no_snapshot_config",
":dart_precompiler_config",
]
extra_deps = [
"platform:libdart_platform_product",
"vm:libdart_lib_nosnapshot_with_precompiler_product",
"vm:libdart_vm_nosnapshot_with_precompiler_product",
]
}
libdart_library("libdart_with_precompiler") {
extra_configs = [
":dart_maybe_product_config",
":dart_precompiler_config",
]
extra_deps = [
"platform:libdart_platform",
"vm:libdart_lib_with_precompiler",
"vm:libdart_vm_with_precompiler",
]
}
libdart_library("libdart_with_precompiler_product") {
extra_configs = [
":dart_product_config",
":dart_precompiler_config",
]
extra_deps = [
"platform:libdart_platform_product",
"vm:libdart_lib_with_precompiler_product",
"vm:libdart_vm_with_precompiler_product",
]
}
action("generate_version_cc_file") {
deps = [
"third_party/double-conversion/src:libdouble_conversion",
"vm:libdart_lib_jit",
"vm:libdart_lib_nosnapshot_with_precompiler",
"vm:libdart_vm_jit",
"vm:libdart_vm_nosnapshot_with_precompiler",
]
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),
]
if (!dart_version_git_info) {
args += [ "--no_git_hash" ]
}
if (dart_custom_version_for_pub != "") {
args += [
"--custom_for_pub",
dart_custom_version_for_pub,
]
}
}