rust_proc_macro

Rust procedural macro compiled with rustc.

Description#

Compiles a Rust procedural macro for the execution host. Downstream Rust targets consume the output through --extern as a procedural-macro dependency instead of a normal target dependency.

Attributes#

AttributeTypeRequiredDefaultDescription
crate_namestringnotarget nameRust crate name passed to rustc; - and . are rewritten as _ when omitted
crate_rootstringnosrc/lib.rsPackage-relative macro 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 NDK clang wrapper for Android targets when available
linker_flagslist<string>no[]Additional linker flags lowered to -C link-arg=...
native_linkoptslist<string>no[]Shared Rust compatibility attribute for native-producing Rust target kinds
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 ABI directory for dynamic library outputs, such as arm64-v8a
android_apiintno23Android API level used to select the NDK clang wrapper for Android targets
android_ndkstringnoANDROID_NDK_HOMEAndroid NDK 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
_build_script_inputslist<string>resolver-owned[]Generated package source inputs made available to its Cargo build script
package_namestringnotarget nameOriginal Cargo package name when lowered from Cargo metadata
versionstringnoemptyResolved Cargo package version when lowered from Cargo metadata
sourcestringnoemptyCargo source identifier
checksumstringnoemptyCargo.lock checksum for registry packages

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 under [target.attrs] fail validation. Use the dependency roles with the same names under [target.dependencies].

Dependency Edges#

EdgeAcceptsDescription
depsrust_crate, rust_proc_macro, rust_dependency_set, c_providerRust crate dependencies consumed by the procedural macro and C providers linked into the host plugin
build_depsrust_crate, rust_proc_macro, rust_dependency_set, c_providerDependencies compiled for this package's Cargo build script
proc_macro_depsrust_proc_macroProcedural macros compiled for the execution host and passed to rustc through --extern
link_depsc_providerNative libraries and linker options consumed by the host plug-in

Sources#

  • Cargo metadata defines procedural macro targets and the host dependency information lowered into generated rust_proc_macro targets.
  • The Cargo lockfile defines the resolved package versions and checksums attached to those targets.
  • Bazel rules for Rust, Crate Universe documents the upstream pattern of generating build targets from Cargo while separating procedural macro dependencies from normal crate dependencies.

Providers#

The target emits rust_proc_macro.

Capabilities#

CapabilityOutput groups
buildproc_macro

Outputs#

OutputLocation
Procedural macro library.once/out/<target>/lib<crate_name>.dylib, .so, or .dll

Example#

toml
[[target]]
name = "identity"
kind = "rust_proc_macro"
srcs = ["src/**/*.rs"]
[target.attrs]
crate_name = "identity"
edition = "2021"