From 8cd8c2a11d0412f41a28528a17277290cc9e3450 Mon Sep 17 00:00:00 2001 From: Jackson Ming Hu Date: Tue, 8 Aug 2023 22:01:44 +1000 Subject: [PATCH] Make CMSIS pack downloading feature optional (but enabled by default) --- rust/cmsis-cffi/src/config.rs | 2 ++ rust/cmsis-cffi/src/pack.rs | 2 ++ rust/cmsis-cffi/src/pack_index.rs | 16 +++++++++++++++- rust/cmsis-pack/Cargo.toml | 7 ++++--- rust/cmsis-pack/src/lib.rs | 5 +++++ rust/cmsis-pack/src/update/mod.rs | 2 ++ 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/rust/cmsis-cffi/src/config.rs b/rust/cmsis-cffi/src/config.rs index c85c8f347..37e36515e 100644 --- a/rust/cmsis-cffi/src/config.rs +++ b/rust/cmsis-cffi/src/config.rs @@ -2,6 +2,7 @@ use std::fs::{create_dir_all, OpenOptions}; use std::io::{BufRead, BufReader, Write}; use std::path::{Path, PathBuf}; +#[cfg(feature = "pack-download")] use cmsis_pack::update::DownloadConfig; use anyhow::{anyhow, Error}; @@ -16,6 +17,7 @@ pub struct ConfigBuilder { pack_store: Option, } +#[cfg(feature = "pack-download")] impl DownloadConfig for Config { fn pack_store(&self) -> PathBuf { self.pack_store.clone() diff --git a/rust/cmsis-cffi/src/pack.rs b/rust/cmsis-cffi/src/pack.rs index 14c2b030c..a1b5e442f 100644 --- a/rust/cmsis-cffi/src/pack.rs +++ b/rust/cmsis-cffi/src/pack.rs @@ -1,3 +1,5 @@ +#![cfg(feature = "pack-download")] + use std::ffi::CStr; use std::os::raw::c_char; use std::sync::atomic::{AtomicBool, Ordering}; diff --git a/rust/cmsis-cffi/src/pack_index.rs b/rust/cmsis-cffi/src/pack_index.rs index 7f699ca89..4d4a0e000 100644 --- a/rust/cmsis-cffi/src/pack_index.rs +++ b/rust/cmsis-cffi/src/pack_index.rs @@ -1,4 +1,5 @@ #![allow(clippy::missing_safety_doc)] + use std::borrow::{Borrow, BorrowMut}; use std::ffi::{CStr, CString}; use std::mem; @@ -6,15 +7,23 @@ use std::os::raw::c_char; use std::path::PathBuf; use std::ptr::null_mut; use std::sync::atomic::{AtomicBool, Ordering}; -use std::sync::mpsc::{channel, Receiver, Sender}; + +#[cfg(feature = "pack-download")] +use std::sync::mpsc::{channel, Sender}; +use std::sync::mpsc::Receiver; use std::sync::Arc; use std::thread; use anyhow::{anyhow, Error}; +#[cfg(feature = "pack-download")] use crate::config::{read_vidx_list, ConfigBuilder, DEFAULT_VIDX_LIST}; use crate::utils::set_last_error; + +#[cfg(feature = "pack-download")] use cmsis_pack::update::update; + +#[cfg(feature = "pack-download")] use cmsis_pack::update::DownloadProgress; pub struct UpdateReturn(pub(crate) Vec); @@ -31,14 +40,18 @@ pub struct DownloadUpdate { pub size: usize, } + +#[cfg(feature = "pack-download")] pub(crate) struct DownloadSender(Sender); +#[cfg(feature = "pack-download")] impl DownloadSender { pub(crate) fn from_sender(from: Sender) -> Self { DownloadSender(from) } } +#[cfg(feature = "pack-download")] impl DownloadProgress for DownloadSender { fn size(&self, size: usize) { let _ = self.0.send(DownloadUpdate { @@ -81,6 +94,7 @@ impl UpdateReturn { } } +#[cfg(feature = "pack-download")] cffi! { fn update_pdsc_index( pack_store: *const c_char, diff --git a/rust/cmsis-pack/Cargo.toml b/rust/cmsis-pack/Cargo.toml index 43d98cc2f..c017d2d3a 100644 --- a/rust/cmsis-pack/Cargo.toml +++ b/rust/cmsis-pack/Cargo.toml @@ -19,12 +19,13 @@ log = "0.4.8" minidom = "0.12.0" serde = { version = "1.0.118", features = ["derive"] } serde_json = "1.0" -tokio = { version = "1.0", features = ["macros", "rt"] } -reqwest = { version = "0.11.0", default_features = false, features = ["rustls-tls-native-roots", "trust-dns", "stream"] } +tokio = { version = "1.0", features = ["macros", "rt"], optional = true } +reqwest = { version = "0.11.0", default_features = false, features = ["rustls-tls-native-roots", "trust-dns", "stream"], optional = true } anyhow = "1.0.56" [dev-dependencies] time = "0.3.3" [features] -default = [] +default = ["pack-download"] +pack-download = ["dep:tokio", "dep:reqwest"] diff --git a/rust/cmsis-pack/src/lib.rs b/rust/cmsis-pack/src/lib.rs index acc777b42..96fa32f53 100644 --- a/rust/cmsis-pack/src/lib.rs +++ b/rust/cmsis-pack/src/lib.rs @@ -7,7 +7,12 @@ pub mod utils; extern crate futures; extern crate log; extern crate minidom; + +#[cfg(feature = "pack-download")] extern crate reqwest; + extern crate serde; extern crate serde_json; + +#[cfg(feature = "pack-download")] extern crate tokio; diff --git a/rust/cmsis-pack/src/update/mod.rs b/rust/cmsis-pack/src/update/mod.rs index 9b6883227..2b6c7ec11 100644 --- a/rust/cmsis-pack/src/update/mod.rs +++ b/rust/cmsis-pack/src/update/mod.rs @@ -1,3 +1,5 @@ +#![cfg(feature = "pack-download")] + use anyhow::Error; use std::path::PathBuf; use tokio::runtime;