no_std support (#232)

- Disable default features in dependencies
- Use anyhow::Error::msg to map errors. Note: anyhow will itself be removed later.
- lazy_static/spin_no_std used in no_std environments
- ensure_no_std binary is built to target  thumbv7m-none-eabi to ensure that
  there are no std dependencies.  thumbv7m-none-eabi target has no std support.
- The opa-no-std feature enables only those Regorus features that work with no_std.
- Enable tests with no_std
- Update sizes of regorus binary in  README.md
- Ensure that regorus example can be built with only std
- Ensure that regorus example can be built with no_std

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
This commit is contained in:
Anand Krishnamoorthi
2024-05-13 09:42:35 -04:00
committed by GitHub
parent 01fc234a33
commit e86b590f91
25 changed files with 343 additions and 173 deletions
+3
View File
@@ -1,11 +1,13 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
#![allow(unused)]
use lazy_static::lazy_static;
use std::sync::Mutex;
use regorus::*;
#[cfg(feature = "arc")]
// Ensure that types can be s
lazy_static! {
static ref VALUE: Value = Value::Null;
@@ -14,6 +16,7 @@ lazy_static! {
}
#[test]
#[cfg(feature = "arc")]
fn shared_engine() -> anyhow::Result<()> {
let e_guard = ENGINE.lock();
let mut engine = e_guard.expect("failed to lock engine");
+10
View File
@@ -0,0 +1,10 @@
[package]
name = "ensure_no_std"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
anyhow = { version = "1.0.83", default-features = false }
regorus = { path = "../..", default-features = false, features = ["opa-no-std"] }
+16
View File
@@ -0,0 +1,16 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
#![no_std]
#![no_main]
use core::panic::PanicInfo;
#[panic_handler]
fn panic(_info: &PanicInfo) -> ! {
loop {}
}
#[no_mangle]
pub extern "C" fn _start() -> ! {
loop {}
}
+1
View File
@@ -225,6 +225,7 @@ fn invalid_line() -> Result<()> {
}
#[test]
#[cfg(feature = "std")]
fn file_more_than_64_kb_size() -> Result<()> {
let source = Source::from_file("tests/kata/data/large.rego")?;
let mut lexer = Lexer::new(&source);
-3
View File
@@ -8,6 +8,3 @@ mod engine;
mod lexer;
mod parser;
mod value;
#[cfg(feature = "arc")]
mod arc;