Source code
Revision control
Copy as Markdown
Other Tools
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
include("gkrust-features.mozbuild")
RustLibrary("gkrust", gkrust_features, is_gkrust=True)
for feature in gkrust_features:
# We don't want to enable refcount logging during rusttests, since the
# relevant FFI symbols wouldn't be found.
# Nor do we want Glean or Noise to assume there are Gecko symbols.
if feature not in (
"gkrust-shared/gecko_refcount_logging",
"gkrust-shared/glean_with_gecko",
"gkrust-shared/noise_xpcom",
):
RUST_TEST_FEATURES.append(feature)
# Target directory doesn't matter a lot here, since we can't share panic=abort
# compilation artifacts with gkrust.
RUST_TESTS = [
"crashreporter",
"crash_helper_common",
"firefox-on-glean",
"l10nregistry",
"noise",
"rsclientcerts-util",
"selectors",
"servo_arc",
"qcms",
# this does nothing, but is needed so that `gkrust_features` are recognized
"gkrust",
]
if CONFIG["TARGET_OS"] in ("WINNT", "OSX"):
RUST_TESTS += ["nmhproxy"]
if CONFIG["TARGET_OS"] == "WINNT":
RUST_TESTS += ["win32_process_mitigations"]
else:
# Windows linker pulls in FFI symbols despite them not being relevant for the tests.
RUST_TESTS += ["crash_helper_server"]
if CONFIG["TARGET_OS"] == "WINNT":
RUST_TESTS += ["pushnotificationhelper"]
RUST_TEST_FEATURES.append("crashreporter/mock")
RUST_TEST_FEATURES.append("crashping/gecko_tests")
RUST_TEST_FEATURES.append("firefox-on-glean/gecko_tests")
# Code coverage builds link a bunch of Gecko bindings code from the style
# crate, which is not used by our tests but would cause link errors.
#
# altogether.
if not CONFIG["MOZ_CODE_COVERAGE"]:
RUST_TESTS += ["stylo_tests"]
# Same happens for the style tests, except the windows linker is not great
# at eliminating dead code, so we end up with some missing symbols too.
if CONFIG["OS_TARGET"] != "WINNT":
RUST_TESTS += ["style"]
# dom_fragmentdirectives depends on nsstring which has Gecko FFI symbols.
# The tests don't use these symbols, but Windows linker pulls them in anyway.
RUST_TESTS += ["dom_fragmentdirectives"]
# Likewise for dom_speculationrules.
RUST_TESTS += ["dom_speculationrules"]
# Code coverage builds time out when executing the crashping tests on windows
if not CONFIG["MOZ_CODE_COVERAGE"]:
RUST_TESTS += ["crashping"]
if CONFIG["TARGET_CPU"] != "x86":
# malloc_size_of_derive is a build dependency, so if we are doing
# cross-compile for x86, this may not run correctly.
RUST_TESTS += ["malloc_size_of_derive"]
if CONFIG["MOZ_BITS_DOWNLOAD"]:
RUST_TESTS += ["bits_client"]
# Rust tests can't reference `libxul`, but code coverage builds and MSVC's
# linker don't eliminate the dead references to `libxul` from `kvstore` in
# `lockstore` tests.
if not CONFIG["MOZ_CODE_COVERAGE"] and CONFIG["OS_TARGET"] != "WINNT":
RUST_TESTS += ["lockstore_rs"]
# The `lockstore` tests link NSS and the Glean tests link SQLite, and the
# `tools/rusttests` project has no `compile` tier that would otherwise build
# them. These USE_LIBS are only for build ordering; Cargo does the linking,
# through the `mozbuild` crate. USE_LIBS also applies to `gkrust` above, so
# restrict it to the project that runs the tests rather than making every Rust
# compilation in a Firefox build wait on NSS.
if CONFIG["MOZ_BUILD_APP"] == "tools/rusttests":
USE_LIBS += [
"mozglue",
"nss",
]
# When folding libraries, SQLite is part of nss. Otherwise it's mozsqlite3.
if not CONFIG["MOZ_FOLD_LIBS"]:
USE_LIBS += ["sqlite"]
# NSS loads these dynamically while initializing, so the tests need them in
# dist/bin even though nothing links against them.
USE_LIBS += [
"freebl3",
"softokn3",
]
if CONFIG["OS_TARGET"] == "Linux":
USE_LIBS += [
"freeblpriv3",
]
# Export the `rure` crate's included .h file. The symbols defined in that file
# will be exported from the `gkrust-shared` crate.
EXPORTS += [
"/third_party/rust/rure/include/rure.h",
]
COMPILE_FLAGS["BASE_INCLUDES"] = []
HOST_COMPILE_FLAGS["BASE_INCLUDES"] = []