Add content to no-std buld.

This commit is contained in:
Stephen Chung 2020-10-31 11:52:42 +08:00
parent 72941fac4b
commit 1e16cb03ce
2 changed files with 64 additions and 6 deletions

View File

@ -15,7 +15,65 @@ Nightly Required
Currently, [`no_std`] requires the nightly compiler due to the crates that it uses. Currently, [`no_std`] requires the nightly compiler due to the crates that it uses.
Implementation
--------------
Rhai allocates, so the first thing that must be included in any `no-std` project is
an allocator crate, such as [`wee_alloc`](https://crates.io/crates/wee_alloc).
Then there is the need to set up proper error/panic handlers.
The following example uses `panic = "abort"` and `wee_alloc` as the allocator.
```rust
// Set up for no-std.
#![no_std]
// The following no-std features are usually needed.
#![feature(alloc_error_handler, start, core_intrinsics, lang_items, link_cfg)]
// Set up the global allocator.
extern crate alloc;
extern crate wee_alloc;
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
// Rust needs a CRT runtime on Windows when compiled with MSVC.
#[cfg(all(windows, target_env = "msvc"))]
#[link(name = "msvcrt")]
#[link(name = "libcmt")]
extern {}
// Set up panic and error handlers
#[alloc_error_handler]
fn err_handler(_: core::alloc::Layout) -> ! {
core::intrinsics::abort();
}
#[panic_handler]
#[lang = "panic_impl"]
extern "C" fn rust_begin_panic(_: &core::panic::PanicInfo) -> ! {
core::intrinsics::abort();
}
#[lang = "eh_personality"]
extern "C" fn eh_personality() {}
#[no_mangle]
extern "C" fn rust_eh_register_frames() {}
#[no_mangle]
extern "C" fn rust_eh_unregister_frames() {}
#[start]
fn main(_argc: isize, _argv: *const *const u8) -> isize {
// ... main program ...
}
```
Samples Samples
------- -------
Check out the [`no-std` sample applications](../examples/rust.md#no-std-samples) for different operating environments. Check out the [`no-std` sample applications](../examples/rust.md#no-std-samples)
for different operating environments.

View File

@ -3,16 +3,16 @@ Building to WebAssembly (WASM)
{{#include ../../links.md}} {{#include ../../links.md}}
It is possible to use Rhai when compiling to WebAssembly (WASM). This yields a scripting engine (and language) It is possible to use Rhai when compiling to WebAssembly (WASM).
that can be run in a standard web browser. This yields a scripting engine (and language) that can be run in a standard web browser.
Why you would want to is another matter... as there is already a nice, fast, complete scripting language Why you would _want_ to is another matter... as there is already a nice, fast, complete scripting language
for the the common WASM environment (i.e. a browser) - and it is called JavaScript. for the the common WASM environment (i.e. a browser) - and it is called JavaScript.
But anyhow, do it because you _can_! But anyhow, do it because you _can_!
When building for WASM, certain features will not be available, such as the script file API's and loading modules When building for WASM, certain features will not be available,
from external script files. such as the script file API's and loading modules from external script files.
Size Size