# 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("../sdk_args.gni") import("configs.gni") import("runtime_args.gni") if (is_fuchsia) { import("//build/fuchsia/sdk.gni") } config("dart_public_config") { include_dirs = [ ".", "include", ] } # 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", "EXCLUDE_CFE_AND_KERNEL_PLATFORM", ] } # Controls DART_PRECOMPILER #define. config("dart_precompiler_config") { defines = [] defines += [ "DART_PRECOMPILER" ] } config("dart_os_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) } } # We need to build gen_snapshot targeting Fuchsia during a build of the SDK # targeting Mac and Linux. This configuration is used to unconditionally target # Fuchsia. It should not be combined with dart_os_config. config("dart_os_fuchsia_config") { defines = [ "TARGET_OS_FUCHSIA" ] } config("dart_arch_config") { defines = [] 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 == "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 { print("Invalid dart_target_arch: $dart_target_arch") assert(false) } } config("dart_config") { defines = [] if (dart_debug) { defines += [ "DEBUG" ] } else { defines += [ "NDEBUG" ] } include_dirs = [ "include" ] if (dart_use_tcmalloc) { defines += [ "DART_USE_TCMALLOC" ] include_dirs += [ "../third_party/tcmalloc/gperftools/src" ] } if (dart_platform_bytecode) { defines += [ "DART_USE_BYTECODE" ] } if (is_fuchsia) { if (using_fuchsia_sdk) { # TODO(chinmaygarde): Currenty these targets need to be build in the # Fuchsia tree as well as outside it using the SDK. However, not all # Fuchsia features are available in the SDK. As these features are added, # the guards can be removed. Eventually, only SDK builds will be present. # Then, this flag can be removed completely. defines += [ "FUCHSIA_SDK" ] } else { include_dirs += [ "//zircon/system/ulib/zx/include" ] } } if (use_nnbd) { defines += [ "DART_BUILT_WITH_NNBD_FLAG" ] } if (!is_win) { cflags = [ "-Werror", "-Wall", "-Wextra", # Also known as -W. "-Wno-unused-parameter", "-Wno-unused-private-field", "-Wnon-virtual-dtor", "-Wvla", "-Wno-conversion-null", "-Woverloaded-virtual", "-Wno-comments", # Conflicts with clang-format. "-g3", "-ggdb3", "-fno-rtti", "-fno-exceptions", "-Wimplicit-fallthrough", ] if (!is_clang) { cflags += [ "-Wno-cast-function-type" ] } ldflags = [] if (is_clang && dart_vm_code_coverage) { cflags += [ "-O0", "-fprofile-arcs", "-ftest-coverage", ] ldflags += [ "--coverage" ] } else if (dart_debug) { cflags += [ "-O${dart_debug_optimization_level}" ] } else { cflags += [ "-O3" ] } if (is_fuchsia) { # safe-stack does not work with the interpreter. cflags += [ "-fno-sanitize=safe-stack" ] } } } config("dart_shared_lib") { if (dart_lib_export_symbols) { defines = [ "DART_SHARED_LIB" ] } } config("dart_libfuzzer_config") { defines = [ "FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" ] cflags = [ "-fsanitize=address,fuzzer-no-link" ] ldflags = [ "-fsanitize=address,fuzzer" ] } source_set("dart_api") { public_configs = [ ":dart_public_config" ] sources = [ "include/dart_api.h", "include/dart_native_api.h", "include/dart_tools_api.h", ] } library_for_all_configs("libdart") { target_type = dart_component_kind extra_deps = [ ":generate_version_cc_file", "third_party/double-conversion/src:libdouble_conversion", ] if (dart_enable_wasm) { extra_deps += [ "//third_party/wasmer" ] defines = [ "DART_ENABLE_WASM" ] } if (is_fuchsia) { if (using_fuchsia_sdk) { extra_deps += [ "$fuchsia_sdk_root/pkg:fdio", "$fuchsia_sdk_root/pkg:trace-engine", ] } else { extra_deps += [ "//zircon/public/lib/fbl", "//zircon/public/lib/trace-engine", ] } } configurable_deps = [ "platform:libdart_platform", "vm:libdart_lib", "vm:libdart_vm", ] extra_configs = [ ":dart_shared_lib" ] include_dirs = [ "." ] public_configs = [ ":dart_public_config" ] sources = [ "$target_gen_dir/version.cc", "include/dart_api.h", "include/dart_native_api.h", "include/dart_tools_api.h", "vm/dart_api_impl.cc", "vm/native_api_impl.cc", "vm/version.h", ] } action("generate_version_cc_file") { inputs = [ "../tools/utils.py", "../tools/VERSION", "vm/version_in.cc", ] if (dart_version_git_info) { inputs += [ "$default_git_folder/logs/HEAD" ] } 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, ] } }