1
0
Fork 0
forked from wry/wry

Merge pull request #455 from elde-n/master

add musl support
This commit is contained in:
mahkoh 2025-05-09 15:42:11 +02:00 committed by GitHub
commit eb4b93afed
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 65 additions and 35 deletions

12
.builds/check-musl.yml Normal file
View file

@ -0,0 +1,12 @@
image: archlinux
sources:
- https://github.com/mahkoh/jay
tasks:
- install: |
sudo pacman -Syu --noconfirm
sudo pacman -S --noconfirm rustup shaderc musl
rustup toolchain install stable
rustup target install x86_64-unknown-linux-musl
- build: |
cd jay
cargo check --target x86_64-unknown-linux-musl

33
Cargo.lock generated
View file

@ -578,6 +578,7 @@ dependencies = [
"bstr",
"byteorder",
"cc",
"cfg-if",
"chrono",
"clap",
"clap_complete",
@ -749,6 +750,15 @@ dependencies = [
"syn 2.0.96",
]
[[package]]
name = "link-cplusplus"
version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a6f6da007f968f9def0d65a05b187e2960183de70c160204ecfccf0ee330212"
dependencies = [
"cc",
]
[[package]]
name = "linux-raw-sys"
version = "0.4.15"
@ -1088,12 +1098,9 @@ checksum = "9e110b7d5a1335c2e801176c42a626a905c23eecdee104d9bdfbd6ea5f0b8368"
[[package]]
name = "roxmltree"
version = "0.14.1"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "921904a62e410e37e215c40381b7117f830d9d89ba60ab5236170541dd25646b"
dependencies = [
"xmlparser",
]
checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
[[package]]
name = "run-on-drop"
@ -1204,9 +1211,9 @@ dependencies = [
[[package]]
name = "shaderc"
version = "0.8.3"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "27e07913ada18607bb60d12431cbe3358d3bbebbe95948e1618851dc01e63b7b"
checksum = "1cdc8a26f751f141968dbc08fc01cfa3f4a288351f81cfd9148db41aa189f635"
dependencies = [
"libc",
"shaderc-sys",
@ -1214,12 +1221,14 @@ dependencies = [
[[package]]
name = "shaderc-sys"
version = "0.8.3"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73120d240fe22196300f39ca8547ca2d014960f27b19b47b21288b396272f7f7"
checksum = "275f0ea572da7183c0cd0a060ba67c9fb54934523d4c9a9494ce5828c533d40b"
dependencies = [
"cmake",
"libc",
"link-cplusplus",
"pkg-config",
"roxmltree",
]
@ -1656,12 +1665,6 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "xmlparser"
version = "0.13.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4"
[[package]]
name = "zerocopy"
version = "0.7.35"

View file

@ -64,12 +64,13 @@ tracy-client-sys = { version = "0.24.1", features = ["ondemand", "manual-lifetim
kbvm = "0.1.4"
tiny-skia = { version = "0.11.4", default-features = false, features = ["std"] }
regex = "1.11.1"
cfg-if = "1.0.0"
[build-dependencies]
repc = "0.1.1"
anyhow = "1.0.79"
bstr = { version = "1.9.0", default-features = false, features = ["std"] }
shaderc = "0.8.3"
shaderc = "0.9.1"
cc = "1.0.86"
#[profile.dev.build-override]

View file

@ -6,7 +6,7 @@ use {
sys::{IORING_OP_SENDMSG, io_uring_sqe},
},
time::Time,
utils::{buf::Buf, vec_ext::UninitVecExt},
utils::{buf::Buf, compat::IovLength, vec_ext::UninitVecExt},
},
std::{mem::MaybeUninit, ptr, rc::Rc},
uapi::{OwnedFd, c},
@ -44,11 +44,9 @@ impl IoUring {
st.cmsg.clear();
st.cmsg.reserve(space);
st.cmsg.set_len_safe(space);
let hdr = c::cmsghdr {
cmsg_len: 0,
cmsg_level: c::SOL_SOCKET,
cmsg_type: c::SCM_RIGHTS,
};
let mut hdr: c::cmsghdr = uapi::pod_zeroed();
hdr.cmsg_level = c::SOL_SOCKET;
hdr.cmsg_type = c::SCM_RIGHTS;
uapi::cmsg_write(&mut &mut st.cmsg[..], hdr, &fd_ids[..]).unwrap();
st.msghdr.msg_control = st.cmsg.as_ptr() as _;
st.msghdr.msg_controllen = st.cmsg.len() as _;
@ -66,7 +64,7 @@ impl IoUring {
iov_len: b.len(),
}));
st.msghdr.msg_iov = st.iovecs.as_ptr() as _;
st.msghdr.msg_iovlen = st.iovecs.len();
st.msghdr.msg_iovlen = st.iovecs.len() as IovLength;
st.data = Some(SendmsgTaskData {
_fd: fd.clone(),
res: pr.clone(),

View file

@ -2,7 +2,7 @@ use {
crate::{
allocator::{Allocator, AllocatorError, BufferObject, BufferUsage, MappedBuffer},
format::Format,
utils::{oserror::OsError, page_size::page_size},
utils::{compat::IoctlNumber, oserror::OsError, page_size::page_size},
video::{
LINEAR_MODIFIER, Modifier,
dmabuf::{DmaBuf, DmaBufIds, DmaBufPlane, PlaneVec},
@ -267,4 +267,4 @@ struct udmabuf_create {
size: u64,
}
const UDMABUF_CREATE: u64 = _IOW::<udmabuf_create>(b'u' as u64, 0x42);
const UDMABUF_CREATE: IoctlNumber = _IOW::<udmabuf_create>(b'u' as u64, 0x42) as IoctlNumber;

View file

@ -11,6 +11,7 @@ pub mod bufio;
pub mod cell_ext;
pub mod clone3;
pub mod clonecell;
pub mod compat;
pub mod copyhashmap;
pub mod debug_fn;
pub mod double_buffered;

View file

@ -100,11 +100,9 @@ pub fn double_fork() -> Result<Option<OwnedFd>, ForkerError> {
Forked::Parent { pidfd, .. } => {
let pidfd = pidfd.raw();
let mut buf = [MaybeUninit::uninit(); 128];
let hdr = c::cmsghdr {
cmsg_len: 0,
cmsg_level: c::SOL_SOCKET,
cmsg_type: c::SCM_RIGHTS,
};
let mut hdr: c::cmsghdr = uapi::pod_zeroed();
hdr.cmsg_level = c::SOL_SOCKET;
hdr.cmsg_type = c::SCM_RIGHTS;
let _ = uapi::cmsg_write(&mut &mut buf[..], hdr, &pidfd);
let iov: &[&[u8]] = &[];
let msghdr = Msghdr {

11
src/utils/compat.rs Normal file
View file

@ -0,0 +1,11 @@
use {cfg_if::cfg_if, uapi::c};
cfg_if! {
if #[cfg(target_env = "musl")] {
pub type IoctlNumber = c::c_int;
pub type IovLength = c::c_int;
} else {
pub type IoctlNumber = c::c_ulong;
pub type IovLength = usize;
}
}

View file

@ -1,5 +1,9 @@
use {
crate::{format::Format, utils::oserror::OsError, video::Modifier},
crate::{
format::Format,
utils::{compat::IoctlNumber, oserror::OsError},
video::Modifier,
},
arrayvec::ArrayVec,
std::rc::Rc,
uapi::{_IOW, _IOWR, OwnedFd, c::ioctl},
@ -74,8 +78,10 @@ struct dma_buf_import_sync_file {
pub const DMA_BUF_SYNC_READ: u32 = 1 << 0;
pub const DMA_BUF_SYNC_WRITE: u32 = 1 << 1;
const DMA_BUF_IOCTL_EXPORT_SYNC_FILE: u64 = _IOWR::<dma_buf_export_sync_file>(DMA_BUF_BASE, 2);
const DMA_BUF_IOCTL_IMPORT_SYNC_FILE: u64 = _IOW::<dma_buf_import_sync_file>(DMA_BUF_BASE, 3);
const DMA_BUF_IOCTL_EXPORT_SYNC_FILE: IoctlNumber =
_IOWR::<dma_buf_export_sync_file>(DMA_BUF_BASE, 2) as IoctlNumber;
const DMA_BUF_IOCTL_IMPORT_SYNC_FILE: IoctlNumber =
_IOW::<dma_buf_import_sync_file>(DMA_BUF_BASE, 3) as IoctlNumber;
pub fn dma_buf_export_sync_file(dmabuf: &OwnedFd, flags: u32) -> Result<OwnedFd, OsError> {
let mut data = dma_buf_export_sync_file { flags, fd: -1 };

View file

@ -3,7 +3,7 @@
use {
crate::{
utils::{bitflags::BitflagsExt, oserror::OsError},
utils::{bitflags::BitflagsExt, compat::IoctlNumber, oserror::OsError},
video::drm::{
DrmBlob, DrmCardResources, DrmConnector, DrmConnectorInfo, DrmCrtc, DrmEncoder,
DrmEncoderInfo, DrmError, DrmFb, DrmModeInfo, DrmPlane, DrmPlaneInfo, DrmProperty,
@ -23,7 +23,7 @@ use {
pub unsafe fn ioctl<T>(fd: c::c_int, request: c::c_ulong, t: &mut T) -> Result<c::c_int, OsError> {
let mut ret;
loop {
ret = unsafe { c::ioctl(fd, request, &mut *t) };
ret = unsafe { c::ioctl(fd, request as IoctlNumber, &mut *t) };
if ret != -1 {
return Ok(ret);
}