Add no_std support in module, simplejit, and umbrella.
This commit is contained in:
29
README.rst
29
README.rst
@@ -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"]
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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" }
|
||||||
|
|||||||
@@ -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" }
|
||||||
|
|||||||
@@ -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" }
|
||||||
|
|||||||
Reference in New Issue
Block a user