Skip to content

Commit d2b0cf3

Browse files
Add support for linux_raw on armbe8 and aarch64_be with 'RUSTFLAGS=--cfg=rustix_use_untested_linux_raw'
1 parent 0ba124f commit d2b0cf3

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

.github/workflows/main.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@ jobs:
218218
# See the comments in the libc crate
219219
RUSTFLAGS: -A improper_ctypes_definitions --cfg criterion
220220
- run: rustup component add rust-src
221+
- run: cargo check -Z build-std --target=armeb-unknown-linux-gnueabi --all-targets --features=all-apis
222+
env:
223+
RUSTFLAGS: "--cfg=rustix_use_untested_linux_raw"
224+
- run: cargo check -Z build-std --target=aarch64_be-unknown-linux-gnu --all-targets --features=all-apis
225+
env:
226+
RUSTFLAGS: "--cfg=rustix_use_untested_linux_raw"
221227
- run: cargo check -Z build-std --target x86_64-unknown-openbsd --all-targets --features=all-apis
222228
- run: cargo check -Z build-std --target mips64-openwrt-linux-musl --all-targets --features=all-apis
223229
- run: cargo check -Z build-std --target x86_64-unknown-dragonfly --all-targets --features=all-apis

Cargo.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ rustc-std-workspace-alloc = { version = "1.0.0", optional = true } # not aliased
2828
# addition to the libc backend. The linux_raw backend is used by default. The
2929
# libc backend can be selected via adding `--cfg=rustix_use_libc` to
3030
# `RUSTFLAGS` or enabling the `use-libc` cargo feature.
31-
[target.'cfg(all(not(rustix_use_libc), not(miri), target_os = "linux", any(target_endian = "little", any(target_arch = "s390x", target_arch = "powerpc")), any(target_arch = "arm", all(target_arch = "aarch64", target_pointer_width = "64"), target_arch = "riscv64", all(rustix_use_experimental_asm, target_arch = "powerpc"), all(rustix_use_experimental_asm, target_arch = "powerpc64"), all(rustix_use_experimental_asm, target_arch = "s390x"), all(rustix_use_experimental_asm, target_arch = "mips"), all(rustix_use_experimental_asm, target_arch = "mips32r6"), all(rustix_use_experimental_asm, target_arch = "mips64"), all(rustix_use_experimental_asm, target_arch = "mips64r6"), target_arch = "x86", all(target_arch = "x86_64", target_pointer_width = "64"))))'.dependencies]
31+
[target.'cfg(all(not(rustix_use_libc), not(miri), target_os = "linux", any(target_endian = "little", any(target_arch = "s390x", target_arch = "powerpc"), all(rustix_use_untested_linux_raw, target_endian = "big", any(target_arch = "arm", target_arch = "aarch64"))), any(target_arch = "arm", all(target_arch = "aarch64", target_pointer_width = "64"), target_arch = "riscv64", all(rustix_use_experimental_asm, target_arch = "powerpc"), all(rustix_use_experimental_asm, target_arch = "powerpc64"), all(rustix_use_experimental_asm, target_arch = "s390x"), all(rustix_use_experimental_asm, target_arch = "mips"), all(rustix_use_experimental_asm, target_arch = "mips32r6"), all(rustix_use_experimental_asm, target_arch = "mips64"), all(rustix_use_experimental_asm, target_arch = "mips64r6"), target_arch = "x86", all(target_arch = "x86_64", target_pointer_width = "64"))))'.dependencies]
3232
linux-raw-sys = { version = "0.9.2", default-features = false, features = ["general", "errno", "ioctl", "no_std", "elf"] }
3333
libc_errno = { package = "errno", version = "0.3.10", default-features = false, optional = true }
3434
libc = { version = "0.2.171", default-features = false, optional = true }
@@ -37,15 +37,15 @@ libc = { version = "0.2.171", default-features = false, optional = true }
3737
#
3838
# On all other Unix-family platforms, and under Miri, we always use the libc
3939
# backend, so enable its dependencies unconditionally.
40-
[target.'cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = "linux", any(target_endian = "little", any(target_arch = "s390x", target_arch = "powerpc")), any(target_arch = "arm", all(target_arch = "aarch64", target_pointer_width = "64"), target_arch = "riscv64", all(rustix_use_experimental_asm, target_arch = "powerpc"), all(rustix_use_experimental_asm, target_arch = "powerpc64"), all(rustix_use_experimental_asm, target_arch = "s390x"), all(rustix_use_experimental_asm, target_arch = "mips"), all(rustix_use_experimental_asm, target_arch = "mips32r6"), all(rustix_use_experimental_asm, target_arch = "mips64"), all(rustix_use_experimental_asm, target_arch = "mips64r6"), target_arch = "x86", all(target_arch = "x86_64", target_pointer_width = "64")))))))'.dependencies]
40+
[target.'cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = "linux", any(target_endian = "little", any(target_arch = "s390x", target_arch = "powerpc"), all(rustix_use_untested_linux_raw, target_endian = "big", any(target_arch = "arm", target_arch = "aarch64"))), any(target_arch = "arm", all(target_arch = "aarch64", target_pointer_width = "64"), target_arch = "riscv64", all(rustix_use_experimental_asm, target_arch = "powerpc"), all(rustix_use_experimental_asm, target_arch = "powerpc64"), all(rustix_use_experimental_asm, target_arch = "s390x"), all(rustix_use_experimental_asm, target_arch = "mips"), all(rustix_use_experimental_asm, target_arch = "mips32r6"), all(rustix_use_experimental_asm, target_arch = "mips64"), all(rustix_use_experimental_asm, target_arch = "mips64r6"), target_arch = "x86", all(target_arch = "x86_64", target_pointer_width = "64")))))))'.dependencies]
4141
libc_errno = { package = "errno", version = "0.3.10", default-features = false }
4242
libc = { version = "0.2.171", default-features = false }
4343

4444
# Additional dependencies for Linux with the libc backend:
4545
#
4646
# Some syscalls do not have libc wrappers, such as in `io_uring`. For these,
4747
# the libc backend uses the linux-raw-sys ABI and `libc::syscall`.
48-
[target.'cfg(all(any(target_os = "android", target_os = "linux"), any(rustix_use_libc, miri, not(all(target_os = "linux", any(target_endian = "little", any(target_arch = "s390x", target_arch = "powerpc")), any(target_arch = "arm", all(target_arch = "aarch64", target_pointer_width = "64"), target_arch = "riscv64", all(rustix_use_experimental_asm, target_arch = "powerpc"), all(rustix_use_experimental_asm, target_arch = "powerpc64"), all(rustix_use_experimental_asm, target_arch = "s390x"), all(rustix_use_experimental_asm, target_arch = "mips"), all(rustix_use_experimental_asm, target_arch = "mips32r6"), all(rustix_use_experimental_asm, target_arch = "mips64"), all(rustix_use_experimental_asm, target_arch = "mips64r6"), target_arch = "x86", all(target_arch = "x86_64", target_pointer_width = "64")))))))'.dependencies]
48+
[target.'cfg(all(any(target_os = "android", target_os = "linux"), any(rustix_use_libc, miri, not(all(target_os = "linux", any(target_endian = "little", any(target_arch = "s390x", target_arch = "powerpc"), all(rustix_use_untested_linux_raw, target_endian = "big", any(target_arch = "arm", target_arch = "aarch64"))), any(target_arch = "arm", all(target_arch = "aarch64", target_pointer_width = "64"), target_arch = "riscv64", all(rustix_use_experimental_asm, target_arch = "powerpc"), all(rustix_use_experimental_asm, target_arch = "powerpc64"), all(rustix_use_experimental_asm, target_arch = "s390x"), all(rustix_use_experimental_asm, target_arch = "mips"), all(rustix_use_experimental_asm, target_arch = "mips32r6"), all(rustix_use_experimental_asm, target_arch = "mips64"), all(rustix_use_experimental_asm, target_arch = "mips64r6"), target_arch = "x86", all(target_arch = "x86_64", target_pointer_width = "64")))))))'.dependencies]
4949
linux-raw-sys = { version = "0.9.2", default-features = false, features = ["general", "ioctl", "no_std"] }
5050

5151
# For the libc backend on Windows, use the Winsock API in windows-sys.
@@ -243,6 +243,7 @@ check-cfg = [
243243
'cfg(alloc_ffi)',
244244
'cfg(apple)',
245245
'cfg(asm_experimental_arch)',
246+
'cfg(untested_linux_raw)',
246247
'cfg(bsd)',
247248
'cfg(core_c_str)',
248249
'cfg(core_ffi_c)',

build.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ fn main() {
5050
// and not something we want accidentally enabled via `--all-features`.
5151
let rustix_use_experimental_asm = var("CARGO_CFG_RUSTIX_USE_EXPERIMENTAL_ASM").is_ok();
5252

53+
// Check for eg. `RUSTFLAGS=--cfg=rustix_use_untested_linux_raw`. This is a
54+
// rustc flag rather than a cargo feature flag because it's experimental
55+
// and not something we want accidentally enabled via `--all-features`.
56+
// This setting is as a result of CI testing of the linux_raw backend being
57+
// complex as a result of the requirement for a custom toolchain for which
58+
// binary distributions are not avaialble.
59+
let rustix_use_untested_linux_raw = var("CARGO_CFG_RUSTIX_USE_UNTESTED_LINUX_RAW").is_ok();
60+
5361
// Miri doesn't support inline asm, and has builtin support for recognizing
5462
// libc FFI calls, so if we're running under miri, use the libc backend.
5563
let miri = var("CARGO_CFG_MIRI").is_ok();
@@ -102,11 +110,14 @@ fn main() {
102110
|| !inline_asm_name_present
103111
|| is_unsupported_abi
104112
|| miri
105-
|| ((arch == "powerpc"
113+
|| (arch == "powerpc"
106114
|| arch == "powerpc64"
107115
|| arch == "s390x"
108116
|| arch.starts_with("mips"))
109-
&& !rustix_use_experimental_asm);
117+
&& !rustix_use_experimental_asm
118+
|| (endian == "big"
119+
&& (arch == "arm" || arch == "aarch64")
120+
&& !rustix_use_untested_linux_raw);
110121
if libc {
111122
// Use the libc backend.
112123
use_feature("libc");
@@ -174,6 +185,7 @@ fn main() {
174185
}
175186

176187
println!("cargo:rerun-if-env-changed=CARGO_CFG_RUSTIX_USE_EXPERIMENTAL_ASM");
188+
println!("cargo:rerun-if-env-changed=CARGO_CFG_RUSTIX_USE_UNTESTED_LINUX_RAW");
177189
println!("cargo:rerun-if-env-changed=CARGO_CFG_RUSTIX_USE_LIBC");
178190

179191
// Rerun this script if any of our features or configuration flags change,

0 commit comments

Comments
 (0)