Skip to content

rust_library

Rust library compiled with rustc.

Description

Compiles a first-party Rust library target. Direct Rust deps are passed through --extern; transitive rlibs are exposed as dependency search paths for downstream Rust targets. The default output is an rlib. Final artifact targets may set crate_type to staticlib, cdylib, or dylib. Static libraries expose Apple linkable provider fields, and Android dynamic libraries expose Android application package native-library provider fields. Use rust_mobile_library when one Rust target should emit both the Apple and Android native outputs. Use rust_test when a Rust crate should run tests through Once.

Attributes

AttributeTypeRequiredDefaultDescription
crate_namestringnotarget nameRust crate name passed to rustc; - and . are rewritten as _ when omitted
crate_rootstringnosrc/lib.rsPackage-relative library root
editionstringno2021Rust edition passed to rustc
featureslist<string>no[]Cargo feature names lowered to --cfg=feature=... flags
crate_featureslist<string>no[]Bazel-compatible alias for features
targetstringnohost targetRust target triple passed to rustc --target
envmap<string, string>no{}Environment variables for rustc, matching Buck2's env attribute
rustc_envmap<string, string>no{}Bazel-compatible rustc environment variables
rustc_env_fileslist<string>no[]Files with NAME=value entries merged into the rustc environment before env and rustc_env
rustc_flagslist<string>no[]Additional rustc flags appended after Once-managed flags
cap_lintsstringnoemptyOptional rustc lint cap passed as --cap-lints; generated Cargo dependencies use allow
linkerstringnoemptyOptional linker path passed as -C linker=...; defaults to cc for host Unix binary-like targets and to the Android Native Development Kit clang wrapper for Android targets when available
linker_flagslist<string>no[]Additional linker flags lowered to -C link-arg=...
native_linkoptslist<string>no[]Linker flags propagated to native consumers such as Apple app or framework targets
exported_linker_flagslist<string>no[]Buck-compatible alias for native linker flags propagated to downstream native consumers
exported_post_linker_flagslist<string>no[]Buck-compatible propagated linker flags appended after normal exported linker flags
linker_scriptstringnoemptyPackage-relative linker script passed to the linker and included in the compile action inputs
android_abistringnoinferredAndroid Application Binary Interface directory for cdylib or dylib outputs, such as arm64-v8a
android_apiintno23Android platform level used to select the Android Native Development Kit clang wrapper for Android targets
android_ndkstringnoANDROID_NDK_HOMEAndroid Native Development Kit root used to find clang wrapper linkers
datalist<string>no[]Runtime data file globs propagated to downstream Rust binaries and tests
compile_datalist<string>no[]Bazel-compatible compile-time data file globs included in the rustc action inputs
crate_aliasesmap<string, string>no{}Map dependency label, package name, or crate name to the local extern crate name
aliasesmap<string, string>no{}Bazel-compatible alias map from dependency label or crate name to local extern crate name
named_depsmap<string, string>no{}Buck-compatible alias map from local extern crate name to dependency label or crate name
cargo_packagestringnoemptyCargo package name used to select direct external deps from a cargo_dependencies dependency set. Defaults to CARGO_PKG_NAME when present
build_scriptstringnoemptyPackage-relative Cargo build script path run before rustc; common cargo:rustc-* stdout directives are consumed, dependency cargo:rustc-link-search outputs are replayed downstream, and direct dependency links metadata is consumed
crate_typestringnorlibRust crate type for the output

Accepted but unsupported attributes: default_deps, doc_deps, doc_env, doc_link_style, doc_linker_flags, doc_named_deps, link_deps, link_style, mapped_srcs, proc_macro_deps, rpath, runtime_dependency_handling, and rustdoc_flags. Non-empty values fail validation.

Dependency Edges

EdgeAcceptsDescription
depsrust_crate, rust_proc_macro, rust_dependency_setRust crate dependencies consumed through --extern

Providers

The target emits rust_crate, native_linkable, apple_linkable, and android_native_library. Native provider fields are populated only when the selected crate_type produces a native artifact that the consumer can use.

Provider Record

FieldTypeMeaning
rlibstringRlib output when crate_type = "rlib"
staticlibstringStatic library output when crate_type = "staticlib"
dylibstringDynamic library output when crate_type = "cdylib" or "dylib"
archivestringApple-linkable archive path for staticlib outputs
transitive_archiveslist<string>Archives consumed by Apple link targets
transitive_linkoptslist<string>Native linker flags propagated to Apple link targets
transitive_datalist<string>Runtime data from this crate and dependency crates
android_abistringAndroid Application Binary Interface for dynamic library outputs
android_native_librarieslist<record>Direct Android native libraries with abi and path fields
transitive_android_native_librarieslist<record>Direct and dependency Android native libraries packaged into Android applications

Capabilities

CapabilityOutput groups
buildlibrary

Outputs

OutputLocation
Rust library.once/out/<target>/lib<crate_name>-<metadata>.rlib
Static library.once/out/<target>/lib<crate_name>.a or .lib
Dynamic library.once/out/<target>/lib<crate_name>.dylib, .so, or .dll

Example

toml
[[target]]
name = "hello"
kind = "rust_library"
srcs = ["src/**/*.rs"]

[target.attrs]
crate_name = "hello"
edition = "2021"

For mobile shared code that needs both Apple and Android artifacts from one label, use rust_mobile_library.

Released under an open-source license.