# 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")

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

  deps = [
    "//sdk/fidl/fuchsia.io:fuchsia.io_rust",
    "//sdk/fidl/fuchsia.ldsvc:fuchsia.ldsvc_rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-runtime",
    "//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:num-derive",
    "//third_party/rust_crates:num-traits",
    "//third_party/rust_crates:static_assertions",
    "//third_party/rust_crates:thiserror",
    "//third_party/rust_crates:tracing",
    "//third_party/rust_crates:zerocopy",
  ]

  test_deps = [
    ":test-util-fidl_rust",
    "//src/lib/fdio/rust:fdio",
    "//src/storage/lib/vfs/rust:vfs",
    "//third_party/rust_crates:assert_matches",
    "//third_party/rust_crates:lazy_static",
  ]

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

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

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

  sources = [ "test-utils/test_util.test.fidl" ]
}

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

  deps = [
    ":test-util-fidl_rust",
    "//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",
  ]

  sources = [ "test-utils/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(https://fxbug.dev/42138212): Support syslog backend here.
  disable_syslog_backend = true

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

  exclude_toolchain_tags = [ "instrumented" ]

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

fuchsia_unittest_package("process-builder-tests") {
  manifest = "meta/process_builder_tests.cml"
  deps = [
    ":process_builder_test",
    ":static_pie_test_util",
    ":test_util",
    "//src/sys/testing/elftest",
  ]

  # Needed for fuchsia.kernel.RootJob
  test_type = "system"
}

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