aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Clément Tosi <ptosi@google.com>2024-01-25 17:59:54 +0000
committerPierre-Clément Tosi <ptosi@google.com>2024-02-07 18:35:49 +0000
commite2e12f853d3b318b44795b6a2b45f925e71bce54 (patch)
tree5fbd5ddd8774ca28a9cc56a7d1fb7d518207542c
parent69cdbdb960e3a869213c773eb16ceb8af72eca38 (diff)
downloadmemoffset-e2e12f853d3b318b44795b6a2b45f925e71bce54.tar.gz
Bring back upstream support for no_std in Android
As the upstream crate was designed to be no_std (therefore uses core) and as the Soong targets need to build a dylib (which requires std), the crate source was being patched to remove the no_std crate attribute. In turn, as the crate doesn't define a Rust edition, Cargo (and therefore cargo_embargo) defaults to 2015, which requires explicitly importing the core crate in no-no_std environments so the code was further patched to use std modules in place of the corresponding core modules. Instead, patch the Cargo.toml to use Rust 2018 (which implicitly imports core, even in no-no_std) and wrap the no_std in a AOSP-only cfg that we enable when building Soong targets that include dylib variants. Enable that cfg from the Android.bp & cargo_embargo.json. Bug: 324074084 Test: external_updater/updater.sh update --force rust/crates/memoffset Test: cargo_embargo generate cargo_embargo.json Test: m libmemoffset libintrusive_collections Change-Id: Id76df918c0ec89651c4b84402967570e52ae1058
-rw-r--r--Android.bp6
-rw-r--r--Cargo.toml1
-rw-r--r--cargo_embargo.json3
-rw-r--r--patches/std.diff43
-rw-r--r--src/lib.rs7
-rw-r--r--src/span_of.rs3
6 files changed, 24 insertions, 39 deletions
diff --git a/Android.bp b/Android.bp
index c2f83d7..b617d11 100644
--- a/Android.bp
+++ b/Android.bp
@@ -25,7 +25,7 @@ rust_library {
cargo_env_compat: true,
cargo_pkg_version: "0.9.0",
srcs: ["src/lib.rs"],
- edition: "2015",
+ edition: "2018",
features: ["default"],
cfgs: [
"allow_clippy",
@@ -34,6 +34,7 @@ rust_library {
"raw_ref_macros",
"stable_const",
"tuple_ty",
+ "aosp_force_use_std",
],
apex_available: [
"//apex_available:platform",
@@ -56,7 +57,7 @@ rust_test {
test_options: {
unit_test: true,
},
- edition: "2015",
+ edition: "2018",
features: ["default"],
cfgs: [
"allow_clippy",
@@ -65,5 +66,6 @@ rust_test {
"raw_ref_macros",
"stable_const",
"tuple_ty",
+ "aosp_force_use_std",
],
}
diff --git a/Cargo.toml b/Cargo.toml
index 77fe68f..bc62b4a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -10,6 +10,7 @@
# See Cargo.toml.orig for the original contents.
[package]
+edition = "2018" # ANDROID: Required to build dylib in no_std.
name = "memoffset"
version = "0.9.0"
authors = ["Gilad Naaman <gilad.naaman@gmail.com>"]
diff --git a/cargo_embargo.json b/cargo_embargo.json
index c458c58..0ff27f0 100644
--- a/cargo_embargo.json
+++ b/cargo_embargo.json
@@ -9,6 +9,9 @@
"variants": [
{
"min_sdk_version": "29",
+ "extra_cfg": [
+ "aosp_force_use_std"
+ ],
"tests": true
}
]
diff --git a/patches/std.diff b/patches/std.diff
index fc4bdbc..034f559 100644
--- a/patches/std.diff
+++ b/patches/std.diff
@@ -1,40 +1,21 @@
+diff --git a/Cargo.toml b/Cargo.toml
+index 77fe68f..bc62b4a 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -10,4 +10,5 @@
+ # See Cargo.toml.orig for the original contents.
+
+ [package]
++edition = "2018" # ANDROID: Required to build dylib in no_std.
+ name = "memoffset"
diff --git a/src/lib.rs b/src/lib.rs
index c85fb01..25b0444 100644
--- a/src/lib.rs
+++ b/src/lib.rs
-@@ -56,7 +56,8 @@
+@@ -55,5 +55,5 @@
//! let checksum = crc16(checksum_range);
//! ```
-#![no_std]
-+// ANDROID: include standard library to build as a dylib
-+//#![no_std]
++#![cfg_attr(not(aosp_force_use_std), no_std)]
#![cfg_attr(
- feature = "unstable_const",
- feature(
-@@ -78,9 +79,9 @@
- #[doc(hidden)]
- pub mod __priv {
- #[doc(hidden)]
-- pub use core::mem;
-+ pub use std::mem; // ANDROID: use std instead of core, since we're not building with no-std.
- #[doc(hidden)]
-- pub use core::ptr;
-+ pub use std::ptr; // ANDROID: use std instead of core, since we're not building with no-std.
-
- /// Use type inference to obtain the size of the pointee (without actually using the pointer).
- #[doc(hidden)]
-diff --git a/src/span_of.rs b/src/span_of.rs
-index 0592dbd..369e5c6 100644
---- a/src/span_of.rs
-+++ b/src/span_of.rs
-@@ -155,7 +155,8 @@ macro_rules! span_of {
-
- #[cfg(test)]
- mod tests {
-- use core::mem;
-+ // ANDROID: use std instead of core, since we're not building wiht no-std.
-+ use std::mem;
-
- #[test]
- fn span_simple() { \ No newline at end of file
diff --git a/src/lib.rs b/src/lib.rs
index f0aab7b..8d65d9a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -55,8 +55,7 @@
//! let checksum = crc16(checksum_range);
//! ```
-// ANDROID: include standard library to build as a dylib
-//#![no_std]
+#![cfg_attr(not(aosp_force_use_std), no_std)]
#![cfg_attr(
all(feature = "unstable_const", not(stable_const)),
feature(const_ptr_offset_from)
@@ -76,9 +75,9 @@ doctest!("../README.md");
#[doc(hidden)]
pub mod __priv {
#[doc(hidden)]
- pub use std::mem; // ANDROID: use std instead of core, since we're not building with no-std.
+ pub use core::mem;
#[doc(hidden)]
- pub use std::ptr; // ANDROID: use std instead of core, since we're not building with no-std.
+ pub use core::ptr;
/// Use type inference to obtain the size of the pointee (without actually using the pointer).
#[doc(hidden)]
diff --git a/src/span_of.rs b/src/span_of.rs
index c2030b7..89fccce 100644
--- a/src/span_of.rs
+++ b/src/span_of.rs
@@ -155,8 +155,7 @@ macro_rules! span_of {
#[cfg(test)]
mod tests {
- // ANDROID: use std instead of core, since we're not building wiht no-std.
- use std::mem;
+ use core::mem;
#[test]
fn span_simple() {