This commit is contained in:
parent
c069c1966b
commit
7e61e52a12
12
.github/workflows/rust.yml
vendored
12
.github/workflows/rust.yml
vendored
|
@ -25,10 +25,20 @@ jobs:
|
|||
- name: Install rust toolchain
|
||||
run: sudo apt-get install -qy cargo rust-clippy
|
||||
- name: install lzma
|
||||
run: sudo apt-get update && sudo apt-get install -y liblzma-dev
|
||||
run: sudo apt-get install -qy liblzma-dev
|
||||
- name: install gcc
|
||||
run: sudo apt-get install -qy gcc make
|
||||
|
||||
- name: Run Clippy
|
||||
run: cargo clippy
|
||||
|
||||
- name: generate bindings
|
||||
run: ./generate-binding.sh
|
||||
- name: check that generated files did not change
|
||||
run: output=$(git status --porcelain) && [ -z "$output" ]
|
||||
|
||||
- name: build
|
||||
run: cargo build
|
||||
|
||||
- name: build example
|
||||
run: cd example && make
|
||||
|
|
30
example/Makefile
Normal file
30
example/Makefile
Normal file
|
@ -0,0 +1,30 @@
|
|||
CC := gcc
|
||||
|
||||
THIS_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||
REPO_ROOT := $(THIS_DIR)/..
|
||||
|
||||
build: out/example
|
||||
|
||||
clean:
|
||||
rm -r out || true
|
||||
rm include/servicepoint.h || true
|
||||
cargo clean
|
||||
|
||||
run: out/example
|
||||
out/example
|
||||
|
||||
PHONY: build clean dependencies run
|
||||
|
||||
out/example: dependencies main.c
|
||||
mkdir -p out || true
|
||||
${CC} main.c \
|
||||
-I $(REPO_ROOT)/include \
|
||||
-L $(REPO_ROOT)/target/release \
|
||||
-Wl,-Bstatic -lservicepoint_binding_c \
|
||||
-Wl,-Bdynamic -llzma \
|
||||
-o out/example
|
||||
|
||||
dependencies: FORCE
|
||||
cargo build --manifest-path=$(REPO_ROOT)/Cargo.toml --release
|
||||
|
||||
FORCE: ;
|
|
@ -1,14 +0,0 @@
|
|||
[package]
|
||||
name = "lang_c"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
publish = false
|
||||
|
||||
[lib]
|
||||
test = false
|
||||
|
||||
[build-dependencies]
|
||||
cc = "1.2"
|
||||
|
||||
[dependencies]
|
||||
servicepoint_binding_c = { path = "../.." }
|
|
@ -1,34 +0,0 @@
|
|||
CC := gcc
|
||||
|
||||
THIS_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||
REPO_ROOT := $(THIS_DIR)/../../../..
|
||||
|
||||
build: out/lang_c
|
||||
|
||||
clean:
|
||||
rm -r out || true
|
||||
rm include/servicepoint.h || true
|
||||
cargo clean
|
||||
|
||||
run: out/lang_c
|
||||
out/lang_c
|
||||
|
||||
PHONY: build clean dependencies run
|
||||
|
||||
out/lang_c: dependencies src/main.c
|
||||
mkdir -p out || true
|
||||
${CC} src/main.c \
|
||||
-I include \
|
||||
-L $(REPO_ROOT)/target/release \
|
||||
-Wl,-Bstatic -lservicepoint_binding_c \
|
||||
-Wl,-Bdynamic -llzma \
|
||||
-o out/lang_c
|
||||
|
||||
dependencies: FORCE
|
||||
mkdir -p include || true
|
||||
# generate servicepoint header and binary to link against
|
||||
SERVICEPOINT_HEADER_OUT=$(THIS_DIR)/include cargo build \
|
||||
--manifest-path=$(REPO_ROOT)/crates/servicepoint_binding_c/Cargo.toml \
|
||||
--release
|
||||
|
||||
FORCE: ;
|
|
@ -1,17 +0,0 @@
|
|||
const SP_INCLUDE: &str = "DEP_SERVICEPOINT_INCLUDE";
|
||||
|
||||
fn main() {
|
||||
println!("cargo::rerun-if-changed=src/main.c");
|
||||
println!("cargo::rerun-if-changed=build.rs");
|
||||
println!("cargo::rerun-if-env-changed={SP_INCLUDE}");
|
||||
|
||||
let sp_include =
|
||||
std::env::var_os(SP_INCLUDE).unwrap().into_string().unwrap();
|
||||
|
||||
// this builds a lib, this is only to check that the example compiles
|
||||
let mut cc = cc::Build::new();
|
||||
cc.file("src/main.c");
|
||||
cc.include(&sp_include);
|
||||
cc.opt_level(2);
|
||||
cc.compile("lang_c");
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
|
6
generate_binding.sh
Normal file
6
generate_binding.sh
Normal file
|
@ -0,0 +1,6 @@
|
|||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
SCRIPT_PATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||
|
||||
SERVICEPOINT_HEADER_OUT="$SCRIPT_PATH/include" cargo build --release
|
Loading…
Reference in a new issue