diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 32bae5e..fcd39ad 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -13,7 +13,6 @@ env: RUSTFLAGS: "-Dwarnings" jobs: - build-gnu-apt: runs-on: ubuntu-latest steps: @@ -40,6 +39,24 @@ jobs: - name: build example -- glibc debug run: cd example && make clean && make TARGET=aarch64-unknown-linux-gnu PROFILE=debug + # this _should_ have been -stable, but there is a bug when running in the container ("Invalid cross-device link") + build-musl-beta: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Update repos + run: sudo apt-get update -qq + - name: Install toolchain + run: sudo apt-get install -qy liblzma-dev gcc make pkgconf musl-dev musl-tools rustup + - name: install rust target + run: rustup default beta && rustup target add aarch64-unknown-linux-musl && rustup component add rust-src && rustup update + + - name: build example -- musl release + run: cd example && make clean && make TARGET=aarch64-unknown-linux-musl PROFILE=release MUSL=1 CARGO="rustup run beta cargo" + - name: build example -- musl debug + run: cd example && make clean && make TARGET=aarch64-unknown-linux-musl PROFILE=debug MUSL=1 CARGO="rustup run beta cargo" + build-size-gnu-unstable: runs-on: ubuntu-latest steps: @@ -54,3 +71,19 @@ jobs: - name: build example -- glibc size-optimized run: cd example && make clean && make TARGET=aarch64-unknown-linux-gnu PROFILE=size-optimized CARGO="rustup run nightly cargo" + + + build-size-musl-unstable: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Update repos + run: sudo apt-get update -qq + - name: Install toolchain + run: sudo apt-get install -qy liblzma-dev gcc make pkgconf musl-dev musl-tools rustup + - name: install rust targets + run: rustup toolchain install nightly -t aarch64-unknown-linux-musl -c rust-src --no-self-update + + - name: build example -- musl size-optimized + run: cd example && make clean && make TARGET=aarch64-unknown-linux-musl PROFILE=size-optimized MUSL=1 LTO=1 CARGO="rustup run nightly cargo" diff --git a/example/Makefile b/example/Makefile index f7111b1..353e298 100644 --- a/example/Makefile +++ b/example/Makefile @@ -31,6 +31,7 @@ endif #endif RUST_TARGET_DIR := $(REPO_ROOT)/target/$(TARGET)/$(CFG_PROFILE) +OUT_DIR := $(realpath $(THIS_DIR)/out/) ifeq ($(CFG_PROFILE), size-optimized) CARGO_PROFILE := size-optimized @@ -91,7 +92,7 @@ all: $(_bins) clean: clean-c clean-rust clean-c: - rm -r out || true + rm -r $(OUT_DIR) || true clean-rust: rm $(SERVICEPOINT_HEADER_OUT)/servicepoint.h || true @@ -122,7 +123,7 @@ sizes: $(_bins) ls -lB out analyze-size: out/$(BIN)_unstripped - nm --print-size --size-sort --reverse-sort --radix=d --demangle out/$(BIN)_unstripped \ + nm --print-size --size-sort --reverse-sort --radix=d --demangle $(OUT_DIR)/$(BIN)_unstripped \ | awk '{size=$$2+0; print size "\t" $$4}' \ | less diff --git a/src/bitvec.rs b/src/bitvec.rs index 0e7ee5e..3cd5abb 100644 --- a/src/bitvec.rs +++ b/src/bitvec.rs @@ -1,7 +1,5 @@ use crate::{heap_drop, heap_move, heap_move_nonnull, heap_remove, ByteSlice}; -use servicepoint::{ - BinaryOperation, BitVecCommand, CompressionCode, DisplayBitVec, Packet, -}; +use servicepoint::{BinaryOperation, BitVecCommand, CompressionCode, DisplayBitVec, Packet}; use std::ptr::NonNull; /// A vector of bits diff --git a/src/lib.rs b/src/lib.rs index 60c42ab..47b21d5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -32,10 +32,10 @@ pub use crate::byte_slice::*; pub use crate::char_grid::*; pub use crate::cp437_grid::*; pub use crate::packet::*; -pub use crate::typed_command::*; -pub use crate::udp::*; pub use servicepoint::CommandCode; use std::ptr::NonNull; +pub use crate::typed_command::*; +pub use crate::udp::*; mod bitmap; mod bitvec; @@ -69,4 +69,4 @@ pub(crate) unsafe fn heap_remove(x: NonNull) -> T { } /// This is a type only used by cbindgen to have a type for pointers. -pub struct UdpSocket; +pub struct UdpSocket; \ No newline at end of file diff --git a/src/udp.rs b/src/udp.rs index f68aa16..bb04454 100644 --- a/src/udp.rs +++ b/src/udp.rs @@ -16,7 +16,9 @@ use std::ptr::NonNull; /// sp_udp_send_command(connection, sp_command_clear()); /// ``` #[no_mangle] -pub unsafe extern "C" fn sp_udp_open(host: NonNull) -> *mut UdpSocket { +pub unsafe extern "C" fn sp_udp_open( + host: NonNull, +) -> *mut UdpSocket { let host = unsafe { CStr::from_ptr(host.as_ptr()) } .to_str() .expect("Bad encoding"); @@ -107,9 +109,7 @@ pub unsafe extern "C" fn sp_udp_send_header( header, payload: vec![], }; - unsafe { udp_connection.as_ref() } - .send(&Vec::from(packet)) - .is_ok() + unsafe { udp_connection.as_ref() }.send(&Vec::from(packet)).is_ok() } /// Closes and deallocates a [UdpConnection].