diff --git a/.cargo/config.toml b/.cargo/config.toml index 14ab1c84f..0ad437300 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,8 +1,13 @@ # Copyright 2024, UNSW # SPDX-License-Identifier: BSD-2-Clause +## Microkit Tool ## [target.aarch64-unknown-linux-musl] rustflags = ["-Clinker=rust-lld"] [target.x86_64-unknown-linux-musl] rustflags = ["-Clinker=rust-lld"] + +## Initialiser ## +[target.x86_64-unknown-none] +rustflags = ["-C", "relocation-model=static"] diff --git a/.github/workflows/sdk.yaml b/.github/workflows/sdk.yaml index 7883f43e8..71708008f 100644 --- a/.github/workflows/sdk.yaml +++ b/.github/workflows/sdk.yaml @@ -47,6 +47,9 @@ jobs: rustup default 1.94.0 rustup target add x86_64-unknown-linux-musl rustup component add rust-src --toolchain 1.94.0-x86_64-unknown-linux-gnu + rustup target add aarch64-unknown-none + rustup target add riscv64gc-unknown-none-elf + rustup target add x86_64-unknown-none sudo apt update sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa diff --git a/build_sdk.py b/build_sdk.py index ac8cd1b77..c631b7e43 100644 --- a/build_sdk.py +++ b/build_sdk.py @@ -88,11 +88,11 @@ def target_triple(self) -> str: def rust_toolchain(self) -> str: if self == KernelArch.AARCH64: - return f"{self.to_str()}-sel4-minimal" + return f"aarch64-unknown-none" elif self == KernelArch.RISCV64: - return f"{self.to_str()}imac-sel4-minimal" + return f"riscv64gc-unknown-none-elf" elif self == KernelArch.X86_64: - return f"{self.to_str()}-sel4-minimal" + return f"x86_64-unknown-none" else: raise Exception(f"Unsupported toolchain target triple '{self}'") @@ -804,9 +804,7 @@ def build_initialiser( ) -> None: sel4_src_dir = build_dir / board.name / config.name / "sel4" / "install" - cargo_cross_options = "-Z build-std=core,alloc,compiler_builtins -Z build-std-features=compiler-builtins-mem" cargo_target = board.arch.rust_toolchain() - rust_target_path = Path("initialiser/support/targets").absolute() dest = ( root_dir / "board" / board.name / config.name / "elf" / f"{component_name}.elf" @@ -819,11 +817,10 @@ def build_initialiser( component_build_dir = build_dir / board.name / config.name / component_name component_build_dir.mkdir(exist_ok=True, parents=True) - capdl_init_elf = rust_target_dir / cargo_target / "release" / "initialiser.elf" r = system(f""" RUSTC_BOOTSTRAP=1 \ - RUST_TARGET_PATH={rust_target_path} SEL4_PREFIX={sel4_src_dir.absolute()} \ - cargo build {cargo_cross_options} \ + SEL4_PREFIX={sel4_src_dir.absolute()} \ + cargo build \ --target {cargo_target} \ --locked \ --target-dir {rust_target_dir} \ @@ -836,6 +833,7 @@ def build_initialiser( ) dest.unlink(missing_ok=True) + capdl_init_elf = rust_target_dir / cargo_target / "release" / "initialiser" shutil.copy(capdl_init_elf, dest) # Make output read-only dest.chmod(0o744) diff --git a/flake.nix b/flake.nix index 0654abedb..a65ae4b9b 100644 --- a/flake.nix +++ b/flake.nix @@ -62,9 +62,16 @@ aarch64-linux = []; }.${system} or (throw "Unsupported system: ${system}"); + # For the initialiser + crossTargets = [ + "aarch64-unknown-none" + "riscv64gc-unknown-none-elf" + "x86_64-unknown-none" + ]; + rustTool = pkgs.rust-bin.stable.${microkitToolVersion}.default.override { extensions = [ "rust-src" ]; - targets = [ pkgs.pkgsStatic.stdenv.hostPlatform.rust.rustcTarget ] ++ rustAdditionalTargets; + targets = [ pkgs.pkgsStatic.stdenv.hostPlatform.rust.rustcTarget ] ++ rustAdditionalTargets ++ crossTargets; }; in { diff --git a/initialiser/support/targets/aarch64-sel4-minimal.json b/initialiser/support/targets/aarch64-sel4-minimal.json deleted file mode 100644 index 96c14fa07..000000000 --- a/initialiser/support/targets/aarch64-sel4-minimal.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon,+fp-armv8", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/initialiser/support/targets/riscv64imac-sel4-minimal.json b/initialiser/support/targets/riscv64imac-sel4-minimal.json deleted file mode 100644 index 6e6803eda..000000000 --- a/initialiser/support/targets/riscv64imac-sel4-minimal.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/initialiser/support/targets/x86_64-sel4-minimal.json b/initialiser/support/targets/x86_64-sel4-minimal.json deleted file mode 100644 index 6266d15e8..000000000 --- a/initialiser/support/targets/x86_64-sel4-minimal.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "small", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "x86_64-unknown-none-elf", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "plt-by-default": false, - "relro-level": "full", - "rustc-abi": "x86-softfloat", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-pointer-width": 64 -}