# Copyright 2016 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("//packages/package.gni")

executable("tests") {
  output_name = "libc-tests"
  testonly = true
  sources = [
    "main.cc",
  ]
  deps = [
    "//third_party/gtest",
    "//third_party/libc-tests/third_party/nacl-ported-tests/abi:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/bigalloc:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/dup:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/dynamic_linking:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/libc:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/longjmp:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/math:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/nanosleep:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/pwrite:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/redir:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/sleep:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/stdargs:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/syscalls:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/threads:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/tls:small_tests",
  ]
}

executable("libc-tests-broken") {
  testonly = true
  sources = [
    "main.cc",
  ]
  deps = [
    "//third_party/gtest",
    "//third_party/libc-tests/third_party/nacl-ported-tests/fdopen_test:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/file:small_tests",
    "//third_party/libc-tests/third_party/nacl-ported-tests/libc:small_tests_broken",
    "//third_party/libc-tests/third_party/nacl-ported-tests/syscalls:small_tests_broken",
    "//third_party/libc-tests/third_party/nacl-ported-tests/threads:large_tests_broken",
    "//third_party/libc-tests/third_party/nacl-ported-tests/threads:small_tests_broken",
  ]
}

executable("libc-large-tests") {
  testonly = true
  sources = [
    "main.cc",
  ]
  deps = [
    "//third_party/gtest",
    "//third_party/libc-tests/third_party/nacl-ported-tests/libc:large_tests",
  ]
}

package("libc-tests") {
  testonly = true
  system_image = true

  deps = [
    ":libc-large-tests",
    ":libc-tests-broken",
    ":tests",
  ]

  tests = [
    {
      name = "libc-tests"
    },

    {
      name = "libc-large-tests"
    },
  ]

  binaries = [ {
        name = "libc-tests-broken"
      } ]

  resources = [ {
        path = rebase_path(
                "third_party/nacl-ported-tests/fdopen_test/fdopen_testdata")
        dest = "testdata/fdopen_testdata"
      } ]
}
