# Copyright 2014 The Chromium 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/module_args/mojo.gni")
import("//mojo/public/mojo.gni")

declare_args() {
  mojo_use_go = false

  # TODO(ncbray): support ASAN once NaCl's GN build is unforked.
  mojo_use_nacl = is_linux && !is_asan
  mojo_use_nacl_nonsfi = (is_linux || is_android) && !is_asan
}

group("mojo") {
  # Meta-target, don't link into production code.
  testonly = true
  deps = [
    ":system_thunks",
    ":tests",
    "//mojo/common",
    "//mojo/dart",
    "//mojo/public",
    "//mojo/services",
  ]

  if (is_android) {
    deps += [
      "//mojo/android",
      "//mojo/java",
      "//mojo/tools:remote_file_reader",
    ]
  }

  if (is_linux && mojo_use_go) {
    deps += [ "//mojo/go" ]
  }

  if (is_linux && !is_fnl) {
    deps += [ "//mojo/python" ]
  }

  if (mojo_use_nacl) {
    deps += [
      "//mojo/nacl/sfi:mojo_nacl",
      "//mojo/nacl/sfi:mojo_nacl_tests",
    ]
  }

  if (mojo_use_nacl_nonsfi) {
    deps += [
      "//mojo/nacl/nonsfi:mojo_nacl_nonsfi",
      "//mojo/nacl/nonsfi:mojo_nacl_tests_nonsfi",
    ]
  }
}

group("tests") {
  testonly = true
  deps = [
    "//mojo/common:mojo_common_unittests",
    "//mojo/edk/system:tests",
    "//mojo/edk/test:public_tests",
    "//mojo/dart/embedder/test:dart_unittests",
    "//mojo/public/cpp/bindings/tests:versioning_apptests",
    "//mojo/services/view_manager/cpp/tests:mojo_view_manager_lib_unittests",
    "//mojo/tests:mojo_task_tracker_perftests",
    "//mojo/tools:message_generator",
    "//mojo/gles2:mgl_unittests",
    "//mojo/gpu:apptests",
    "//mojo/services/files/c:apptests",
    "//mojo/services/files/cpp:files_impl_apptests",
  ]

  if (is_linux || is_android) {
    deps += [ "//mojo/converters/surfaces/tests:mojo_surfaces_lib_unittests" ]
  }

  if (mojo_use_prebuilt_network_service) {
    deps += [ "//mojo/public/tools:copy_network_service_apptests" ]
  }
}

# This archives the system thunks implementation for exporting to SDK consumers.
static_library("system_thunks") {
  complete_static_lib = true
  deps = [
    "//mojo/public/platform/native:system",
  ]
}
