# 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() {
  # The list of environment names to include in "basic_envs".
  basic_env_names = [ "emu" ]
}

_all_named_fuchsia_envs = []
_all_named_host_envs = []

### Individual test environments
# Please keep alphabetized.

aemu_env = {
  dimensions = {
    device_type = "AEMU"
  }
}
_all_named_fuchsia_envs += [
  {
    name = "aemu"
    env = aemu_env
  },
]

astro_env = {
  dimensions = {
    device_type = "Astro"
  }
}
_all_named_fuchsia_envs += [
  {
    name = "astro"
    env = astro_env
  },
]

linux_env = {
  dimensions = {
    os = "Linux"
    cpu = current_cpu
  }
}
_all_named_host_envs += [
  {
    name = "linux"
    env = linux_env
  },
]

luis_env = {
  dimensions = {
    device_type = "Luis"
  }
}
_all_named_fuchsia_envs += [
  {
    name = "luis"
    env = luis_env
  },
]

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" ]
}
_all_named_host_envs += [
  {
    name = "mac"
    env = mac_env
  },
]

nelson_env = {
  dimensions = {
    device_type = "Nelson"
  }
}
_all_named_fuchsia_envs += [
  {
    name = "nelson"
    env = nelson_env
  },
]

nuc_env = {
  dimensions = {
    device_type = "Intel NUC Kit NUC7i5DNHE"
  }
}
_all_named_fuchsia_envs += [
  {
    name = "nuc"
    env = nuc_env
  },
]

qemu_env = {
  dimensions = {
    device_type = "QEMU"
  }
}
_all_named_fuchsia_envs += [
  {
    name = "qemu"
    env = qemu_env
  },
]

sherlock_env = {
  dimensions = {
    device_type = "Sherlock"
  }
}
_all_named_fuchsia_envs += [
  {
    name = "sherlock"
    env = sherlock_env
  },
]

vim3_env = {
  dimensions = {
    device_type = "Vim3"
  }
}
_all_named_fuchsia_envs += [
  {
    name = "vim3"
    env = vim3_env
  },
]

gce_env = {
  dimensions = {
    device_type = "GCE"
  }
}
_all_named_fuchsia_envs += [
  {
    name = "gce"
    env = gce_env
  },
]

atlas_env = {
  dimensions = {
    device_type = "Atlas"
  }
}
_all_named_fuchsia_envs += [
  {
    name = "atlas"
    env = atlas_env
  },
]

### END Individual test environments

### Aliases ###

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

# Allow selection of AEMU as the default EMU.
emu_env = qemu_env
if (target_cpu == "x64") {
  emu_env = {
  }
  emu_env = aemu_env
}
_all_named_fuchsia_envs += [
  {
    name = "emu"
    env = emu_env
  },
]

with_display_envs = [
  aemu_env,
  astro_env,
  atlas_env,
  luis_env,
  nelson_env,
  nuc_env,
  sherlock_env,
  vim3_env,
]

chromebook_envs = [ atlas_env ]

### Select environment lists ###

all_fuchsia_envs = []
foreach(named_env, _all_named_fuchsia_envs) {
  all_fuchsia_envs += [ named_env.env ]
}

# TODO(https://fxbug.dev/80243): allow these tests to run on emulators.
#
# On ARM nested virtualization is unsupported before ARMv8.2. None of our
# testbeds are ARM8.2 or above.
#
# On x64 doing so today would involve 3 levels of virtualization:
#
# 1. GCE virtualizes Linux (as part of its standard ops)
# 2. Linux virtualizes Zircon (QEMU/KVM)
# 3. Zircon virtualizes guest Zircon/Linux (Machina)
guest_envs = all_fuchsia_envs - [
               aemu_env,
               qemu_env,

               # TODO(https://fxbug.dev/86601): GCE theoretically supports
               # virtualization, but it currently fails on Fuchsia.
               gce_env,
             ]

basic_envs = []
foreach(name, basic_env_names) {
  foreach(named_env, _all_named_fuchsia_envs + _all_named_host_envs) {
    if (name == named_env.name) {
      basic_envs += [ named_env.env ]
    }
  }
}
