diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index f3763b6..d0f1da3 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -30,6 +30,11 @@ jobs: - name: build run: cargo build + - name: generate bindings + run: ./generate-binding.sh + - name: check that generated files did not change + run: output=$(git status --porcelain) && [ -z "$output" ] + - name: build example -- glibc release run: cd example && make -r clean-all && make -r LIBC=gnu LINK=dynamic PROFILE=release - name: build example -- glibc debug @@ -47,14 +52,6 @@ jobs: - name: install rust targets run: rustup toolchain install nightly -t aarch64-unknown-linux-gnu -c rust-src --no-self-update - - name: install csbindgen - run: rustup run nightly cargo install cbindgen@0.29 - - - name: generate bindings - run: ./generate-binding.sh - - name: check that generated files did not change - run: output=$(git status --porcelain) && [ -z "$output" ] - - name: build example -- glibc size_optimized run: cd example && make clean-all -r && make -r LIBC=gnu LINK=dynamic PROFILE=size_optimized CARGO="rustup run nightly cargo" LTO=1 diff --git a/example/src/header_logger.c b/example/src/header_logger.c index 9cb3cd1..8fe1455 100644 --- a/example/src/header_logger.c +++ b/example/src/header_logger.c @@ -129,7 +129,7 @@ bool log_command(struct Command command) { break; } case COMMAND_TAG_GLOBAL_BRIGHTNESS: { - Brightness brightness = sp_cmd_brightness_global_get_brightness(command.data.global_brightness); + Brightness brightness = sp_cmd_brightness_global_get(command.data.global_brightness); printf("-> GlobalBrightnessCommand with params: brightness=%hu\n", brightness); break; } @@ -191,7 +191,7 @@ int main(int argc, char **argv) { continue; } - struct Header *header = sp_packet_get_header_mut(packet); + struct Header *header = sp_packet_get_header(packet); ByteSlice payload = sp_packet_get_payload(packet); printf("Received packet: cc=%d, a=%d, b=%d, c=%d, d=%d, payload=%p (len %zu)\n", diff --git a/example/src/helpers.h b/example/src/helpers.h index bc6c119..904e86b 100644 --- a/example/src/helpers.h +++ b/example/src/helpers.h @@ -23,6 +23,8 @@ void sock_init() { /// TODO: all of this for sleeping n ms? There should be a better way! int msleep(long msec) { + int res; + if (msec < 0) { errno = EINVAL; return -1; @@ -33,7 +35,6 @@ int msleep(long msec) { .tv_nsec = (msec % 1000) * 1000000, }; - int res; do { res = nanosleep(&ts, &ts); } while (res && errno == EINTR); diff --git a/example/src/random_stuff.c b/example/src/random_stuff.c index b55e42c..2d818e3 100644 --- a/example/src/random_stuff.c +++ b/example/src/random_stuff.c @@ -15,7 +15,7 @@ int main(void) { if (packet == NULL) return 1; - Header *header = sp_packet_get_header_mut(packet); + Header *header = sp_packet_get_header(packet); printf("[%d, %d, %d, %d, %d]\n", header->command_code, header->a, header->b, header->c, header->d); sp_udp_send_packet(sock, packet); diff --git a/nix-build-all.sh b/nix-build-all.sh index 2d247e7..8adce87 100755 --- a/nix-build-all.sh +++ b/nix-build-all.sh @@ -3,27 +3,24 @@ set -e set -x -BUILD="nom build -L" +BUILD="nix build -L" $BUILD .#servicepoint-binding-c -o result $BUILD .#servicepoint-binding-c-stable-release -o result-stable-release $BUILD .#servicepoint-binding-c-stable-size -o result-stable-size $BUILD .#servicepoint-binding-c-nightly-release -o result-nightly-release +$BUILD .#servicepoint-binding-c-nightly-size -o result-nightly-size +$BUILD .#servicepoint-binding-c-musl-stable-release -o result-musl-release +$BUILD .#servicepoint-binding-c-musl-stable-size -o result-musl-size + +# do not work yet: +# $BUILD .#servicepoint-binding-c-musl-nightly-release +# $BUILD .#servicepoint-binding-c-musl-nightly-size $BUILD .#all-examples -o result-examples $BUILD .#all-examples-size -o result-examples-size - -# works, but needs to bootstrap a C and Rust compiler -# $BUILD .#servicepoint-binding-c-musl-stable-release -o result-musl-release -# $BUILD .#servicepoint-binding-c-musl-stable-size -o result-musl-size -# $BUILD .#all-examples-musl-static -o result-examples-musl-static -# $BUILD .#all-examples-musl-static-size -o result-examples-musl-static-size -# $BUILD .#all-examples-musl -o result-examples-musl - -# do not work yet: -# $BUILD .#servicepoint-binding-c-nightly-size -o result-nightly-size -# $BUILD .#servicepoint-binding-c-musl-nightly-release -# $BUILD .#servicepoint-binding-c-musl-nightly-size -# $BUILD .#all-examples-nightly-size -o result-examples-nightly-size - +$BUILD .#all-examples-nightly-size -o result-nightly-size +$BUILD .#all-examples-musl -o result-examples-musl +$BUILD .#all-examples-musl-static -o result-examples-musl-static +$BUILD .#all-examples-musl-static-size -o result-examples-musl-static-size diff --git a/packages.nix b/packages.nix index acae2a5..8096f54 100644 --- a/packages.nix +++ b/packages.nix @@ -14,12 +14,10 @@ let buildType ? "release", buildNoDefaultFeatures ? false, cargoBuildFlags ? [ ], - nativeBuildInputs ? [], - stdlib ? false, - + nativeBuildInputs ? [] }: rustPlatform.buildRustPackage (finalAttrs: { - inherit version buildType cargoBuildFlags stdlib; + inherit version buildType cargoBuildFlags; pname = "servicepoint-binding-c"; src = lib.filter { @@ -28,7 +26,7 @@ let ./Cargo.lock ./Cargo.toml ./src - ./include + ./build.rs ./LICENSE ./cbindgen.toml ]; @@ -43,8 +41,16 @@ let }; nativeBuildInputs = [ pkgs.pkg-config ] ++ nativeBuildInputs; buildInputs = [ pkgs.xz ]; + + preBuild = '' + mkdir -p include + export SERVICEPOINT_HEADER_OUT=$(realpath "include") + + echo "Rust version: $(rustc --version)" + echo "preBuild hook: set SERVICEPOINT_HEADER_OUT to $SERVICEPOINT_HEADER_OUT" + ''; postInstall = '' - cp -r $src/include $out + cp -r include $out mkdir -p $out/lib/pkgconfig sed "s:\$out:$out:g" ${./servicepoint.pc.in} | sed "s:\$version:$version:g" > $out/lib/pkgconfig/servicepoint.pc @@ -143,7 +149,6 @@ let "-Zbuild-std=core,std,alloc,proc_macro,panic_abort" "-Zbuild-std-features=panic_immediate_abort" ]; - stdlib = true; # TODO: remove hard-coded target nativeBuildInputs = [fenix.targets."x86_64-unknown-linux-gnu".latest.rust-std]; # TODO: those override the nix flags