# Copyright 2013 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

if (is_android) {
  import("//build/config/android/config.gni")
}

if (target_cpu == "arm" || target_cpu == "arm64") {
  import("//build/config/arm.gni")
}

declare_args() {
  # The runtime mode ("debug", "profile", "release", or "jit_release")
  flutter_runtime_mode = "debug"

  # Whether to use a prebuilt Dart SDK instead of building one.
  flutter_prebuilt_dart_sdk = false
}

# feature_defines_list ---------------------------------------------------------

feature_defines_list = [
  "FLUTTER_RUNTIME_MODE_DEBUG=1",
  "FLUTTER_RUNTIME_MODE_PROFILE=2",
  "FLUTTER_RUNTIME_MODE_RELEASE=3",
  "FLUTTER_RUNTIME_MODE_JIT_RELEASE=4",
  "DART_LEGACY_API=[[deprecated]]",
]

if (flutter_runtime_mode == "debug") {
  feature_defines_list += [
    "FLUTTER_RUNTIME_MODE=1",
    "FLUTTER_JIT_RUNTIME=1",
  ]
} else if (flutter_runtime_mode == "profile") {
  feature_defines_list += [ "FLUTTER_RUNTIME_MODE=2" ]
} else if (flutter_runtime_mode == "release") {
  feature_defines_list += [
    "FLUTTER_RUNTIME_MODE=3",
    "FLUTTER_RELEASE=1",
  ]
} else if (flutter_runtime_mode == "jit_release") {
  feature_defines_list += [
    "FLUTTER_RUNTIME_MODE=4",
    "FLUTTER_RELEASE=1",
    "FLUTTER_JIT_RUNTIME=1",
  ]
} else {
  feature_defines_list += [ "FLUTTER_RUNTIME_MODE=0" ]
}

if (is_ios || is_mac) {
  flutter_cflags_objc = [
    "-Werror=overriding-method-mismatch",
    "-Werror=undeclared-selector",
  ]
  flutter_cflags_objcc = flutter_cflags_objc
  flutter_cflags_objc_arc = flutter_cflags_objc + [ "-fobjc-arc" ]
  flutter_cflags_objcc_arc = flutter_cflags_objc_arc
}

# A combo of host os name and cpu is used in several locations to
# generate the names of the archived artifacts.
platform_name = host_os
if (platform_name == "mac") {
  platform_name = "darwin"
} else if (platform_name == "win") {
  platform_name = "windows"
}

full_platform_name = "$platform_name-$host_cpu"

target_platform_name = target_os
if (target_platform_name == "mac") {
  platform_target_name = "darwin"
} else if (target_platform_name == "win") {
  target_platform_name = "windows"
}

full_target_platform_name = "$target_platform_name-$target_cpu"

# Prebuilt Dart SDK location

if (flutter_prebuilt_dart_sdk) {
  _target_os_name = target_os
  if (_target_os_name == "mac") {
    _target_os_name = "macos"
  } else if (_target_os_name == "win") {
    _target_os_name = "windows"
  }

  _host_os_name = host_os
  if (_host_os_name == "mac") {
    _host_os_name = "macos"
  } else if (_host_os_name == "win") {
    _host_os_name = "windows"
  }

  _target_prebuilt_dart_sdk_config = "$_target_os_name-$target_cpu"
  _host_prebuilt_dart_sdk_config = "$_host_os_name-$host_cpu"

  target_prebuilt_dart_sdk =
      "//flutter/prebuilts/$_target_prebuilt_dart_sdk_config/dart-sdk"
  host_prebuilt_dart_sdk =
      "//flutter/prebuilts/$_host_prebuilt_dart_sdk_config/dart-sdk"

  # There is no prebuilt Dart SDK targeting Fuchsia, but we also don't need
  # one, so even when the build is targeting Fuchsia, use the prebuilt
  # Dart SDK for the host.
  if (current_toolchain == host_toolchain || is_fuchsia || is_wasm) {
    prebuilt_dart_sdk = host_prebuilt_dart_sdk
    prebuilt_dart_sdk_config = _host_prebuilt_dart_sdk_config
  } else {
    prebuilt_dart_sdk = target_prebuilt_dart_sdk
    prebuilt_dart_sdk_config = _target_prebuilt_dart_sdk_config
  }
}

# Flutter SDK artifacts should only be built when either doing host builds, or
# for cross-compiled desktop targets.
# TODO: We can't build the engine artifacts for arm (32-bit) right now;
# see https://github.com/flutter/flutter/issues/74322
build_engine_artifacts =
    current_toolchain == host_toolchain ||
    (is_linux && !is_chromeos && current_cpu != "arm") || is_mac || is_win
