# 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.

import("//build/toolchain/clang.gni")
import("//flutter/common/config.gni")
import("//flutter/examples/examples.gni")
import("//flutter/shell/platform/config.gni")
import("//flutter/shell/platform/glfw/config.gni")
import("//flutter/testing/testing.gni")
import("//third_party/dart/build/dart/copy_tree.gni")

# Whether to build the dartdevc sdk, libraries, and source files
# required for the flutter web sdk.
# TODO(jacksongardner): remove this poorly named argument once the recipes stop
# using it. https://github.com/flutter/flutter/issues/113303
declare_args() {
  full_dart_sdk = false
}

config("config") {
  include_dirs = [ ".." ]
  if (is_win) {
    if (current_cpu != "x86") {
      cflags = [ "/WX" ]  # Treat warnings as errors.
    }
  }
}

config("export_dynamic_symbols") {
  # --dynamic-list is the GNU linker syntax supported by ELF linkers.
  # -exported_symbols_list is the macOS linker syntax. The different flags
  # accept files formatted differently, so we have exported_symbols.sym for GNU
  # linker syntax, and exported_symbols_mac.sym for the macOS linker syntax.
  if (is_linux || is_fuchsia) {
    inputs = [ "//flutter/common/exported_symbols.sym" ]
    ldflags = [ "-Wl,--dynamic-list=" + rebase_path(inputs[0], root_build_dir) ]
  } else if (is_mac) {
    inputs = [ "//flutter/common/exported_symbols_mac.sym" ]
    ldflags = [
      "-Xlinker",
      "-exported_symbols_list",
      "-Xlinker",
      rebase_path(inputs[0], root_build_dir),
    ]
  }
}

group("flutter") {
  testonly = true

  # Compile the engine.
  public_deps = [
    ":unittests",
    "//flutter/shell/platform/embedder:flutter_engine",
    "//flutter/sky",
  ]

  # Ensure the example for a sample embedder compiles.
  if (build_embedder_examples) {
    public_deps += [
      "//flutter/examples/glfw",
      "//flutter/examples/vulkan_glfw",
    ]

    if (!is_mac) {
      public_deps += [ "//flutter/examples/glfw_drm" ]
    }
  }

  # If enabled, compile the SDK / snapshot.
  if (!is_fuchsia) {
    public_deps += [ "//flutter/lib/snapshot:generate_snapshot_bins" ]

    if (build_engine_artifacts) {
      public_deps += [
        "//flutter/build/dart:dart_sdk",
        "//flutter/flutter_frontend_server:frontend_server",

        # This must be listed explicitly for desktop cross-builds since
        # //flutter/lib/snapshot:generate_snapshot_bin will only build
        # gen_snapshot for the host and not the target.
        "//third_party/dart/runtime/bin:gen_snapshot",

        # Impeller artifacts - compiler and libtessellator
        "//flutter/impeller/compiler:impellerc",
        "//flutter/impeller/tessellator:tessellator_shared",

        # path_ops
        "//flutter/tools/path_ops",
      ]

      if (host_os == "linux") {
        public_deps += [
          # Built alongside gen_snapshot for 64 bit targets
          "//third_party/dart/runtime/bin:analyze_snapshot",
        ]
      }

      if (full_dart_sdk) {
        public_deps += [ "//flutter/web_sdk" ]
      }
    }
  }

  if (build_engine_artifacts) {
    public_deps += [
      "//flutter/shell/testing",
      "//flutter/tools/const_finder",
      "//flutter/tools/font-subset",
    ]
  }

  # Compile all benchmark targets if enabled.
  if (enable_unittests && !is_win && !is_fuchsia) {
    public_deps += [
      "//flutter/display_list:display_list_benchmarks",
      "//flutter/display_list:display_list_builder_benchmarks",
      "//flutter/fml:fml_benchmarks",
      "//flutter/impeller/geometry:geometry_benchmarks",
      "//flutter/lib/ui:ui_benchmarks",
      "//flutter/shell/common:shell_benchmarks",
      "//flutter/third_party/txt:txt_benchmarks",
    ]
  }

  if ((flutter_runtime_mode == "debug" || flutter_runtime_mode == "profile") &&
      (is_ios || is_android)) {
    public_deps += [ "//flutter/testing/scenario_app" ]
  }

  if (is_android && flutter_runtime_mode == "profile" &&
      current_cpu == "arm64") {
    public_deps += [ "//flutter/testing/android_background_image" ]
  }
}

group("unittests") {
  testonly = true

  public_deps = []
  if (is_android) {
    public_deps +=
        [ "//flutter/shell/platform/android:flutter_shell_native_unittests" ]
  }

  # Compile all unittests targets if enabled.
  if (enable_unittests) {
    public_deps += [
      "//flutter/display_list:display_list_rendertests",
      "//flutter/display_list:display_list_unittests",
      "//flutter/flow:flow_unittests",
      "//flutter/fml:fml_unittests",
      "//flutter/lib/ui:ui_unittests",
      "//flutter/runtime:dart_plugin_registrant_unittests",
      "//flutter/runtime:no_dart_plugin_registrant_unittests",
      "//flutter/runtime:runtime_unittests",
      "//flutter/shell/common:shell_unittests",
      "//flutter/shell/platform/embedder:embedder_a11y_unittests",
      "//flutter/shell/platform/embedder:embedder_proctable_unittests",
      "//flutter/shell/platform/embedder:embedder_unittests",
      "//flutter/testing:testing_unittests",
      "//flutter/testing/dart",
      "//flutter/testing/smoke_test_failure",
      "//flutter/third_party/tonic/tests:tonic_unittests",
      "//flutter/third_party/txt:txt_unittests",
    ]

    # The accessibility library only supports Mac and Windows at the moment.
    if (is_mac || is_win) {
      public_deps +=
          [ "//flutter/third_party/accessibility:accessibility_unittests" ]
    }

    if (is_fuchsia) {
      public_deps += [ "//flutter/shell/platform/fuchsia:tests" ]
    }

    if (is_mac || is_linux || is_win) {
      public_deps += [ "//flutter/impeller:impeller_unittests" ]
    }

    if (is_mac) {
      public_deps += [
        "//flutter/impeller/golden_tests:impeller_golden_tests",
        "//flutter/shell/platform/darwin:flutter_channels_unittests",
        "//flutter/third_party/spring_animation:spring_animation_unittests",
      ]
    }

    if (!is_win && !is_fuchsia) {
      public_deps += [
        "//flutter/shell/platform/android/external_view_embedder:android_external_view_embedder_unittests",
        "//flutter/shell/platform/android/jni:jni_unittests",
        "//flutter/shell/platform/android/platform_view_android_delegate:platform_view_android_delegate_unittests",
      ]
    }

    # Unit tests for desktop embeddings should only be built if the desktop
    # embeddings are being built.
    if (enable_desktop_embeddings) {
      public_deps += [
        "//flutter/shell/platform/common:common_cpp_core_unittests",
        "//flutter/shell/platform/common/client_wrapper:client_wrapper_unittests",
      ]

      if (!is_fuchsia) {
        # These tests require the embedder and thus cannot run on fuchsia.
        # TODO(): Enable when embedder works on fuchsia.
        public_deps +=
            [ "//flutter/shell/platform/common:common_cpp_unittests" ]

        # These tests require GLFW and thus cannot run on fuchsia.
        public_deps += [ "//flutter/shell/platform/glfw/client_wrapper:client_wrapper_glfw_unittests" ]
      }

      if (is_linux) {
        public_deps +=
            [ "//flutter/shell/platform/linux:flutter_linux_unittests" ]
        if (build_glfw_shell) {
          public_deps +=
              [ "//flutter/shell/platform/glfw:flutter_glfw_unittests" ]
        }
      }

      if (is_mac) {
        public_deps += [ "//flutter/shell/platform/darwin/macos:flutter_desktop_darwin_unittests" ]
      }

      if (is_win) {
        public_deps += [
          "//flutter/shell/platform/windows:flutter_windows_unittests",
          "//flutter/shell/platform/windows/client_wrapper:client_wrapper_windows_unittests",
        ]
      }
    }
  }
}

if (build_engine_artifacts) {
  group("archives") {
    testonly = true

    deps = [ "//flutter/build/archives:artifacts" ]
  }
}

group("dist") {
  testonly = true

  deps = [ "//flutter/sky/dist" ]
}

if (is_fuchsia && enable_unittests) {
  group("fuchsia_tests") {
    testonly = true

    deps = [ "//flutter/shell/platform/fuchsia:tests" ]
  }
}

# On Windows, when targeting Android, we only build gen_snapshot. This
# top-level target provides a convenient shorthand for the full path into the
# Dart tree, and is less ambiguous than specifying the binary to build since
# we can specify the toolchain to use, too.
if (host_os == "win") {
  _gen_snapshot_target =
      "//third_party/dart/runtime/bin:gen_snapshot($host_toolchain)"
  copy("gen_snapshot") {
    deps = [ _gen_snapshot_target ]

    gen_snapshot_out_dir = get_label_info(_gen_snapshot_target, "root_out_dir")
    sources = [ "$gen_snapshot_out_dir/gen_snapshot.exe" ]
    outputs = [ "$root_build_dir/gen_snapshot/gen_snapshot.exe" ]
  }
}
