blob: 7062171a452261e40021522a23a38422657aca3d [file] [log] [blame]
# Copyright 2017 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/compiled_action.gni")
import("//build/components.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//build/rust/rustc_test.gni")
common_sources = [
"src/bti.rs",
"src/channel.rs",
"src/clock.rs",
"src/clock_update.rs",
"src/cprng.rs",
"src/debuglog.rs",
"src/event.rs",
"src/eventpair.rs",
"src/exception.rs",
"src/fifo.rs",
"src/guest.rs",
"src/handle.rs",
"src/info.rs",
"src/interrupt.rs",
"src/iommu.rs",
"src/job.rs",
"src/lib.rs",
"src/pager.rs",
"src/pmt.rs",
"src/port.rs",
"src/process.rs",
"src/profile.rs",
"src/property.rs",
"src/resource.rs",
"src/rights.rs",
"src/signals.rs",
"src/socket.rs",
"src/stream.rs",
"src/task.rs",
"src/thread.rs",
"src/time.rs",
"src/version.rs",
"src/vmar.rs",
"src/vmo.rs",
]
if (is_fuchsia) {
rustc_library("fuchsia-zircon") {
version = "0.3.3"
edition = "2018"
deps = [
":fuchsia-zircon-status",
":fuchsia-zircon-sys",
"//third_party/rust_crates:bitflags",
]
sources = common_sources
}
}
# Generate Zircon rust bindings using the GN version of the Kazoo tool.
# The source is still the .json file generated during the ZN build.
compiled_action("generate-rust-zircon-syscalls-definitions") {
_zx_json_target = "//zircon/vdso:zx($default_toolchain)"
# TODO(fxbug.dev/69011): output timestamp is not refreshed by tool
tool = "//zircon/tools/kazoo"
sources =
[ get_label_info(_zx_json_target, "target_gen_dir") + "/zx.fidl.json" ]
outputs = [ "$root_gen_dir/zircon/rust/syscalls/definitions.rs" ]
args = [
"--rust=" + rebase_path(outputs[0], root_build_dir),
rebase_path(sources[0], root_build_dir),
]
deps = [ _zx_json_target ]
}
rustc_library("fuchsia-cprng") {
version = "0.1.1"
edition = "2018"
with_unit_tests = true
visibility = [ ":*" ]
source_root = "fuchsia-cprng/src/lib.rs"
sources = [ "fuchsia-cprng/src/lib.rs" ]
}
if (is_fuchsia) {
rustc_library("fuchsia-zircon-sys") {
version = "0.3.3"
edition = "2018"
_outputs = get_target_outputs(":generate-rust-zircon-syscalls-definitions")
source_root = _outputs[0]
deps = [
":fuchsia-zircon-types",
":generate-rust-zircon-syscalls-definitions",
]
# Callers should use the re-export at fuchsia_zircon::sys instead
visibility = [ ":*" ]
sources = [ _outputs[0] ]
}
}
rustc_library("fuchsia-zircon-types") {
version = "0.1.0"
edition = "2018"
source_root = "fuchsia-zircon-types/src/lib.rs"
deps = [ "//third_party/rust_crates:static_assertions" ]
sources = [ "fuchsia-zircon-types/src/lib.rs" ]
}
rustc_test("fuchsia-zircon-types-tests") {
name = "fuchsia_zircon_types_tests"
edition = "2018"
source_root = "fuchsia-zircon-types/src/lib.rs"
deps = [ "//third_party/rust_crates:static_assertions" ]
sources = [ "fuchsia-zircon-types/src/lib.rs" ]
}
rustc_library("fuchsia-zircon-status") {
version = "0.1.0"
edition = "2018"
source_root = "fuchsia-zircon-status/src/lib.rs"
deps = [ ":fuchsia-zircon-types" ]
sources = [ "fuchsia-zircon-status/src/lib.rs" ]
}
rustc_test("fuchsia-zircon-status-tests") {
name = "fuchsia_zircon_status_tests"
edition = "2018"
source_root = "fuchsia-zircon-status/src/lib.rs"
deps = [ "//src/lib/zircon/rust:fuchsia-zircon-types" ]
sources = [ "fuchsia-zircon-status/src/lib.rs" ]
}
# Certain tests written as unit tests of fuchsia-zircon make use of other
# crates which themselves depend on fuchsia-zircon. This causes
# fuchsia_zircon::foo to be a different type from crate::foo in the context of
# those unit tests when fuchsia-zircon is built with `with_unit_tests = true`.
#
# Since those tests are really integration tests, we should either move them
# into the "other" crates so that the dependency graph flows in only one
# direction, or simply move those tests into a dedicated target and redesignate
# them as integration tests, which they appear to be.
#
# TODO(https://fxbug.dev/91562): untangle this web.
rustc_test("fuchsia-zircon-unittests") {
edition = "2018"
output_name = "fuchsia_zircon_tests"
deps = [
":fuchsia-zircon-status",
":fuchsia-zircon-sys",
"//third_party/rust_crates:bitflags",
# Test-only deps
":fuchsia-zircon",
"//sdk/fidl/fuchsia.boot:fuchsia.boot-rustc",
"//sdk/fidl/fuchsia.kernel:fuchsia.kernel-rustc",
"//src/lib/fdio/rust:fdio",
"//src/lib/fuchsia-component",
"//src/lib/fuchsia-runtime",
"//third_party/rust_crates:assert_matches",
]
sources = common_sources
}
rustc_binary("exit_with_code_util") {
edition = "2018"
source_root = "test_util/exit_with_code_util.rs"
deps = [ ":fuchsia-zircon" ]
sources = [ "test_util/exit_with_code_util.rs" ]
}
rustc_binary("sleep_forever_util") {
edition = "2018"
source_root = "test_util/sleep_forever_util.rs"
deps = [ ":fuchsia-zircon" ]
sources = [ "test_util/sleep_forever_util.rs" ]
}
fuchsia_unittest_component("fuchsia-cprng_test-component") {
component_name = "fuchsia-cprng"
deps = [ ":fuchsia-cprng_test" ]
}
fuchsia_unittest_component("fuchsia-zircon-status-component") {
component_name = "fuchsia-zircon-status"
deps = [ ":fuchsia-zircon-status-tests" ]
}
fuchsia_unittest_component("fuchsia-zircon-tests-component") {
component_name = "fuchsia-zircon-tests"
manifest = "meta/fuchsia_zircon_tests.cml"
deps = [ ":fuchsia-zircon-unittests" ]
}
fuchsia_unittest_component("fuchsia-zircon-types-tests-component") {
component_name = "fuchsia-zircon-types-tests"
deps = [ ":fuchsia-zircon-types-tests" ]
}
fuchsia_test_package("fuchsia-zircon-tests") {
test_components = [
":fuchsia-cprng_test-component",
":fuchsia-zircon-status-component",
":fuchsia-zircon-tests-component",
":fuchsia-zircon-types-tests-component",
]
deps = [
":exit_with_code_util",
":sleep_forever_util",
]
}
group("tests") {
testonly = true
deps = [ ":fuchsia-zircon-tests" ]
}