mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-23 06:48:16 +00:00
tests(core/rust): ability to set up MicroPython env for testing
warning: super hacky! [no changelog]
This commit is contained in:
parent
bdfc453245
commit
b3b3e0efa4
@ -221,6 +221,12 @@ fn link_core_objects() {
|
||||
let obj = obj.unwrap();
|
||||
cc.object(obj);
|
||||
}
|
||||
|
||||
// Add frozen modules, if present.
|
||||
for obj in glob::glob(&format!("{}/*.o", build_path)).unwrap() {
|
||||
cc.object(obj.unwrap());
|
||||
}
|
||||
|
||||
// Compile all the objects into a static library and link it in automatically.
|
||||
cc.compile("core_lib");
|
||||
|
||||
|
@ -16,3 +16,6 @@ pub mod qstr;
|
||||
pub mod runtime;
|
||||
pub mod time;
|
||||
pub mod typ;
|
||||
|
||||
#[cfg(test)]
|
||||
pub mod testutil;
|
||||
|
33
core/embed/rust/src/micropython/testutil.rs
Normal file
33
core/embed/rust/src/micropython/testutil.rs
Normal file
@ -0,0 +1,33 @@
|
||||
extern "C" {
|
||||
fn gc_init(start: *mut cty::c_void, end: *mut cty::c_void);
|
||||
fn mp_stack_ctrl_init();
|
||||
fn mp_stack_set_limit(limit: usize);
|
||||
fn mp_init();
|
||||
}
|
||||
|
||||
static mut HEAP: [u8; 20 * 1024 * 1024] = [0; 20 * 1024 * 1024];
|
||||
static mut MPY_INITIALIZED: bool = false;
|
||||
|
||||
/// Initialize the MicroPython environment.
|
||||
///
|
||||
/// This is very hacky, in no way safe, and should not be used in production.
|
||||
/// The stack is configured on a best-effort basis and depending on from where
|
||||
/// this is called, you might get errorneous "recursion exceeded" problems.
|
||||
///
|
||||
/// This should only be called at start of your test function.
|
||||
#[cfg(test)]
|
||||
pub unsafe fn mpy_init() {
|
||||
unsafe {
|
||||
if MPY_INITIALIZED {
|
||||
return;
|
||||
}
|
||||
mp_stack_ctrl_init();
|
||||
mp_stack_set_limit(6000000);
|
||||
gc_init(
|
||||
HEAP.as_mut_ptr().cast(),
|
||||
HEAP.as_mut_ptr().add(HEAP.len()).cast(),
|
||||
);
|
||||
mp_init();
|
||||
MPY_INITIALIZED = true;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user