A Gradle plugin that wraps Rust's Cargo build system, for embedding Rust libraries in Java projects.
This plugin has been tested with Gradle 7.0.0, and should work with at least 7.x versions of Gradle.
If you're looking to use Rust with Android, you might want Mozilla's rust-android-gradle plugin.
For a basic project setup, see the example folder.
To use the plugin, first apply it in a subproject:
// in example/native/build.gradle
plugins {
id "io.github.arc-blroth.cargo-wrapper" version "1.0.0"
}
Then specify the location of your Rust crate and the filename
of your built library using the cargo
extension:
cargo {
// This defaults to the current project path if not specified.
crate = projectDir.path
outputs = ['': System.mapLibraryName('wrapper_example')]
}
The subproject where this plugin is applied will now publish Cargo's outputs as Gradle artifacts, allowing you to use them in other subprojects:
// in example/app/build.gradle
configurations {
// Declare a custom configuration to
// resolve the library from :native
backend {
canBeConsumed false
canBeResolved true
}
}
dependencies {
// Depend on our native code
backend(project(':native'))
}
processResources {
// Copy the native library into the final jar
from(configurations.backend)
}
The cargo
extension accepts these options:
Location of the cargo
executable. Defaults to the Cargo
executable located on the path.
The Rust toolchain to use. Defaults to the default toolchain as resolved by rustup.
Location of the crate to build. Defaults to the project directory of the subproject where the plugin is applied.
A map of the locations of the outputs executables/libraries.
Each entry in the map is a pair between a
target triple
and the name of the output file. Use ""
(the empty string)
to specify the default target.
This is useful if you want to build for several targets in the same project.
The Rust profile
to use, as passed on the command line to Cargo. Can be either
"debug"
or "release"
. Defaults to "debug"
.
A list of additional arguments to pass to the Cargo command line.
A map of additional environmental variable to set while launching Cargo.
Most of the code in this repository has been extracted and modified from code written by me (Arc-blroth) at Arc-blroth/BosstroveRevenge. I hereby relicense this code under the Apache 2.0 License.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.