# 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("rules.gni")

go_library("bindings") {
  sources = [
    "//mojo/public/go/bindings/async_waiter.go",
    "//mojo/public/go/bindings/connector.go",
    "//mojo/public/go/bindings/decoder.go",
    "//mojo/public/go/bindings/encoder.go",
    "//mojo/public/go/bindings/interface.go",
    "//mojo/public/go/bindings/invalid_handle.go",
    "//mojo/public/go/bindings/message.go",
    "//mojo/public/go/bindings/router.go",
    "//mojo/public/go/bindings/stub.go",
    "//mojo/public/go/bindings/util.go",
  ]
  deps = [
    ":system",
  ]
}

go_library("system") {
  sources = [
    "//mojo/public/go/system/core.go",
    "//mojo/public/go/system/data_pipe.go",
    "//mojo/public/go/system/handle.go",
    "//mojo/public/go/system/message_pipe.go",
    "//mojo/public/go/system/mojo_types.go",
    "//mojo/public/go/system/shared_buffer.go",
    "//mojo/public/go/system/system.go",
    "//mojo/public/go/system/system_android.go",
    "//mojo/public/go/system/system_linux.go",
    "//mojo/public/go/system/system_nacl.go",
  ]
}

go_library("platform_cgo") {
  sources = [
    "//mojo/public/platform/native_cgo/system_cgo.go",
  ]
}

if (is_android) {
  group("go") {
    deps = [
      ":go_sample_app",
    ]
  }
  go_shared_library("go_sample_app") {
    sources = [
      "sample_app/app.go",
    ]
    deps = [
      ":bindings",
      ":platform_cgo",
      "//mojo/public/c/system",
      "//mojo/public/platform/native:system",
    ]
  }
} else if (is_linux) {
  group("go") {
    testonly = true
    deps = [
      ":system_test",
    ]
  }
  go_test_binary("system_test") {
    sources = [
      "tests/async_waiter_test.go",
      "tests/encoding_test.go",
      "tests/interface_test.go",
      "tests/message_test.go",
      "tests/request_response_test.go",
      "tests/router_test.go",
      "tests/system_test.go",
      "tests/testutil.go",
      "tests/testutil_test.go",
      "tests/validation_test.go",
    ]
    static_library_sources = [
      "c_embedder/c_embedder.cc",
      "c_embedder/c_embedder.h",
    ]
    deps = [
      ":bindings",
      ":platform_cgo",
      "//mojo/edk/system",
      "//mojo/public/interfaces/bindings/tests:test_interfaces",
    ]
  }
}
