Add no_std support in module, simplejit, and umbrella.

This commit is contained in:
Dan Gohman
2018-04-18 17:39:43 -07:00
parent 5f84afee2c
commit 830ee60d28
7 changed files with 56 additions and 22 deletions

View File

@@ -35,9 +35,9 @@ the System V AMD64 ABI calling convention used on many platforms, but does not
yet support the Windows x64 calling convention. The performance of code yet support the Windows x64 calling convention. The performance of code
produced by Cretonne is not yet impressive, though we have plans to fix that. produced by Cretonne is not yet impressive, though we have plans to fix that.
The core codegen crates have minimal dependencies, and do not require any host The core codegen crates have minimal dependencies, support
floating-point support. Support for `no_std` mode in the core codegen crates is `no_std <#building-with-no-std>` mode, and do not require any host
`in development <https://github.com/cretonne/cretonne/tree/no_std>`_. floating-point support.
Cretonne does not yet perform mitigations for Spectre or related security Cretonne does not yet perform mitigations for Spectre or related security
issues, though it may do so in the future. It does not currently make any issues, though it may do so in the future. It does not currently make any
@@ -93,22 +93,31 @@ installed.
Building with `no_std` Building with `no_std`
---------------------- ----------------------
To build cretonne without libstd, disable the `std` feature on `lib/cretonne`, The following crates support `no_std`:
`lib/frontend`, `lib/native`, and `lib/wasm`, which is otherwise enabled by - `cretonne-entity`
default, and enable the `core` feature. - `cretonne-codegen`
- `cretonne-frontend`
- `cretonne-native`
- `cretonne-wasm`
- `cretonne-module`
- `cretonne-simplejit`
- `cretonne`
For example, to build `cretonne`: To use `no_std` mode, disable the `std` feature and enable the `core` feature.
This currently requires nightly rust.
For example, to build `cretonne-codegen`:
.. code-block:: sh .. code-block:: sh
cd lib/cretonne cd lib/codegen
cargo build --no-default-features --features core cargo build --no-default-features --features core
Or, when using `cretonne` as a dependency (in Cargo.toml): Or, when using `cretonne-codegen` as a dependency (in Cargo.toml):
.. code-block:: .. code-block::
[dependency.cretonne] [dependency.cretonne-codegen]
... ...
default-features = false default-features = false
features = ["core"] features = ["core"]

View File

@@ -15,14 +15,19 @@ function banner() {
} }
# Test those packages which have no_std support. # Test those packages which have no_std support.
LIBS="codegen frontend wasm native" LIBS="codegen frontend wasm native module simplejit umbrella"
cd "$topdir" cd "$topdir"
for LIB in $LIBS for LIB in $LIBS
do do
banner "Rust unit tests in $LIB" banner "Rust unit tests in $LIB"
cd "lib/$LIB" cd "lib/$LIB"
# Test with just "core" enabled.
cargo test --no-default-features --features core cargo test --no-default-features --features core
# Test with "core" and "std" enabled at the same time.
cargo test --features core cargo test --features core
cd "$topdir" cd "$topdir"
done done

View File

@@ -12,12 +12,12 @@ build = "build.rs"
[dependencies] [dependencies]
cretonne-entity = { path = "../entity", version = "0.5.1", default-features = false } cretonne-entity = { path = "../entity", version = "0.5.1", default-features = false }
failure = { version = "0.1.1", default-features = false, features = ["derive"] }
failure_derive = { version = "0.1.1", default-features = false }
# It is a goal of the cretonne-codegen crate to have minimal external dependencies. # It is a goal of the cretonne-codegen crate to have minimal external dependencies.
# Please don't add any unless they are essential to the task of creating binary # Please don't add any unless they are essential to the task of creating binary
# machine code. Integration tests that need external dependencies can be # machine code. Integration tests that need external dependencies can be
# accomodated in `tests`. # accomodated in `tests`.
failure = { version = "0.1.1", default-features = false, features = ["derive"] }
failure_derive = { version = "0.1.1", default-features = false }
[dependencies.hashmap_core] [dependencies.hashmap_core]
version = "0.1.1" version = "0.1.1"
@@ -28,7 +28,7 @@ optional = true
# of some minimal std-like replacement libraries. At least one of these two # of some minimal std-like replacement libraries. At least one of these two
# features to be enabled. # features to be enabled.
default = ["std"] default = ["std"]
std = [] std = ["cretonne-entity/std"]
core = ["hashmap_core"] core = ["hashmap_core"]
[badges] [badges]

View File

@@ -23,6 +23,7 @@ use preopt::do_preopt;
use regalloc; use regalloc;
use result::{CtonError, CtonResult}; use result::{CtonError, CtonResult};
use settings::{FlagsOrIsa, OptLevel}; use settings::{FlagsOrIsa, OptLevel};
use std::vec::Vec;
use simple_gvn::do_simple_gvn; use simple_gvn::do_simple_gvn;
use timing; use timing;
use unreachable_code::eliminate_unreachable_code; use unreachable_code::eliminate_unreachable_code;

View File

@@ -9,8 +9,17 @@ license = "Apache-2.0"
readme = "README.md" readme = "README.md"
[dependencies] [dependencies]
cretonne-codegen = { path = "../codegen", version = "0.5.1" } cretonne-codegen = { path = "../codegen", version = "0.5.1", default-features = false }
cretonne-entity = { path = "../entity", version = "0.5.1" } cretonne-entity = { path = "../entity", version = "0.5.1", default-features = false }
[dependencies.hashmap_core]
version = "0.1.1"
optional = true
[features]
default = ["std"]
std = ["cretonne-codegen/std", "cretonne-entity/std"]
core = ["hashmap_core", "cretonne-codegen/core"]
[badges] [badges]
maintenance = { status = "experimental" } maintenance = { status = "experimental" }

View File

@@ -9,13 +9,18 @@ license = "Apache-2.0"
readme = "README.md" readme = "README.md"
[dependencies] [dependencies]
cretonne-codegen = { path = "../codegen", version = "0.5.1" } cretonne-codegen = { path = "../codegen", version = "0.5.1", default-features = false }
cretonne-module = { path = "../module", version = "0.5.1" } cretonne-module = { path = "../module", version = "0.5.1", default-features = false }
cretonne-native = { path = "../native", version = "0.5.1" } cretonne-native = { path = "../native", version = "0.5.1", default-features = false }
region = "0.2.0" region = "0.2.0"
libc = "0.2.40" libc = { version = "0.2.40", default-features = false }
errno = "0.2.3" errno = "0.2.3"
[features]
default = ["std"]
std = ["libc/use_std", "cretonne-codegen/std", "cretonne-module/std", "cretonne-native/std"]
core = ["cretonne-codegen/core", "cretonne-module/core", "cretonne-native/core"]
[badges] [badges]
maintenance = { status = "experimental" } maintenance = { status = "experimental" }
travis-ci = { repository = "Cretonne/cretonne" } travis-ci = { repository = "Cretonne/cretonne" }

View File

@@ -10,8 +10,13 @@ readme = "README.md"
keywords = ["compile", "compiler", "jit"] keywords = ["compile", "compiler", "jit"]
[dependencies] [dependencies]
cretonne-codegen = { path = "../codegen", version = "0.5.1" } cretonne-codegen = { path = "../codegen", version = "0.5.1", default-features = false }
cretonne-frontend = { path = "../frontend", version = "0.5.1" } cretonne-frontend = { path = "../frontend", version = "0.5.1", default-features = false }
[features]
default = ["std"]
std = ["cretonne-codegen/std", "cretonne-frontend/std"]
core = ["cretonne-codegen/core", "cretonne-frontend/core"]
[badges] [badges]
maintenance = { status = "experimental" } maintenance = { status = "experimental" }