2022 BazelCon talk about using bazel to build rust libraries for iOS and Android
Rust meetsMobileKeith Smiley (he/him)Principal Engineer, Lyft@SmileyKeith
View Slide
Sharing code onmobile
Why rust?
Rust + bazel
rust_library(name = "foo",srcs = ["foo.rs"],)swift_library(name = "main",srcs = ["main.swift"],deps = [":foo"],)ios_application(...)Shouldn't this work?
--platforms=//:ios_arm64
bazel#7260
platform_mappings
flags:--cpu=arm64-v8a--crosstool_top=//external:android/crosstool//:android_aarch64--cpu=ios_arm64--apple_platform_type=ios//:ios_arm64...
Undefined symbols for architecture arm64:"___rust_alloc", referenced from:..."___rust_alloc_error_handler", referenced from:......rules_rust#1238 / rust#73632
Who does thelinking?
How do I use it?
#[no_mangle]pub extern fn print_something_from_rust() {println!("Ferris says hello!");}#[no_mangle]pub extern fn get_a_value_from_rust() -> i32 {42}extern void print_something_from_rust(void);extern int32_t get_a_value_from_rust(void);
#[no_mangle]pub extern "system" fn Java_com_example_androidapp_JniShim_getValue() ->i32 {get_a_value_from_rust()}package com.example.androidapp;public class JniShim {public static native int getValue();}
dtolnay/cxxrust-lang/rust-bindgen
Future areas ofimprovement
DeveloperExperience
Future rust mobilesupport
Was it worth it?
keith/bazel-rust-mobile-demo
- bazel#11454- bazel#15041- bazel#15248- bazel#15462- bazel#7260- cargo-raze#484- cargo-raze#489- rules_rust#1186- rules_rust#1238- rules_rust#1259- rules_rust#1271- rules_rust#1276- rules_rust#1290- rules_rust#1304- rules_rust#1362- rules_rust#1372- rules_rust#1401- rules_rust#1462- rules_rust#1541- rules_rust#1545- rules_rust#1546- rules_rust#1573- rules_rust#1576- rust#73632
Thank you!twitter.com/SmileyKeith