diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 644d33bd8887..90df8e5e0994 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -228,6 +228,10 @@ jobs: env: { TEST_MUSL_V1_2: 1 } artifact-tag: new-musl - target: riscv64gc-unknown-linux-gnu + - target: riscv64gc-unknown-linux-musl + - target: riscv64gc-unknown-linux-musl + env: { TEST_MUSL_V1_2: 1 } + artifact-tag: new-musl - target: s390x-unknown-linux-gnu - target: sparc64-unknown-linux-gnu - target: wasm32-unknown-emscripten diff --git a/Cargo.toml b/Cargo.toml index 56a782ffbffb..799faa047120 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,6 +52,7 @@ targets = [ "powerpc64le-unknown-linux-gnu", "powerpc64le-unknown-linux-musl", "riscv64gc-unknown-linux-gnu", + "riscv64gc-unknown-linux-musl", "s390x-unknown-linux-gnu", "sparcv9-sun-solaris", "x86_64-apple-darwin", @@ -85,7 +86,6 @@ targets = [ "i686-unknown-freebsd", "i686-unknown-linux-musl", "nvptx64-nvidia-cuda", - "riscv64gc-unknown-linux-musl", "sparc64-unknown-linux-gnu", "thumbv7neon-linux-androideabi", "thumbv7neon-unknown-linux-gnueabihf", diff --git a/ci/docker/riscv64gc-unknown-linux-musl/Dockerfile b/ci/docker/riscv64gc-unknown-linux-musl/Dockerfile new file mode 100644 index 000000000000..6890ff885488 --- /dev/null +++ b/ci/docker/riscv64gc-unknown-linux-musl/Dockerfile @@ -0,0 +1,24 @@ +FROM ubuntu:26.04 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + gcc \ + gcc-riscv64-linux-gnu \ + git \ + libc6-dev \ + make \ + patch \ + rsync \ + qemu-user \ + xz-utils + +ARG MUSL_VERSION +COPY . /ci +RUN ci/install-musl.sh riscv64 "$MUSL_VERSION" + +ENV PATH=$PATH:/musl-riscv64/bin:/rust/bin \ + CC_riscv64gc_unknown_linux_musl=musl-gcc \ + CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_MUSL_LINKER=musl-gcc \ + CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_MUSL_RUNNER="qemu-riscv64 -L /musl-riscv64" \ + EXTRA_RUSTFLAGS="-Ctarget-feature=+crt-static -Clink-args=-L/musl-riscv64/lib" diff --git a/ci/install-musl.sh b/ci/install-musl.sh index 8627f580facc..4d2a1ed50429 100755 --- a/ci/install-musl.sh +++ b/ci/install-musl.sh @@ -107,6 +107,13 @@ case ${1} in ./configure --prefix="/musl-${musl_arch}" --enable-wrapper=yes make install -j4 ;; + riscv64) + musl_arch=riscv64 + kernel_arch=riscv + CC=riscv64-linux-gnu-gcc \ + ./configure --prefix="/musl-${musl_arch}" --enable-wrapper=yes + make install -j4 + ;; *) echo "Unknown target arch: \"${1}\"" exit 1 diff --git a/ci/verify-build.py b/ci/verify-build.py index 14ee05a2cea4..cc5645b0a279 100755 --- a/ci/verify-build.py +++ b/ci/verify-build.py @@ -108,6 +108,7 @@ class TargetResult: Target("powerpc64le-unknown-linux-gnu"), Target("powerpc64le-unknown-linux-musl", min_toolchain=Toolchain.STABLE), Target("riscv64gc-unknown-linux-gnu"), + Target("riscv64gc-unknown-linux-musl", min_toolchain=Toolchain.STABLE), Target("s390x-unknown-linux-gnu"), Target("sparcv9-sun-solaris"), Target("x86_64-apple-darwin"), @@ -141,7 +142,6 @@ class TargetResult: Target("i686-unknown-freebsd"), Target("i686-unknown-linux-musl"), Target("nvptx64-nvidia-cuda", min_toolchain=Toolchain.STABLE), - Target("riscv64gc-unknown-linux-musl", min_toolchain=Toolchain.STABLE), Target("sparc64-unknown-linux-gnu"), Target("thumbv7neon-linux-androideabi", min_toolchain=Toolchain.STABLE), Target("thumbv7neon-unknown-linux-gnueabihf", min_toolchain=Toolchain.STABLE), diff --git a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs index 31f388d5c833..58f698f53750 100644 --- a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs @@ -52,12 +52,10 @@ s! { pub gid: crate::gid_t, pub cuid: crate::uid_t, pub cgid: crate::gid_t, - pub mode: c_ushort, - __pad1: Padding, - pub __seq: c_ushort, - __pad2: Padding, - __unused1: Padding, - __unused2: Padding, + pub mode: crate::mode_t, + pub __ipc_perm_seq: c_int, + __pad1: Padding, + __pad2: Padding, } #[repr(align(8))] @@ -78,7 +76,7 @@ s! { s_no_extra_traits! { pub struct ucontext_t { - pub __uc_flags: c_ulong, + pub uc_flags: c_ulong, pub uc_link: *mut ucontext_t, pub uc_stack: crate::stack_t, pub uc_sigmask: crate::sigset_t, @@ -414,6 +412,7 @@ pub const SYS_mount_setattr: c_long = 442; pub const SYS_landlock_create_ruleset: c_long = 444; pub const SYS_landlock_add_rule: c_long = 445; pub const SYS_landlock_restrict_self: c_long = 446; +pub const SYS_futex_waitv: c_long = 449; pub const O_APPEND: c_int = 1024; pub const O_DIRECT: c_int = 0x4000; @@ -649,12 +648,3 @@ pub const TOSTOP: crate::tcflag_t = 0x00000100; pub const FLUSHO: crate::tcflag_t = 0x00001000; pub const NGREG: usize = 32; -pub const REG_PC: usize = 0; -pub const REG_RA: usize = 1; -pub const REG_SP: usize = 2; -pub const REG_TP: usize = 4; -pub const REG_S0: usize = 8; -pub const REG_S1: usize = 9; -pub const REG_A0: usize = 10; -pub const REG_S2: usize = 18; -pub const REG_NARGS: usize = 8;