# Copyright 2018 The Fuchsia 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/board.gni")

declare_args() {
  # Whether to include tests that are known to fail on NUC with ASan.
  # Should be set to false in the infra builders that have board == "x64" and
  # "asan" in variants.
  include_tests_that_fail_on_nuc_asan = true
}

### Individual test environments ###

qemu_env = {
  dimensions = {
    device_type = "QEMU"
  }
}

astro_env = {
  dimensions = {
    device_type = "Astro"
  }
}

sherlock_env = {
  dimensions = {
    device_type = "Sherlock"
  }
}

nelson_env = {
  dimensions = {
    device_type = "Nelson"
  }
}

nuc_env = {
  dimensions = {
    device_type = "Intel NUC Kit NUC7i5DNHE"
  }
}

vim2_env = {
  dimensions = {
    device_type = "Khadas Vim2 Max"
  }
}

linux_env = {
  dimensions = {
    os = "Linux"
    cpu = current_cpu
  }
}

mac_env = {
  dimensions = {
    os = "Mac"
    cpu = current_cpu
  }

  # When running tests for a mac build, we only wish to run mac tests; we attach
  # the "mac" tag in that case to filter out other tests.
  tags = [ "mac" ]
}

if (host_os == "linux") {
  host_env = linux_env
} else if (host_os == "mac") {
  host_env = mac_env
}

### Select environment lists ###

# Tests that fail on a NUC in ASan but otherwise want to run on a NUC should
# use this.
nuc_env_fails_on_asan = []
if (include_tests_that_fail_on_nuc_asan) {
  nuc_env_fails_on_asan += [ nuc_env ]
}

# The basic, freely usable test environments supported by the infrastructure.
basic_envs = []
if (board_name == "x64") {
  basic_envs += [
    qemu_env,
    nuc_env,
  ]
} else if (board_name == "qemu-arm64" || board_name == "qemu-x64") {
  basic_envs += [ qemu_env ]
}
