# 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 += [ "--ignore_svn_revision" ]
  }
}
