# Copyright 2019 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/components.gni")
import("//build/fidl/fidl.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")

group("tests") {
  testonly = true
  deps = [ ":process-builder-tests" ]
}

rustc_library("process_builder") {
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.ldsvc:fuchsia.ldsvc-rustc",
    "//sdk/fidl/fuchsia.process:fuchsia.process-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-runtime",
    "//src/lib/zerocopy",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:bitflags",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:num-derive",
    "//third_party/rust_crates:num-traits",
    "//third_party/rust_crates:owning_ref",
    "//third_party/rust_crates:static_assertions",
    "//third_party/rust_crates:thiserror",
  ]

  # Test-only deps. Prefer adding deps used only in tests here instead of
  # above, which has the benefit of keeping unneeded deps out of the production
  # library and allows depending on 'testonly' targets.
  test_deps = [
    ":test-util-fidl-rustc",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/storage/pseudo-fs",
    "//third_party/rust_crates:matches",
  ]

  sources = [
    "src/elf_load.rs",
    "src/elf_parse.rs",
    "src/lib.rs",
    "src/processargs.rs",
    "src/util.rs",
  ]

  inputs = [
    "test/elf_aarch64_file-header.bin",
    "test/elf_x86-64_file-header.bin",
  ]
}

rustc_binary("root_job_test_runner") {
  testonly = true
  edition = "2018"
  source_root = "root_job_test_runner/main.rs"

  deps = [
    "//garnet/lib/rust/io_util",
    "//sdk/fidl/fuchsia.kernel:fuchsia.kernel-rustc",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/testing/fidl:placeholders-rustc",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [ "root_job_test_runner/main.rs" ]
}

fidl("test-util-fidl") {
  testonly = true
  name = "test.processbuilder"

  sources = [ "test_util.test.fidl" ]
}

rustc_binary("test_util") {
  testonly = true
  name = "process_builder_test_util"
  edition = "2018"
  source_root = "test/test_util.rs"

  deps = [
    ":test-util-fidl-rustc",
    "//sdk/fidl/fuchsia.component:fuchsia.component-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-runtime",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [ "test/test_util.rs" ]
}

# This is used to test the library's handling of statically linked PIE
# executables.  Warning: Don't copy this unless you know what you're doing.
executable("static_pie_test_util") {
  testonly = true

  # TODO(fxbug.dev/60072): Support syslog backend here.
  disable_syslog_backend = true

  sources = [ "test/static_pie_test_util.c" ]
  configs += [
    "//build/config/fuchsia:no_cpp_standard_library",
    "//build/config/fuchsia:static-pie-config",
  ]

  exclude_toolchain_tags = [ "instrumented" ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

fuchsia_unittest_package("process-builder-tests") {
  manifest = "meta/process-builder-tests.cmx"
  deps = [
    ":process_builder_test",
    ":root_job_test_runner",
    ":static_pie_test_util",
    ":test_util",
  ]
}
