From 86fcd19b8af39327dcd06102bab772f4496d1e6e Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Mon, 20 Apr 2020 08:07:17 +0200 Subject: [PATCH] build: Initial musl support Fix all build failures and add musl to the gihub workflows. Signed-off-by: Samuel Ortiz --- .github/workflows/build.yaml | 6 +++++- .github/workflows/release.yaml | 27 ++++++++++++++++++++++----- vhost_user_fs/src/passthrough.rs | 8 ++++---- vmm/src/cpu.rs | 2 +- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 48aef5b6f..8c6ad982f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -12,6 +12,9 @@ jobs: - stable - beta - nightly + target: + - x86_64-unknown-linux-gnu + - x86_64-unknown-linux-musl steps: - name: Code checkout uses: actions/checkout@v2 @@ -19,7 +22,8 @@ jobs: uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} + target: ${{ matrix.target }} override: true - name: Build - run: cargo build --release + run: cargo build --release --target=${{ matrix.target }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 7178e7fe7..2bdd3db6d 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -9,13 +9,20 @@ jobs: steps: - name: Code checkout uses: actions/checkout@v2 - - name: Install Rust toolchain (stable) + - name: Install Rust toolchain (x86_64-unknown-linux-gnu) uses: actions-rs/toolchain@v1 with: toolchain: stable - override: true + target: x86_64-unknown-linux-gnu + - name: Install Rust toolchain (x86_64-unknown-linux-musl) + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: x86_64-unknown-linux-musl - name: Build - run: cargo build --release + run: cargo build --release --target=x86_64-unknown-linux-gnu + - name: Static Build + run: cargo build --release --target=x86_64-unknown-linux-musl - name: Create Release id: create_release uses: actions/create-release@v1 @@ -33,9 +40,19 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: target/release/cloud-hypervisor + asset_path: target/x86_64-unknown-linux-gnu/release/cloud-hypervisor asset_name: cloud-hypervisor asset_content_type: application/octet-stream + - name: Upload static cloud-hypervisor + id: upload-release-static-cloud-hypervisor + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: target/x86_64-unknown-linux-musl/release/cloud-hypervisor + asset_name: cloud-hypervisor-static + asset_content_type: application/octet-stream - name: Upload ch-remote id: upload-release-ch-remote uses: actions/upload-release-asset@v1 @@ -43,6 +60,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: target/release/ch-remote + asset_path: target/x86_64-unknown-linux-gnu/release/ch-remote asset_name: ch-remote asset_content_type: application/octet-stream diff --git a/vhost_user_fs/src/passthrough.rs b/vhost_user_fs/src/passthrough.rs index dceaf6b0a..a93443b4f 100644 --- a/vhost_user_fs/src/passthrough.rs +++ b/vhost_user_fs/src/passthrough.rs @@ -4,7 +4,6 @@ use std::collections::btree_map; use std::collections::BTreeMap; -use std::convert::TryInto; use std::ffi::{CStr, CString}; use std::fs::File; use std::io; @@ -1695,13 +1694,14 @@ impl FileSystem for PassthroughFs { // Safe because this will only modify `offset_in` and `offset_out` and we check // the return value. let res = unsafe { - libc::copy_file_range( + libc::syscall( + libc::SYS_copy_file_range, fd_in, &mut (offset_in as i64) as &mut _ as *mut _, fd_out, &mut (offset_out as i64) as &mut _ as *mut _, - len.try_into().unwrap(), - flags.try_into().unwrap(), + len, + flags, ) }; if res < 0 { diff --git a/vmm/src/cpu.rs b/vmm/src/cpu.rs index 99b38e490..05047a371 100644 --- a/vmm/src/cpu.rs +++ b/vmm/src/cpu.rs @@ -671,7 +671,7 @@ impl VcpuState { fn signal_thread(&self) { if let Some(handle) = self.handle.as_ref() { unsafe { - libc::pthread_kill(handle.as_pthread_t(), SIGRTMIN()); + libc::pthread_kill(handle.as_pthread_t() as _, SIGRTMIN()); } } }