From 0e27b8f228a66ab37b11641617b848607debc541 Mon Sep 17 00:00:00 2001 From: Alex Zenla Date: Tue, 5 Mar 2024 16:37:36 -0800 Subject: [PATCH] krata: compile for aarch64 (aarch64 guests are not yet supported) --- .github/workflows/check.yml | 8 ++++---- initrd/build.sh | 7 ++++--- lefthook.toml | 8 ++++---- libs/advmac/src/lib.rs | 1 + scripts/bundle.sh | 5 +++-- scripts/cargo.sh | 8 ++++++++ scripts/detect-rust-target.sh | 30 ++++++++++++++++++++++++++++++ scripts/fix.sh | 2 +- scripts/krata-debug-common.sh | 5 +++-- shared/src/ethtool.rs | 4 ++++ 10 files changed, 62 insertions(+), 16 deletions(-) create mode 100755 scripts/cargo.sh create mode 100755 scripts/detect-rust-target.sh diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 1b9a67f..94a5972 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -7,14 +7,14 @@ jobs: steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - - run: cargo build --target x86_64-unknown-linux-gnu + - run: ./scripts/cargo.sh build test: name: cargo test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - - run: cargo test --target x86_64-unknown-linux-gnu + - run: ./scripts/cargo.sh test clippy: name: cargo clippy runs-on: ubuntu-latest @@ -23,7 +23,7 @@ jobs: - uses: dtolnay/rust-toolchain@stable with: components: clippy - - run: cargo clippy --target x86_64-unknown-linux-gnu + - run: ./scripts/cargo.sh clippy fmt: name: cargo fmt runs-on: ubuntu-latest @@ -32,4 +32,4 @@ jobs: - uses: dtolnay/rust-toolchain@stable with: components: rustfmt - - run: cargo fmt + - run: ./scripts/cargo.sh fmt --all -- --check diff --git a/initrd/build.sh b/initrd/build.sh index 36edc61..435dbf5 100755 --- a/initrd/build.sh +++ b/initrd/build.sh @@ -1,14 +1,15 @@ #!/usr/bin/env bash set -e -TARGET="x86_64-unknown-linux-gnu" +export RUST_LIBC="musl" +RUST_TARGET="$(./scripts/detect-rust-target.sh)" export RUSTFLAGS="-Ctarget-feature=+crt-static" cd "$(dirname "${0}")/.." KRATA_DIR="${PWD}" -cargo build -q --bin krataguest --release --target "${TARGET}" +./scripts/cargo.sh build -q --release --bin krataguest INITRD_DIR="$(mktemp -d /tmp/krata-initrd.XXXXXXXXXXXXX)" -cp "target/${TARGET}/release/krataguest" "${INITRD_DIR}/init" +cp "target/${RUST_TARGET}/release/krataguest" "${INITRD_DIR}/init" chmod +x "${INITRD_DIR}/init" cd "${INITRD_DIR}" mkdir -p "${KRATA_DIR}/initrd/target" diff --git a/lefthook.toml b/lefthook.toml index 42dd89d..a6d63c6 100644 --- a/lefthook.toml +++ b/lefthook.toml @@ -2,13 +2,13 @@ parallel = true [pre-commit.commands.build] -run = "cargo build --target x86_64-unknown-linux-gnu" +run = "./scripts/cargo.sh build" [pre-commit.commands.test] -run = "cargo test --target x86_64-unknown-linux-gnu" +run = "./scripts/cargo.sh test" [pre-commit.commands.fmt] -run = "cargo fmt --all -- --check" +run = "./scripts/cargo.sh fmt --all -- --check" [pre-commit.commands.clippy] -run = "cargo clippy --target x86_64-unknown-linux-gnu" +run = "./scripts/cargo.sh clippy" diff --git a/libs/advmac/src/lib.rs b/libs/advmac/src/lib.rs index ff8b5d8..b399459 100644 --- a/libs/advmac/src/lib.rs +++ b/libs/advmac/src/lib.rs @@ -234,6 +234,7 @@ macro_rules! mac_impl { } } + #[cfg(not(target_arch = "aarch64"))] impl TryFrom<&[core::ffi::c_char]> for $nm { type Error = ParseError; diff --git a/scripts/bundle.sh b/scripts/bundle.sh index a8fb250..ea05343 100755 --- a/scripts/bundle.sh +++ b/scripts/bundle.sh @@ -14,8 +14,9 @@ BUNDLE_DIR="${BUNDLE_DIR}/krata" mkdir -p "${BUNDLE_DIR}" for X in kratad kratanet kratactl do - cargo build --release --target x86_64-unknown-linux-gnu --bin "${X}" - cp "${KRATA_DIR}/target/x86_64-unknown-linux-gnu/release/${X}" "${BUNDLE_DIR}/${X}" + ./scripts/cargo.sh build --release --bin "${X}" + RUST_TARGET="$(./scripts/detect-rust-target.sh)" + cp "${KRATA_DIR}/target/${RUST_TARGET}/release/${X}" "${BUNDLE_DIR}/${X}" done ./initrd/build.sh if [ "${KRATA_BUNDLE_SKIP_KERNEL_BUILD}" != "1" ] diff --git a/scripts/cargo.sh b/scripts/cargo.sh new file mode 100755 index 0000000..86a2c71 --- /dev/null +++ b/scripts/cargo.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +SCRIPTS_DIR="$(dirname "${0}")" +RUST_TARGET="$("${SCRIPTS_DIR}/detect-rust-target.sh")" + +export CARGO_BUILD_TARGET="${RUST_TARGET}" +exec cargo "${@}" diff --git a/scripts/detect-rust-target.sh b/scripts/detect-rust-target.sh new file mode 100755 index 0000000..58dfc17 --- /dev/null +++ b/scripts/detect-rust-target.sh @@ -0,0 +1,30 @@ +#!/bin/sh +set -e + +if [ -z "${RUST_LIBC}" ] +then + RUST_LIBC="gnu" +fi + +if [ -z "${RUST_TARGET}" ] +then + HOST_ARCH="$(uname -m)" + if [ "${HOST_ARCH}" = "x86_64" ] + then + RUST_TARGET="x86_64-unknown-linux-${RUST_LIBC}" + fi + + if [ "${HOST_ARCH}" = "aarch64" ] + then + RUST_TARGET="aarch64-unknown-linux-${RUST_LIBC}" + fi + +fi + +if [ -z "${RUST_TARGET}" ] +then + echo "ERROR: Unable to determine RUST_TARGET, your architecture may not be supported by krata." > /dev/stderr + exit 1 +fi + +echo "${RUST_TARGET}" diff --git a/scripts/fix.sh b/scripts/fix.sh index e8a73d2..ed6958a 100755 --- a/scripts/fix.sh +++ b/scripts/fix.sh @@ -2,5 +2,5 @@ set -e cd "$(dirname "${0}")/.." -cargo clippy --target x86_64-unknown-linux-gnu --fix --allow-dirty --allow-staged +./scripts/cargo.sh clippy --fix --allow-dirty --allow-staged cargo fmt --all diff --git a/scripts/krata-debug-common.sh b/scripts/krata-debug-common.sh index 8a92156..1c7f9df 100644 --- a/scripts/krata-debug-common.sh +++ b/scripts/krata-debug-common.sh @@ -24,6 +24,7 @@ build_and_run() { ./initrd/build.sh -q sudo cp "target/initrd/initrd" "/var/lib/krata/default/initrd" fi - cargo build ${CARGO_BUILD_FLAGS} --target x86_64-unknown-linux-gnu --bin "${EXE_TARGET}" - exec sudo RUST_LOG="${RUST_LOG}" "target/x86_64-unknown-linux-gnu/debug/${EXE_TARGET}" "${@}" + RUST_TARGET="$(./scripts/detect-rust-target.sh)" + ./scripts/cargo.sh build ${CARGO_BUILD_FLAGS} --bin "${EXE_TARGET}" + exec sudo RUST_LOG="${RUST_LOG}" "target/${RUST_TARGET}/debug/${EXE_TARGET}" "${@}" } diff --git a/shared/src/ethtool.rs b/shared/src/ethtool.rs index ce5b0b9..d6f1535 100644 --- a/shared/src/ethtool.rs +++ b/shared/src/ethtool.rs @@ -14,7 +14,11 @@ struct EthtoolValue { const ETHTOOL_SGSO: u32 = 0x00000024; const ETHTOOL_STSO: u32 = 0x0000001f; + +#[cfg(not(target_env = "musl"))] const SIOCETHTOOL: libc::c_ulong = libc::SIOCETHTOOL; +#[cfg(target_env = "musl")] +const SIOCETHTOOL: libc::c_int = libc::SIOCETHTOOL as i32; #[repr(C)] #[derive(Debug)]