# 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("runtime_args.gni") 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 = "" # The optimization level to use for debug builds. dart_debug_optimization_level = "2" } 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" ] } } 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" ] } # TODO(rmacnak): If Fuchsia adds a checked-in SDK, this should be folded back # into dart_config config("dart_use_target_arch_config") { defines = [] if (dart_target_arch != "") { if (dart_target_arch == "arm" || dart_target_arch == "simarm") { defines += [ "TARGET_ARCH_ARM" ] } else if (dart_target_arch == "armv6" || dart_target_arch == "simarmv6") { defines += [ "TARGET_ARCH_ARM" ] defines += [ "TARGET_ARCH_ARM_6" ] } else if (dart_target_arch == "armv5te" || dart_target_arch == "simarmv5te") { defines += [ "TARGET_ARCH_ARM" ] defines += [ "TARGET_ARCH_ARM_5TE" ] } 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" || dart_target_arch == "armsimdbc" || dart_target_arch == "armsimdbc64") { defines += [ "TARGET_ARCH_DBC" ] defines += [ "USING_SIMULATOR" ] } else { print("Invalid dart_target_arch: $dart_target_arch") assert(false) } } } config("dart_config") { defines = [] 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) } 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 += [ "//magenta/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_config", ":dart_maybe_product_config", ] + extra_configs if (is_fuchsia) { configs -= [ "//build/config:symbol_visibility_hidden" ] } 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 = [ "$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/debugger_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_use_target_arch_config" ] extra_deps = [ "vm:libdart_lib_jit", "vm:libdart_vm_jit", ] } libdart_library("libdart_precompiled_runtime") { extra_configs = [ ":dart_precompiled_runtime_config", ":dart_use_target_arch_config", ] extra_deps = [ "vm:libdart_lib_precompiled_runtime", "vm:libdart_vm_precompiled_runtime", ] } libdart_library("libdart_nosnapshot_with_precompiler") { extra_configs = [ ":dart_no_snapshot_config", ":dart_precompiler_config", ":dart_use_target_arch_config", ] extra_deps = [ "vm:libdart_lib_nosnapshot_with_precompiler", "vm:libdart_vm_nosnapshot_with_precompiler", ] } # TODO(rmacnak): Remove if Fuchsia adds a checked-in SDK. libdart_library("libdart_nosnapshot_with_precompiler_host_arch") { extra_configs = [ ":dart_no_snapshot_config", ":dart_precompiler_config", ] extra_deps = [ "vm:libdart_lib_nosnapshot_with_precompiler_host_arch", "vm:libdart_vm_nosnapshot_with_precompiler_host_arch", ] } libdart_library("libdart_with_precompiler") { extra_configs = [ ":dart_precompiler_config", ":dart_use_target_arch_config", ] extra_deps = [ "vm:libdart_lib_with_precompiler", "vm:libdart_vm_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", ] if (is_fuchsia) { configs -= [ "//build/config:symbol_visibility_hidden" ] } 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", ] sources = [ "vm/libdart_dependency_helper.cc", ] }