# Copyright 2024 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("//src/starnix/build/starnix_linux_executable.gni")
import("//src/starnix/tests/environments.gni")

# Bug in clang stops static linking without glibc 2.34
starnix_linux_arch32_executable("bin32") {
  output_name = "hello_debian32_cpp"
  sources = [ "hello_debian.cc" ]
  cflags = [ "-g" ]

  disable_syslog_backend = true
}

starnix_linux_executable("bin") {
  output_name = "hello_debian_cpp"
  sources = [ "hello_debian.cc" ]

  disable_syslog_backend = true
}

fuchsia_component("hello_debian_cpp") {
  manifest = "meta/hello_debian_cpp.cml"
  deps = [ ":bin" ]
}

fuchsia_component("hello_debian32_cpp") {
  manifest = "meta/hello_debian32_cpp.cml"
  deps = [ ":bin32" ]
}

fuchsia_package("hello_debian_cpp_package") {
  package_name = "hello_debian_cpp"
  deps = [ ":hello_debian_cpp" ]
}

fuchsia_package("hello_debian32_cpp_package") {
  package_name = "hello_debian32_cpp"
  deps = [ ":hello_debian32_cpp" ]
}

fuchsia_test_component("hello_debian_cpp_integration") {
  manifest = "meta/integration_test.cml"
  deps = [ "//src/starnix/examples/hello_debian:hello_debian_verifier" ]

  test_type = "starnix"

  # TODO(https://fxbug.dev/296309679) remove once ScopedInstance can be used separately
  check_includes = false
}

fuchsia_test_package("starnix_hello_debian_cpp_integration_test") {
  test_components = [ ":hello_debian_cpp_integration" ]
  subpackages = [
    ":hello_debian_cpp_package",
    "//src/starnix/kernel:starnix_kernel_package",
    "//src/starnix/containers/debian:debian_package",
  ]
  test_specs = {
    package_resolution_timeout_secs = 660
  }
}

fuchsia_test_component("hello_debian32_cpp_integration") {
  manifest = "meta/integration_test32.cml"
  deps = [ "//src/starnix/examples/hello_debian:hello_debian_verifier" ]

  test_type = "starnix"

  # TODO(https://fxbug.dev/296309679) remove once ScopedInstance can be used separately
  check_includes = false
}

fuchsia_test_package("starnix_hello_debian32_cpp_integration_test") {
  test_components = [ ":hello_debian32_cpp_integration" ]
  subpackages = [
    ":hello_debian32_cpp_package",
    "//src/starnix/kernel:starnix_kernel_package",
    "//src/starnix/containers/debian:debian_package",
  ]
  test_specs = {
    environments = arch32_envs
    package_resolution_timeout_secs = 660
  }
}

group("tests") {
  testonly = true
  deps = [ ":starnix_hello_debian_cpp_integration_test" ]
  if (target_linux_arch32_toolchain != "") {
    deps += [ ":starnix_hello_debian32_cpp_integration_test" ]
  }
}

group("cpp") {
  deps = [ ":hello_debian_cpp_package" ]
  if (target_linux_arch32_toolchain != "") {
    deps += [ ":hello_debian32_cpp_package" ]
  }
}
