# Copyright (c) 2020, 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("../../platform/platform_sources.gni")
import("../../vm/compiler/compiler_sources.gni")
import("../../vm/vm_sources.gni")

template("build_run_ffi_unit_tests") {
  extra_configs = []
  if (defined(invoker.extra_configs)) {
    extra_configs += invoker.extra_configs
  }

  executable(target_name) {
    configs += [] + extra_configs

    defines = [
      "TESTING",
      "FFI_UNIT_TESTS",
    ]

    include_dirs = [
      "../..",
      "//third_party",
    ]

    constants = rebase_path(constants_sources, ".", "../../vm")
    ffi_tests = rebase_path(ffi_sources_tests, ".", "../../vm/compiler")
    platform = rebase_path(platform_sources, ".", "../../platform")

    sources = [ "run_ffi_unit_tests.cc" ] + constants + ffi_tests + platform
  }
}

config("define_target_arch_arm") {
  defines = [ "TARGET_ARCH_ARM" ]
}

config("define_target_arch_arm64") {
  defines = [ "TARGET_ARCH_ARM64" ]
}

config("define_target_arch_ia32") {
  defines = [ "TARGET_ARCH_IA32" ]
}

config("define_target_arch_x64") {
  defines = [ "TARGET_ARCH_X64" ]
}

config("define_target_os_android") {
  defines = [ "DART_TARGET_OS_ANDROID" ]
}

config("define_target_os_ios") {
  defines = [ "DART_TARGET_OS_MACOS_IOS" ]
}

config("define_target_os_linux") {
  defines = [ "DART_TARGET_OS_LINUX" ]
}

config("define_target_os_macos") {
  defines = [ "DART_TARGET_OS_MACOS" ]
}

config("define_target_os_windows") {
  defines = [ "DART_TARGET_OS_WINDOWS" ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_arm_android") {
  extra_configs = [
    ":define_target_arch_arm",
    ":define_target_os_android",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_arm_ios") {
  extra_configs = [
    ":define_target_arch_arm",
    ":define_target_os_ios",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_arm_linux") {
  extra_configs = [
    ":define_target_arch_arm",
    ":define_target_os_linux",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_arm64_android") {
  extra_configs = [
    ":define_target_arch_arm64",
    ":define_target_os_android",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_arm64_ios") {
  extra_configs = [
    ":define_target_arch_arm64",
    ":define_target_os_ios",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_arm64_macos") {
  extra_configs = [
    ":define_target_arch_arm64",
    ":define_target_os_macos",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_arm64_linux") {
  extra_configs = [
    ":define_target_arch_arm64",
    ":define_target_os_linux",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_ia32_android") {
  extra_configs = [
    ":define_target_arch_ia32",
    ":define_target_os_android",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_ia32_linux") {
  extra_configs = [
    ":define_target_arch_ia32",
    ":define_target_os_linux",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_ia32_win") {
  extra_configs = [
    ":define_target_arch_ia32",
    ":define_target_os_windows",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_x64_ios") {
  extra_configs = [
    ":define_target_arch_x64",
    ":define_target_os_ios",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_x64_linux") {
  extra_configs = [
    ":define_target_arch_x64",
    ":define_target_os_linux",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_x64_macos") {
  extra_configs = [
    ":define_target_arch_x64",
    ":define_target_os_macos",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_x64_win") {
  extra_configs = [
    ":define_target_arch_x64",
    ":define_target_os_windows",
  ]
}

group("run_ffi_unit_tests") {
  deps = [
    ":run_ffi_unit_tests_arm64_android",
    ":run_ffi_unit_tests_arm64_ios",  # No other test coverage.
    ":run_ffi_unit_tests_arm64_linux",
    ":run_ffi_unit_tests_arm64_macos",
    ":run_ffi_unit_tests_arm_android",  # SoftFP
    ":run_ffi_unit_tests_arm_ios",  # No other test coverage.
    ":run_ffi_unit_tests_arm_linux",  # HardFP
    ":run_ffi_unit_tests_ia32_android",  # Emulator, no other test coverage.
    ":run_ffi_unit_tests_ia32_linux",
    ":run_ffi_unit_tests_ia32_win",
    ":run_ffi_unit_tests_x64_ios",  # Simulator, no other test coverage.
    ":run_ffi_unit_tests_x64_linux",
    ":run_ffi_unit_tests_x64_macos",
    ":run_ffi_unit_tests_x64_win",
  ]
}
