# Copyright (c) 2016, 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/config/gclient_args.gni")
import("sdk_args.gni")

targeting_fuchsia = target_os == "fuchsia"

# This target will be built if no target is specified when invoking ninja.
group("default") {
  if (targeting_fuchsia) {
    # Fuchsia has run_vm_tests marked testonly.
    testonly = true
  }
  deps = [ ":runtime" ]
}

group("most") {
  import("runtime/runtime_args.gni")
  if (targeting_fuchsia) {
    # Fuchsia has run_vm_tests marked testonly.
    testonly = true
  }
  deps = [
    ":analysis_server",
    ":create_sdk",
    ":dart2js",
    ":dartanalyzer",
    ":ddc",
    ":runtime",
  ]
}

group("runtime") {
  import("runtime/runtime_args.gni")

  if (targeting_fuchsia) {
    # Fuchsia has run_vm_tests marked testonly.
    testonly = true
  }

  deps = [
    "runtime/bin:dart",
    "runtime/bin:ffi_test_dynamic_library",
    "runtime/bin:ffi_test_functions",
    "runtime/bin:process_test",
    "runtime/bin:run_vm_tests",
    "runtime/vm:kernel_platform_files($host_toolchain)",
    "samples/embedder:kernel",
    "samples/ffi/http:fake_http",
    "samples/ffi/httpIG:fake_httpIG",
    "utils/dartdev:dartdev",
    "utils/kernel-service:kernel-service",
  ]

  # The following dependencies allow dartdev to start the resident frontend
  # server and DDS.
  if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
    deps += [
      "runtime/bin:dartaotruntime",
      "runtime/bin:dartaotruntime_product",
      "utils/dds:dds_aot",
      "utils/kernel-service:frontend_server_aot_product",
    ]
  } else {
    deps += [
      "utils/dds:dds",
      "utils/kernel-service:frontend_server",
    ]
  }

  # AOT samples use dlopen to load AOT snapshots and it works only on
  # 64-bit Linux right now.
  if ((is_linux || is_mac) &&
      (dart_target_arch == "x64" || dart_target_arch == "arm64")) {
    deps += [ "samples/embedder:aot" ]
  }

  if (!is_win) {
    # The test isn't run on windows
    deps += [ "runtime/bin:entrypoints_verification_test" ]
  }

  # This flag is set in runtime/runtime_args.gni
  # The analyze_snapshot tool is only supported on 64 bit AOT builds running
  # under linux and android platforms
  if (build_analyze_snapshot) {
    deps += [
      # The `analyze_snapshot` tests require the `analyze_snapshot` as well as
      # `gen_snapshot` binaries.
      "runtime/bin:analyze_snapshot",
      "runtime/bin:analyze_snapshot($host_toolchain)",
      "runtime/bin:gen_snapshot",
      "runtime/bin:gen_snapshot($host_toolchain)",
    ]
  }

  if (is_linux || is_android) {
    deps += [ "runtime/bin:abstract_socket_test" ]
  } else if (is_fuchsia) {
    deps += [ ":fuchsia_test_package" ]
  }
}

# A separate target and not included in group("runtime"). This way the target\
# "runtime" does not get many executables extra as build output.
group("run_ffi_unit_tests") {
  deps = [ "runtime/bin/ffi_unit_test:run_ffi_unit_tests" ]
}

group("runtime_precompiled") {
  import("runtime/runtime_args.gni")
  deps = [
    "runtime/bin:dartaotruntime",
    "runtime/bin:gen_snapshot",
    "runtime/bin:gen_snapshot($host_toolchain)",
    "runtime/bin:process_test",
    "runtime/vm:kernel_platform_files($host_toolchain)",
  ]
  if (is_linux || is_android) {
    deps += [ "runtime/bin:abstract_socket_test" ]
  }
  if (dart_dynamic_modules) {
    deps += [ "utils/dart2bytecode:dart2bytecode_snapshot" ]
    deps += [ "utils/dynamic_module_runner:dynamic_module_runner_snapshot" ]
  }
}

group("create_sdk") {
  public_deps = [ "sdk:create_sdk" ]
}

group("create_platform_sdk") {
  public_deps = [ "sdk:create_platform_sdk" ]
}

group("dart2js") {
  import("runtime/runtime_args.gni")
  if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
    deps = [
      ":runtime_precompiled",
      "utils/compiler:dart2js_sdk_aot",
    ]
  } else {
    deps = [ "utils/compiler:dart2js" ]
  }
}

group("dart2wasm_platform") {
  deps = [
    ":runtime_precompiled",
    "utils/dart2wasm:compile_dart2wasm_js_compatibility_platform",
    "utils/dart2wasm:compile_dart2wasm_platform",
    "utils/dart2wasm:dart2wasm_snapshot",
  ]
  if (defined(is_product)) {
    if (is_product) {
      deps += [ "utils/dart2wasm:dart2wasm_product_snapshot" ]
    } else {
      deps += [ "utils/dart2wasm:dart2wasm_asserts_snapshot" ]
    }
  }
}

group("dart2wasm") {
  deps = [
    ":dart2wasm_platform",
    "utils/dart2wasm:test_wasm_modules",
  ]
}

group("dart2wasm_benchmark") {
  deps = [
    ":dart2wasm_platform",
    "third_party/binaryen:wasm-opt",
  ]
}

group("dartanalyzer") {
  deps = [ "utils/dartanalyzer" ]
}

group("ddc") {
  import("runtime/runtime_args.gni")
  if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
    deps = [
      ":runtime_precompiled",
      "utils/bazel:kernel_worker_aot",
      "utils/ddc:dartdevc_aot",
    ]
  } else {
    deps = [
      "utils/bazel:kernel_worker",
      "utils/ddc:dartdevc",
    ]
  }
}

group("analysis_server") {
  deps = [ "utils/analysis_server" ]
}

group("tools") {
  deps = [
    "utils:compile_platform.exe",
    "utils:gen_kernel.exe",
  ]
}

# This is the target that is built on the dart2js build bots.
# It must depend on anything that is required by the dart2js
# test suites.
group("dart2js_bot") {
  deps = [
    ":create_sdk",
    "utils/compiler:compile_dart2js_platform",
  ]
}

# This rule and the compressed_observatory_archive rule are for the Fuchsia
# bots that pre-build the Observatory. They copy the observatory tar files to
# the root build output directory for convenient access by the Fuchsia buildbot
# scripts.
group("observatory_archive") {
  deps = [ "runtime/observatory:copy_observatory_archive" ]
}

group("compressed_observatory_archive") {
  deps = [ "runtime/observatory:copy_compressed_observatory_archive" ]
}

if (is_fuchsia) {
  import("third_party/fuchsia/gn-sdk/src/component.gni")
  import("third_party/fuchsia/gn-sdk/src/package.gni")
  import("utils/aot_snapshot.gni")
  import("utils/application_snapshot.gni")

  # TODO(b/399714829): Test packages should be created at test-time, not build-time.

  # tests/ffi/**_test.dart except those with compile-time errors
  test_sources = [
    "tests/ffi/abi_specific_int_test.dart",
    "tests/ffi/abi_test.dart",
    "tests/ffi/address_of_array_generated_test.dart",
    "tests/ffi/address_of_cast_test.dart",
    "tests/ffi/address_of_struct_generated_test.dart",
    "tests/ffi/address_of_test.dart",
    "tests/ffi/address_of_typeddata_generated_test.dart",
    "tests/ffi/aliasing_test.dart",
    "tests/ffi/allocator_test.dart",
    "tests/ffi/array_compound_elements_test.dart",
    "tests/ffi/array_primitive_elements_generated_test.dart",
    "tests/ffi/async_void_function_callbacks_test.dart",
    "tests/ffi/bool_test.dart",
    "tests/ffi/c_types_test.dart",
    "tests/ffi/callback_unwind_error_test.dart",
    "tests/ffi/calloc_test.dart",
    "tests/ffi/data_not_asan_test.dart",
    "tests/ffi/data_test.dart",
    "tests/ffi/deeply_immutable_c_api_finalizer_test.dart",
    "tests/ffi/dl_api_exit_enter_isolate_test.dart",
    "tests/ffi/dylib_close_test.dart",
    "tests/ffi/dylib_isolates_test.dart",
    "tests/ffi/dylib_open_test.dart",
    "tests/ffi/expando_test.dart",
    "tests/ffi/extension_methods_test.dart",
    "tests/ffi/external_typed_data_finalizer_test.dart",
    "tests/ffi/external_typed_data_test.dart",
    "tests/ffi/ffi_callback_unique_test.dart",
    "tests/ffi/ffi_induce_a_crash_test.dart",
    "tests/ffi/ffi_native_test.dart",
    "tests/ffi/finalizer_external_size_accounting_test.dart",
    "tests/ffi/function_callbacks_many_test.dart",
    "tests/ffi/function_callbacks_structs_by_value_generated_test.dart",
    "tests/ffi/function_callbacks_structs_by_value_native_callable_generated_test.dart",
    "tests/ffi/function_callbacks_structs_by_value_test.dart",
    "tests/ffi/function_callbacks_subtype_test.dart",
    "tests/ffi/function_callbacks_test.dart",
    "tests/ffi/function_callbacks_varargs_generated_test.dart",
    "tests/ffi/function_callbacks_varargs_native_callable_generated_test.dart",
    "tests/ffi/function_callbacks_very_many_test.dart",
    "tests/ffi/function_struct_by_value_out_of_bounds_test.dart",
    "tests/ffi/function_structs_by_value_generated_args_leaf_test.dart",
    "tests/ffi/function_structs_by_value_generated_args_native_leaf_test.dart",
    "tests/ffi/function_structs_by_value_generated_args_native_test.dart",
    "tests/ffi/function_structs_by_value_generated_args_test.dart",
    "tests/ffi/function_structs_by_value_generated_compounds_sizeof_test.dart",
    "tests/ffi/function_structs_by_value_generated_ret_arg_leaf_test.dart",
    "tests/ffi/function_structs_by_value_generated_ret_arg_native_leaf_test.dart",
    "tests/ffi/function_structs_by_value_generated_ret_arg_native_test.dart",
    "tests/ffi/function_structs_by_value_generated_ret_arg_test.dart",
    "tests/ffi/function_structs_by_value_generated_ret_leaf_test.dart",
    "tests/ffi/function_structs_by_value_generated_ret_native_leaf_test.dart",
    "tests/ffi/function_structs_by_value_generated_ret_native_test.dart",
    "tests/ffi/function_structs_by_value_generated_ret_test.dart",
    "tests/ffi/function_structs_test.dart",
    "tests/ffi/function_test.dart",
    "tests/ffi/function_varargs_generated_leaf_test.dart",
    "tests/ffi/function_varargs_generated_native_leaf_test.dart",
    "tests/ffi/function_varargs_generated_native_test.dart",
    "tests/ffi/function_varargs_generated_test.dart",
    "tests/ffi/function_varargs_name_test.dart",
    "tests/ffi/function_varargs_test.dart",
    "tests/ffi/function_very_many_test.dart",
    "tests/ffi/hardfp_test.dart",
    "tests/ffi/has_symbol_test.dart",
    "tests/ffi/inline_array_multi_dimensional_test.dart",
    "tests/ffi/inline_array_test.dart",
    "tests/ffi/inline_array_variable_length_test.dart",
    "tests/ffi/invoke_callback_after_suspension_test.dart",
    "tests/ffi/isolate_local_function_callbacks_test.dart",
    "tests/ffi/msan_test.dart",
    "tests/ffi/native_assets/asset_absolute_test.dart",
    "tests/ffi/native_assets/asset_executable_test.dart",
    "tests/ffi/native_assets/asset_library_annotation_test.dart",
    "tests/ffi/native_assets/asset_process_test.dart",
    "tests/ffi/native_assets/asset_relative_test.dart",
    "tests/ffi/native_assets/asset_system_test.dart",
    "tests/ffi/native_assets/infer_native_assets_yaml_dart_kernel_snapshot_test.dart",
    "tests/ffi/native_assets/infer_native_assets_yaml_isolate_spawnuri_2_test.dart",
    "tests/ffi/native_assets/infer_native_assets_yaml_isolate_spawnuri_3_test.dart",
    "tests/ffi/native_assets/infer_native_assets_yaml_isolate_spawnuri_test.dart",
    "tests/ffi/native_assets/infer_native_assets_yaml_process_run_test.dart",
    "tests/ffi/native_assets/process_test.dart",
    "tests/ffi/native_callables_async_structs_by_value_generated_test.dart",
    "tests/ffi/native_callables_sync_structs_by_value_generated_test.dart",
    "tests/ffi/native_effect_test.dart",
    "tests/ffi/negative_function_test.dart",
    "tests/ffi/pointer_arithmetic_operators_test.dart",
    "tests/ffi/regress_37254_test.dart",
    "tests/ffi/regress_39044_test.dart",
    "tests/ffi/regress_39063_test.dart",
    "tests/ffi/regress_39885_test.dart",
    "tests/ffi/regress_40537_test.dart",
    "tests/ffi/regress_43016_test.dart",
    "tests/ffi/regress_43693_test.dart",
    "tests/ffi/regress_45189_test.dart",
    "tests/ffi/regress_45198_test.dart",
    "tests/ffi/regress_45507_test.dart",
    "tests/ffi/regress_45988_test.dart",
    "tests/ffi/regress_46004_test.dart",
    "tests/ffi/regress_46127_test.dart",
    "tests/ffi/regress_47594_test.dart",
    "tests/ffi/regress_47673_test.dart",
    "tests/ffi/regress_49402_test.dart",
    "tests/ffi/regress_49684_test.dart",
    "tests/ffi/regress_51315_test.dart",
    "tests/ffi/regress_51321_test.dart",
    "tests/ffi/regress_51504_test.dart",
    "tests/ffi/regress_51538_2_test.dart",
    "tests/ffi/regress_51538_3_test.dart",
    "tests/ffi/regress_51538_test.dart",
    "tests/ffi/regress_52298_test.dart",
    "tests/ffi/regress_52399_test.dart",
    "tests/ffi/regress_56412_2_test.dart",
    "tests/ffi/regress_56412_test.dart",
    "tests/ffi/regress_b_261224444_test.dart",
    "tests/ffi/regress_flutter79441_test.dart",
    "tests/ffi/regress_flutter97301_test.dart",
    "tests/ffi/regress_jump_to_frame_test.dart",
    "tests/ffi/sizeof_test.dart",
    "tests/ffi/snapshot_test.dart",
    "tests/ffi/stacktrace_regress_37910_test.dart",
    "tests/ffi/structs_nested_test.dart",
    "tests/ffi/structs_nnbd_workaround_test.dart",
    "tests/ffi/structs_packed_test.dart",
    "tests/ffi/structs_test.dart",
    "tests/ffi/structs_typed_data_test.dart",
    "tests/ffi/unaligned_test.dart",
    "tests/ffi/variance_function_test.dart",
    "tests/ffi/vmspecific_callback_unwind_error_through_handle_test.dart",
    "tests/ffi/vmspecific_deprecated_funcs_test.dart",
    "tests/ffi/vmspecific_dynamic_library_test.dart",
    "tests/ffi/vmspecific_enable_ffi_test.dart",
    "tests/ffi/vmspecific_ffi_native_handles_test.dart",
    "tests/ffi/vmspecific_ffi_native_test.dart",
    "tests/ffi/vmspecific_function_callbacks_exit_test.dart",
    "tests/ffi/vmspecific_function_callbacks_test.dart",
    "tests/ffi/vmspecific_function_gc_test.dart",
    "tests/ffi/vmspecific_function_test.dart",
    "tests/ffi/vmspecific_handle_dynamically_linked_test.dart",
    "tests/ffi/vmspecific_handle_test.dart",
    "tests/ffi/vmspecific_highmem_32bit_test.dart",
    "tests/ffi/vmspecific_leaf_call_test.dart",
    "tests/ffi/vmspecific_native_finalizer_2_test.dart",
    "tests/ffi/vmspecific_native_finalizer_deeply_immutable_test.dart",
    "tests/ffi/vmspecific_native_finalizer_isolate_groups_test.dart",
    "tests/ffi/vmspecific_native_finalizer_isolates_test.dart",
    "tests/ffi/vmspecific_native_finalizer_test.dart",
    "tests/ffi/vmspecific_object_gc_test.dart",
    "tests/ffi/vmspecific_pointer_load_il_test.dart",
    "tests/ffi/vmspecific_regress_37100_test.dart",
    "tests/ffi/vmspecific_regress_37511_callbacks_test.dart",
    "tests/ffi/vmspecific_regress_37511_test.dart",
    "tests/ffi/vmspecific_regress_37780_test.dart",
    "tests/ffi/vmspecific_regress_51794_test.dart",
    "tests/ffi/vmspecific_send_port_id_test.dart",
  ]

  test_deps = []
  test_resources = []
  foreach(test_source, test_sources) {
    label = string_replace(test_source, "/", "_")
    aot_label = label + "_aot"

    application_snapshot(label) {
      dart_snapshot_kind = "kernel"
      main_dart = test_source
      training_args = []  # Not used
      output = "$target_gen_dir/$test_source.dill"
    }
    aot_snapshot(aot_label) {
      main_dart = test_source
      output = "$target_gen_dir/$test_source.elf"
    }

    test_deps += [
      ":$aot_label",
      ":$label",
    ]
    test_resources += [
      {
        path = rebase_path("$target_gen_dir/$test_source.dill")
        dest = "data/$test_source"
      },
      {
        path = rebase_path("$target_gen_dir/$test_source.elf")
        dest = "data/$test_source.elf"
      },
    ]
  }

  test_binaries = [
    "dart",
    "dartaotruntime",
    "run_vm_tests",
  ]

  foreach(binary, test_binaries) {
    fuchsia_component("${binary}_test_component") {
      testonly = true
      manifest = "runtime/bin/${binary}_test_component.cml"
      data_deps = [
        "runtime/bin:${binary}",
        "runtime/bin:ffi_test_dynamic_library",
        "runtime/bin:ffi_test_functions",
      ]
      library_files = [
        "libffi_test_dynamic_library.so",
        "libffi_test_functions.so",
      ]
      resource_files = [
        ".dart_tool/package_config.json",
        "tools/addlatexhash.dart",
      ]
      resources = []
      foreach(file, library_files) {
        resources += [
          {
            path = root_out_dir + "/" + file
            dest = "lib/" + file
          },
        ]
      }
      foreach(file, resource_files) {
        resources += [
          {
            path = file
            dest = "data/" + file
          },
        ]
      }
      deps = test_deps
      resources += test_resources
    }
  }

  fuchsia_package("fuchsia_test_package") {
    testonly = true
    if (is_debug) {
      package_name = "dart_test_debug"
    } else if (is_release) {
      package_name = "dart_test_release"
    } else if (is_product) {
      package_name = "dart_test_product"
    }
    deps = []
    foreach(binary, test_binaries) {
      deps += [ ":${binary}_test_component" ]
    }
  }
}

if (is_linux) {
  group("debian_package") {
    public_deps = [ "tools/debian_package" ]
  }
}
