# 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_arch_riscv32") {
  defines = [ "TARGET_ARCH_RISCV32" ]
}

config("define_target_arch_riscv64") {
  defines = [ "TARGET_ARCH_RISCV64" ]
}

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",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_riscv32_linux") {
  extra_configs = [
    ":define_target_arch_riscv32",
    ":define_target_os_linux",
  ]
}

build_run_ffi_unit_tests("run_ffi_unit_tests_riscv64_linux") {
  extra_configs = [
    ":define_target_arch_riscv64",
    ":define_target_os_linux",
  ]
}

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_riscv32_linux",
    ":run_ffi_unit_tests_riscv64_linux",
    ":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",
  ]
}
