Skip to content

Commit 8b89bce

Browse files
authored
Merge pull request #1666 from fzyzcjy/feat/11752
Make LLVM dependency optional
2 parents ce97b8b + 8546d03 commit 8b89bce

File tree

593 files changed

+190797
-53209
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

593 files changed

+190797
-53209
lines changed

.github/workflows/ci.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ jobs:
181181
package:
182182
- frb_example--dart_minimal
183183
- frb_example--pure_dart
184+
- frb_example--pure_dart_pde
184185
- frb_example--deliberate_bad
185186
- frb_example--flutter_via_create
186187
- frb_example--flutter_via_integrate
@@ -530,6 +531,7 @@ jobs:
530531
- tools--frb_internal
531532
- frb_example--dart_minimal
532533
- frb_example--pure_dart
534+
- frb_example--pure_dart_pde
533535
- frb_example--deliberate_bad
534536
exclude:
535537
- {image: windows-2019, package: frb_utils}
@@ -576,6 +578,7 @@ jobs:
576578
- frb_dart
577579
- frb_example--dart_minimal
578580
- frb_example--pure_dart
581+
- frb_example--pure_dart_pde
579582
# no need for `frb_example--deliberate_bad`
580583

581584
steps:
@@ -625,6 +628,7 @@ jobs:
625628
package:
626629
- frb_example--dart_minimal
627630
- frb_example--pure_dart
631+
- frb_example--pure_dart_pde
628632
# no `frb_example--deliberate_bad`
629633

630634
steps:
@@ -664,6 +668,7 @@ jobs:
664668
package:
665669
- frb_example--dart_minimal
666670
- frb_example--pure_dart
671+
- frb_example--pure_dart_pde
667672
- frb_example--deliberate_bad
668673

669674
steps:

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* Fix module parsing when two modules have the same name #1664 (thanks @alanlzhang)
77
* Fix integrate command's default template has rust_lib hardcoded instead of custom names #1669
88
* Support `Vec<Vec<u8>>` for CST/DCO codec (SSE codec already supports it) #1663
9+
* Make LLVM dependency optional #1666
910
* Add checks of versions #1667
1011

1112
## 2.0.0-dev.19

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ exclude = [
1313
"frb_example/flutter_via_integrate/rust",
1414
"frb_example/gallery/rust",
1515
"frb_example/pure_dart/rust",
16+
"frb_example/pure_dart_pde/rust",
1617
]
1718
resolver = "2"
1819

frb_codegen/assets/integration_template/REPLACE_ME_RUST_CRATE_DIR/src/frb_generated.io.rs

Lines changed: 2 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -8,75 +8,6 @@ use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt,
88
use flutter_rust_bridge::for_generated::transform_result_dco;
99
use flutter_rust_bridge::{Handler, IntoIntoDart};
1010

11-
// Section: dart2rust
11+
// Section: boilerplate
1212

13-
impl CstDecode<String> for *mut wire_cst_list_prim_u_8_strict {
14-
fn cst_decode(self) -> String {
15-
let vec: Vec<u8> = self.cst_decode();
16-
String::from_utf8(vec).unwrap()
17-
}
18-
}
19-
impl CstDecode<Vec<u8>> for *mut wire_cst_list_prim_u_8_strict {
20-
fn cst_decode(self) -> Vec<u8> {
21-
unsafe {
22-
let wrap = flutter_rust_bridge::for_generated::box_from_leak_ptr(self);
23-
flutter_rust_bridge::for_generated::vec_from_leak_ptr(wrap.ptr, wrap.len)
24-
}
25-
}
26-
}
27-
pub trait NewWithNullPtr {
28-
fn new_with_null_ptr() -> Self;
29-
}
30-
31-
impl<T> NewWithNullPtr for *mut T {
32-
fn new_with_null_ptr() -> Self {
33-
std::ptr::null_mut()
34-
}
35-
}
36-
37-
#[no_mangle]
38-
pub extern "C" fn frbgen_REPLACE_ME_DART_PACKAGE_NAME_dart_fn_deliver_output(
39-
call_id: i32,
40-
ptr_: *mut u8,
41-
rust_vec_len_: i32,
42-
data_len_: i32,
43-
) {
44-
let message = unsafe {
45-
flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire(
46-
ptr_,
47-
rust_vec_len_,
48-
data_len_,
49-
)
50-
};
51-
FLUTTER_RUST_BRIDGE_HANDLER.dart_fn_handle_output(call_id, message)
52-
}
53-
54-
#[no_mangle]
55-
pub extern "C" fn frbgen_REPLACE_ME_DART_PACKAGE_NAME_wire_greet(
56-
name: *mut wire_cst_list_prim_u_8_strict,
57-
) -> flutter_rust_bridge::for_generated::WireSyncRust2DartDco {
58-
wire_greet_impl(name)
59-
}
60-
61-
#[no_mangle]
62-
pub extern "C" fn frbgen_REPLACE_ME_DART_PACKAGE_NAME_wire_init_app(port_: i64) {
63-
wire_init_app_impl(port_)
64-
}
65-
66-
#[no_mangle]
67-
pub extern "C" fn frbgen_REPLACE_ME_DART_PACKAGE_NAME_cst_new_list_prim_u_8_strict(
68-
len: i32,
69-
) -> *mut wire_cst_list_prim_u_8_strict {
70-
let ans = wire_cst_list_prim_u_8_strict {
71-
ptr: flutter_rust_bridge::for_generated::new_leak_vec_ptr(Default::default(), len),
72-
len,
73-
};
74-
flutter_rust_bridge::for_generated::new_leak_box_ptr(ans)
75-
}
76-
77-
#[repr(C)]
78-
#[derive(Clone, Copy)]
79-
pub struct wire_cst_list_prim_u_8_strict {
80-
ptr: *mut u8,
81-
len: i32,
82-
}
13+
flutter_rust_bridge::frb_generated_boilerplate_io!();

frb_codegen/assets/integration_template/REPLACE_ME_RUST_CRATE_DIR/src/frb_generated.rs

Lines changed: 78 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
clippy::unused_unit,
1414
clippy::double_parens,
1515
clippy::let_and_return,
16-
clippy::too_many_arguments
16+
clippy::too_many_arguments,
17+
clippy::match_single_binding
1718
)]
1819

1920
// Section: imports
@@ -24,7 +25,10 @@ use flutter_rust_bridge::{Handler, IntoIntoDart};
2425

2526
// Section: boilerplate
2627

27-
flutter_rust_bridge::frb_generated_boilerplate!();
28+
flutter_rust_bridge::frb_generated_boilerplate!(
29+
default_stream_sink_codec = SseCodec,
30+
default_rust_opaque = RustOpaqueMoi
31+
);
2832
const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "REPLACE_ME_FRB_VERSION";
2933

3034
// Section: executor
@@ -34,32 +38,59 @@ flutter_rust_bridge::frb_generated_default_handler!();
3438
// Section: wire_funcs
3539

3640
fn wire_greet_impl(
37-
name: impl CstDecode<String>,
38-
) -> flutter_rust_bridge::for_generated::WireSyncRust2DartDco {
39-
FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::<flutter_rust_bridge::for_generated::DcoCodec, _>(
41+
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
42+
rust_vec_len_: i32,
43+
data_len_: i32,
44+
) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse {
45+
FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::<flutter_rust_bridge::for_generated::SseCodec, _>(
4046
flutter_rust_bridge::for_generated::TaskInfo {
4147
debug_name: "greet",
4248
port: None,
4349
mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync,
4450
},
4551
move || {
46-
let api_name = name.cst_decode();
47-
transform_result_dco((move || {
52+
let message = unsafe {
53+
flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire(
54+
ptr_,
55+
rust_vec_len_,
56+
data_len_,
57+
)
58+
};
59+
let mut deserializer =
60+
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
61+
let api_name = <String>::sse_decode(&mut deserializer);
62+
deserializer.end();
63+
transform_result_sse((move || {
4864
Result::<_, ()>::Ok(crate::api::simple::greet(api_name))
4965
})())
5066
},
5167
)
5268
}
53-
fn wire_init_app_impl(port_: flutter_rust_bridge::for_generated::MessagePort) {
54-
FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::DcoCodec, _, _>(
69+
fn wire_init_app_impl(
70+
port_: flutter_rust_bridge::for_generated::MessagePort,
71+
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
72+
rust_vec_len_: i32,
73+
data_len_: i32,
74+
) {
75+
FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::<flutter_rust_bridge::for_generated::SseCodec, _, _>(
5576
flutter_rust_bridge::for_generated::TaskInfo {
5677
debug_name: "init_app",
5778
port: Some(port_),
5879
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
5980
},
6081
move || {
82+
let message = unsafe {
83+
flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire(
84+
ptr_,
85+
rust_vec_len_,
86+
data_len_,
87+
)
88+
};
89+
let mut deserializer =
90+
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
91+
deserializer.end();
6192
move |context| {
62-
transform_result_dco(
93+
transform_result_sse(
6394
(move || Result::<_, ()>::Ok(crate::api::simple::init_app()))(),
6495
)
6596
}
@@ -69,19 +100,16 @@ fn wire_init_app_impl(port_: flutter_rust_bridge::for_generated::MessagePort) {
69100

70101
// Section: dart2rust
71102

72-
impl CstDecode<u8> for u8 {
73-
fn cst_decode(self) -> u8 {
74-
self
75-
}
76-
}
77103
impl SseDecode for String {
104+
// Codec=Sse (Serialization based), see doc to use other codecs
78105
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
79106
let mut inner = <Vec<u8>>::sse_decode(deserializer);
80107
return String::from_utf8(inner).unwrap();
81108
}
82109
}
83110

84111
impl SseDecode for Vec<u8> {
112+
// Codec=Sse (Serialization based), see doc to use other codecs
85113
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
86114
let mut len_ = <i32>::sse_decode(deserializer);
87115
let mut ans_ = vec![];
@@ -93,36 +121,67 @@ impl SseDecode for Vec<u8> {
93121
}
94122

95123
impl SseDecode for u8 {
124+
// Codec=Sse (Serialization based), see doc to use other codecs
96125
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
97126
deserializer.cursor.read_u8().unwrap()
98127
}
99128
}
100129

101130
impl SseDecode for () {
131+
// Codec=Sse (Serialization based), see doc to use other codecs
102132
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {}
103133
}
104134

105135
impl SseDecode for i32 {
136+
// Codec=Sse (Serialization based), see doc to use other codecs
106137
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
107138
deserializer.cursor.read_i32::<NativeEndian>().unwrap()
108139
}
109140
}
110141

111142
impl SseDecode for bool {
143+
// Codec=Sse (Serialization based), see doc to use other codecs
112144
fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {
113145
deserializer.cursor.read_u8().unwrap() != 0
114146
}
115147
}
116148

149+
fn pde_ffi_dispatcher_primary_impl(
150+
func_id: i32,
151+
port: flutter_rust_bridge::for_generated::MessagePort,
152+
ptr: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
153+
rust_vec_len: i32,
154+
data_len: i32,
155+
) {
156+
match func_id {
157+
2 => wire_init_app_impl(port, ptr, rust_vec_len, data_len),
158+
_ => unreachable!(),
159+
}
160+
}
161+
162+
fn pde_ffi_dispatcher_sync_impl(
163+
func_id: i32,
164+
ptr: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
165+
rust_vec_len: i32,
166+
data_len: i32,
167+
) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse {
168+
match func_id {
169+
1 => wire_greet_impl(ptr, rust_vec_len, data_len),
170+
_ => unreachable!(),
171+
}
172+
}
173+
117174
// Section: rust2dart
118175

119176
impl SseEncode for String {
177+
// Codec=Sse (Serialization based), see doc to use other codecs
120178
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
121179
<Vec<u8>>::sse_encode(self.into_bytes(), serializer);
122180
}
123181
}
124182

125183
impl SseEncode for Vec<u8> {
184+
// Codec=Sse (Serialization based), see doc to use other codecs
126185
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
127186
<i32>::sse_encode(self.len() as _, serializer);
128187
for item in self {
@@ -132,22 +191,26 @@ impl SseEncode for Vec<u8> {
132191
}
133192

134193
impl SseEncode for u8 {
194+
// Codec=Sse (Serialization based), see doc to use other codecs
135195
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
136196
serializer.cursor.write_u8(self).unwrap();
137197
}
138198
}
139199

140200
impl SseEncode for () {
201+
// Codec=Sse (Serialization based), see doc to use other codecs
141202
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {}
142203
}
143204

144205
impl SseEncode for i32 {
206+
// Codec=Sse (Serialization based), see doc to use other codecs
145207
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
146208
serializer.cursor.write_i32::<NativeEndian>(self).unwrap();
147209
}
148210
}
149211

150212
impl SseEncode for bool {
213+
// Codec=Sse (Serialization based), see doc to use other codecs
151214
fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {
152215
serializer.cursor.write_u8(self as _).unwrap();
153216
}

0 commit comments

Comments
 (0)