Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document x86_64-fortanix-unknown-sgx platform #101151

Merged
merged 2 commits into from
Sep 18, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/doc/rustc/src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
- [*-unknown-openbsd](platform-support/openbsd.md)
- [\*-unknown-uefi](platform-support/unknown-uefi.md)
- [wasm64-unknown-unknown](platform-support/wasm64-unknown-unknown.md)
- [x86_64-fortanix-unknown-sgx](platform-support/x86_64-fortanix-unknown-sgx.md)
- [x86_64-unknown-none](platform-support/x86_64-unknown-none.md)
- [Targets](targets/index.md)
- [Built-in Targets](targets/built-in.md)
Expand Down
2 changes: 1 addition & 1 deletion src/doc/rustc/src/platform-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ target | std | notes
`wasm32-unknown-unknown` | ✓ | WebAssembly
`wasm32-wasi` | ✓ | WebAssembly with WASI
`x86_64-apple-ios` | ✓ | 64-bit x86 iOS
`x86_64-fortanix-unknown-sgx` | ✓ | [Fortanix ABI] for 64-bit Intel SGX
[`x86_64-fortanix-unknown-sgx`](platform-support/x86_64-fortanix-unknown-sgx.md) | ✓ | [Fortanix ABI] for 64-bit Intel SGX
`x86_64-fuchsia` | ✓ | 64-bit Fuchsia
`x86_64-linux-android` | ✓ | 64-bit x86 Android
`x86_64-pc-solaris` | ✓ | 64-bit Solaris 10/11, illumos
Expand Down
72 changes: 72 additions & 0 deletions src/doc/rustc/src/platform-support/x86_64-fortanix-unknown-sgx.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# `x86_64-fortanix-unknown-sgx`

**Tier: 2**

Secure enclaves using [Intel Software Guard Extensions
(SGX)](https://www.intel.com/content/www/us/en/developer/tools/software-guard-extensions/overview.html)
based on the ABI defined by Fortanix for the [Enclave Development Platform
(EDP)](https://edp.fortanix.com/).

## Target maintainers

The [EDP team](mailto:[email protected]) at Fortanix.

- Jethro Beekman [@jethrogb](https://github.com/jethrogb)
- Raoul Strackx [@raoulstrackx](https://github.com/raoulstrackx)
- Mohsen Zohrevandi [@mzohreva](https://github.com/mzohreva)

## Requirements

The target supports `std` with a default allocator. Only cross compilation is
supported.

Binaries support all CPUs that include Intel SGX. Only 64-bit mode is supported.

Not all `std` features are supported, see [Using Rust's
std](https://edp.fortanix.com/docs/concepts/rust-std/) for details.

The `extern "C"` calling convention is the System V AMD64 ABI.

The supported ABI is the
[fortanix-sgx-abi](https://edp.fortanix.com/docs/api/fortanix_sgx_abi/index.html).

The compiler output is ELF, but the native format for the platform is the SGX
stream (SGXS) format. A converter like
[ftxsgx-elf2sgxs](https://crates.io/crates/fortanix-sgx-tools) is needed.

Programs in SGXS format adhering to the Fortanix SGX ABI can be run with any
compatible runner, such as
[ftxsgx-runner](https://crates.io/crates/fortanix-sgx-tools).

See the [EDP installation
guide](https://edp.fortanix.com/docs/installation/guide/) for recommendations
on how to setup a development and runtime environment.

## Building the target

As a tier 2 target, the target is built by the Rust project.

jethrogb marked this conversation as resolved.
Show resolved Hide resolved
You can configure rustbuild like so:

```toml
[build]
build-stage = 1
target = ["x86_64-fortanix-unknown-sgx"]
```

## Building Rust programs

Standard build flows using `cargo` or `rustc` should work.

## Testing

The Rust test suite as well as custom unit and integration tests will run on
hardware that has Intel SGX enabled if a cargo runner is configured correctly,
see the requirements section.

## Cross-compilation toolchains and C code

C code is not generally supported, as there is no libc. C code compiled for
x86-64 in freestanding mode using the System V AMD64 ABI may work. The
[rs-libc](https://crates.io/crates/rs-libc) crate contains a subset of libc
that's known to work with this target.
1 change: 1 addition & 0 deletions src/tools/linkchecker/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ impl Checker {
|| url.starts_with("ftp:")
|| url.starts_with("irc:")
|| url.starts_with("data:")
|| url.starts_with("mailto:")
{
report.links_ignored_external += 1;
return;
Expand Down