diff --git a/Makefile b/Makefile index 910258f..e877c18 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,10 @@ SHELL := bash # the shell used internally by Make GOBIN ?= $(shell which go) +rlnlib-cross: + scripts/build-cross.sh + cd lib/rln && cbindgen --config ../cbindgen.toml --crate rln --output ../../rln/librln.h --lang c + rlnlib: scripts/build.sh cd lib/rln && cbindgen --config ../cbindgen.toml --crate rln --output ../../rln/librln.h --lang c diff --git a/README.md b/README.md index ca426e8..8a31436 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,34 @@ The goal of this is to create a rate-limiter for blockchains where block product after talking to the team at [Celestia](https://celestia.org/). -### -The following architectures require newer versions of glibc. +### Building this library -- `x86_64-pc-windows-gnu` -- `aarch64-unknown-linux-gnu` -- `x86_64-unknown-linux-gnu` -- `arm-unknown-linux-gnueabi` +#### Using [cross](https://github.com/cross-rs) -This [PR](https://github.com/cross-rs/cross/pull/591) will update ubuntu base version on cross. But while it's merged, follow the instructions from [here](https://github.com/cross-rs/cross/wiki/FAQ#newer-linux-versions) to locally build docker images for those architectures. \ No newline at end of file +``` +make rlnlibs-cross +``` + +Some architectures are not available in cross unless they're locally build. This [PR](https://github.com/cross-rs/cross/pull/591) will update ubuntu base version on cross. But while it's merged, build them locally. To build them locally execute the following instructions (adapted from [here](https://github.com/cross-rs/cross/wiki/FAQ#newer-linux-versions)): + +``` +git clone --single-branch --depth 1 --branch increment_versions https://github.com/Alexhuszagh/cross +cd cross +cargo build-docker-image x86_64-pc-windows-gnu +cargo build-docker-image aarch64-unknown-linux-gnu +cargo build-docker-image x86_64-unknown-linux-gnu +cargo build-docker-image arm-unknown-linux-gnueabi +cargo build-docker-image i686-pc-windows-gnu +cargo build-docker-image i686-unknown-linux-gnu +cargo build-docker-image arm-unknown-linux-gnueabihf +cargo build-docker-image mips-unknown-linux-gnu +cargo build-docker-image mips64-unknown-linux-gnuabi64 +cargo build-docker-image mips64el-unknown-linux-gnuabi64 +cargo build-docker-image mipsel-unknown-linux-gnu +``` + +#### Using [rustup](https://rust-lang.github.io/rustup/cross-compilation.html) + +``` +make rlnlibs-cross +``` \ No newline at end of file diff --git a/libs/arm-unknown-linux-gnueabihf/librln.d b/libs/arm-unknown-linux-gnueabihf/librln.d new file mode 100644 index 0000000..82701e9 --- /dev/null +++ b/libs/arm-unknown-linux-gnueabihf/librln.d @@ -0,0 +1 @@ +/target/arm-unknown-linux-gnueabihf/release/librln.so: /project/src/circuit/mod.rs /project/src/circuit/polynomial.rs /project/src/circuit/poseidon.rs /project/src/circuit/rln.rs /project/src/ffi.rs /project/src/hash_to_field.rs /project/src/lib.rs /project/src/merkle.rs /project/src/poseidon.rs /project/src/public.rs /project/src/utils.rs /target/arm-unknown-linux-gnueabihf/release/build/num-bigint-c5d4eab0df01f46f/out/radix_bases.rs build.rs diff --git a/libs/arm-unknown-linux-gnueabihf/librln.rlib b/libs/arm-unknown-linux-gnueabihf/librln.rlib new file mode 100644 index 0000000..1e4998a Binary files /dev/null and b/libs/arm-unknown-linux-gnueabihf/librln.rlib differ diff --git a/libs/i686-pc-windows-gnu/librln.d b/libs/i686-pc-windows-gnu/librln.d new file mode 100644 index 0000000..c240a71 --- /dev/null +++ b/libs/i686-pc-windows-gnu/librln.d @@ -0,0 +1 @@ +/target/i686-pc-windows-gnu/release/librln.rlib: /project/src/circuit/mod.rs /project/src/circuit/polynomial.rs /project/src/circuit/poseidon.rs /project/src/circuit/rln.rs /project/src/ffi.rs /project/src/hash_to_field.rs /project/src/lib.rs /project/src/merkle.rs /project/src/poseidon.rs /project/src/public.rs /project/src/utils.rs /target/i686-pc-windows-gnu/release/build/num-bigint-cab2a6b70097bfc3/out/radix_bases.rs build.rs diff --git a/libs/i686-pc-windows-gnu/librln.dll.a b/libs/i686-pc-windows-gnu/librln.dll.a new file mode 100644 index 0000000..1acf675 Binary files /dev/null and b/libs/i686-pc-windows-gnu/librln.dll.a differ diff --git a/libs/i686-pc-windows-gnu/librln.rlib b/libs/i686-pc-windows-gnu/librln.rlib new file mode 100644 index 0000000..8a8c777 Binary files /dev/null and b/libs/i686-pc-windows-gnu/librln.rlib differ diff --git a/libs/i686-unknown-linux-gnu/librln.d b/libs/i686-unknown-linux-gnu/librln.d new file mode 100644 index 0000000..3e5005b --- /dev/null +++ b/libs/i686-unknown-linux-gnu/librln.d @@ -0,0 +1 @@ +/target/i686-unknown-linux-gnu/release/librln.so: /project/src/circuit/mod.rs /project/src/circuit/polynomial.rs /project/src/circuit/poseidon.rs /project/src/circuit/rln.rs /project/src/ffi.rs /project/src/hash_to_field.rs /project/src/lib.rs /project/src/merkle.rs /project/src/poseidon.rs /project/src/public.rs /project/src/utils.rs /target/i686-unknown-linux-gnu/release/build/num-bigint-b0e1c075ff9f6d68/out/radix_bases.rs build.rs diff --git a/libs/i686-unknown-linux-gnu/librln.rlib b/libs/i686-unknown-linux-gnu/librln.rlib new file mode 100644 index 0000000..7e9e39b Binary files /dev/null and b/libs/i686-unknown-linux-gnu/librln.rlib differ diff --git a/libs/mips-unknown-linux-gnu/librln.d b/libs/mips-unknown-linux-gnu/librln.d new file mode 100644 index 0000000..0c3f27e --- /dev/null +++ b/libs/mips-unknown-linux-gnu/librln.d @@ -0,0 +1 @@ +/target/mips-unknown-linux-gnu/release/librln.so: /project/src/circuit/mod.rs /project/src/circuit/polynomial.rs /project/src/circuit/poseidon.rs /project/src/circuit/rln.rs /project/src/ffi.rs /project/src/hash_to_field.rs /project/src/lib.rs /project/src/merkle.rs /project/src/poseidon.rs /project/src/public.rs /project/src/utils.rs /target/mips-unknown-linux-gnu/release/build/num-bigint-2a58e28365905d0a/out/radix_bases.rs build.rs diff --git a/libs/mips-unknown-linux-gnu/librln.rlib b/libs/mips-unknown-linux-gnu/librln.rlib new file mode 100644 index 0000000..ef12d55 Binary files /dev/null and b/libs/mips-unknown-linux-gnu/librln.rlib differ diff --git a/libs/mips64-unknown-linux-gnuabi64/librln.d b/libs/mips64-unknown-linux-gnuabi64/librln.d new file mode 100644 index 0000000..95c46ff --- /dev/null +++ b/libs/mips64-unknown-linux-gnuabi64/librln.d @@ -0,0 +1 @@ +/target/mips64-unknown-linux-gnuabi64/release/librln.so: /project/src/circuit/mod.rs /project/src/circuit/polynomial.rs /project/src/circuit/poseidon.rs /project/src/circuit/rln.rs /project/src/ffi.rs /project/src/hash_to_field.rs /project/src/lib.rs /project/src/merkle.rs /project/src/poseidon.rs /project/src/public.rs /project/src/utils.rs /target/mips64-unknown-linux-gnuabi64/release/build/num-bigint-a70850dcc99c7fb1/out/radix_bases.rs build.rs diff --git a/libs/mips64-unknown-linux-gnuabi64/librln.rlib b/libs/mips64-unknown-linux-gnuabi64/librln.rlib new file mode 100644 index 0000000..c3b6d38 Binary files /dev/null and b/libs/mips64-unknown-linux-gnuabi64/librln.rlib differ diff --git a/libs/mips64el-unknown-linux-gnuabi64/librln.d b/libs/mips64el-unknown-linux-gnuabi64/librln.d new file mode 100644 index 0000000..3ceaf0f --- /dev/null +++ b/libs/mips64el-unknown-linux-gnuabi64/librln.d @@ -0,0 +1 @@ +/target/mips64el-unknown-linux-gnuabi64/release/librln.so: /project/src/circuit/mod.rs /project/src/circuit/polynomial.rs /project/src/circuit/poseidon.rs /project/src/circuit/rln.rs /project/src/ffi.rs /project/src/hash_to_field.rs /project/src/lib.rs /project/src/merkle.rs /project/src/poseidon.rs /project/src/public.rs /project/src/utils.rs /target/mips64el-unknown-linux-gnuabi64/release/build/num-bigint-0b729d8fe959893e/out/radix_bases.rs build.rs diff --git a/libs/mips64el-unknown-linux-gnuabi64/librln.rlib b/libs/mips64el-unknown-linux-gnuabi64/librln.rlib new file mode 100644 index 0000000..8a244c7 Binary files /dev/null and b/libs/mips64el-unknown-linux-gnuabi64/librln.rlib differ diff --git a/libs/mipsel-unknown-linux-gnu/librln.d b/libs/mipsel-unknown-linux-gnu/librln.d new file mode 100644 index 0000000..0705146 --- /dev/null +++ b/libs/mipsel-unknown-linux-gnu/librln.d @@ -0,0 +1 @@ +/target/mipsel-unknown-linux-gnu/release/librln.so: /project/src/circuit/mod.rs /project/src/circuit/polynomial.rs /project/src/circuit/poseidon.rs /project/src/circuit/rln.rs /project/src/ffi.rs /project/src/hash_to_field.rs /project/src/lib.rs /project/src/merkle.rs /project/src/poseidon.rs /project/src/public.rs /project/src/utils.rs /target/mipsel-unknown-linux-gnu/release/build/num-bigint-23ad468891d1fc36/out/radix_bases.rs build.rs diff --git a/libs/mipsel-unknown-linux-gnu/librln.rlib b/libs/mipsel-unknown-linux-gnu/librln.rlib new file mode 100644 index 0000000..7e9f564 Binary files /dev/null and b/libs/mipsel-unknown-linux-gnu/librln.rlib differ diff --git a/libs/x86_64-apple-darwin/librln.d b/libs/x86_64-apple-darwin/librln.d deleted file mode 100644 index eca7915..0000000 --- a/libs/x86_64-apple-darwin/librln.d +++ /dev/null @@ -1 +0,0 @@ -/Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/target/x86_64-apple-darwin/release/librln.dylib: /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/mod.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/polynomial.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/poseidon.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/circuit/rln.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/ffi.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/lib.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/merkle.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/poseidon.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/public.rs /Users/deaneigenmann/go/src/github.com/decanus/go-rln/lib/rln/src/utils.rs diff --git a/libs/x86_64-apple-darwin/librln.rlib b/libs/x86_64-apple-darwin/librln.rlib deleted file mode 100644 index 2f5185f..0000000 Binary files a/libs/x86_64-apple-darwin/librln.rlib and /dev/null differ diff --git a/scripts/Cross.toml b/scripts/Cross.toml index 5d49cab..6a32952 100644 --- a/scripts/Cross.toml +++ b/scripts/Cross.toml @@ -9,3 +9,24 @@ image = "ghcr.io/cross-rs/x86_64-unknown-linux-gnu:local" [target.arm-unknown-linux-gnueabi] image = "ghcr.io/cross-rs/arm-unknown-linux-gnueabi:local" + +[target.i686-pc-windows-gnu] +image = "ghcr.io/cross-rs/i686-pc-windows-gnu:local" + +[target.i686-unknown-linux-gnu] +image = "ghcr.io/cross-rs/i686-unknown-linux-gnu:local" + +[target.arm-unknown-linux-gnueabihf] +image = "ghcr.io/cross-rs/arm-unknown-linux-gnueabihf:local" + +[target.mips-unknown-linux-gnu] +image = "ghcr.io/cross-rs/mips-unknown-linux-gnu:local" + +[target.mips64-unknown-linux-gnuabi64] +image = "ghcr.io/cross-rs/mips64-unknown-linux-gnuabi64:local" + +[target.mips64el-unknown-linux-gnuabi64] +image = "ghcr.io/cross-rs/mips64el-unknown-linux-gnuabi64:local" + +[target.mipsel-unknown-linux-gnu] +image = "ghcr.io/cross-rs/mipsel-unknown-linux-gnu:local" diff --git a/scripts/build-cross.sh b/scripts/build-cross.sh new file mode 100755 index 0000000..0ddfbf1 --- /dev/null +++ b/scripts/build-cross.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +DIRECTORY=./libs +if [[ -d "$DIRECTORY" ]] +then + echo "$DIRECTORY exists on your filesystem. Delete it and run the script again." + exit 0 +fi + +export RUSTFLAGS="-Ccodegen-units=1" +export CROSS_CONFIG="$PWD/scripts/Cross.toml" + +rustup default stable + +cargo install cross --git https://github.com/cross-rs/cross --branch main +cargo install cargo-lipo +# cargo install cargo-strip + +pushd lib/rln + +cargo clean + +cross build --release --lib --target=aarch64-linux-android +cross build --release --lib --target=armv7-linux-androideabi +cross build --release --lib --target=i686-linux-android +cross build --release --lib --target=x86_64-linux-android +cross build --release --lib --target=x86_64-unknown-linux-musl + +# These depend on https://github.com/cross-rs/cross/pull/591 being merged +# In the meantime, we can follow the instructions from here +# https://github.com/cross-rs/cross/wiki/FAQ#newer-linux-versions +# to build the docker images locally. Once that PR is merged, +# remove the CROSS_CONFIG variable and Cross.toml file + +cross build --release --lib --target=x86_64-pc-windows-gnu +cross build --release --lib --target=aarch64-unknown-linux-gnu +cross build --release --lib --target=x86_64-unknown-linux-gnu +cross build --release --lib --target=arm-unknown-linux-gnueabi +cross build --release --lib --target=i686-pc-windows-gnu +cross build --release --lib --target=i686-unknown-linux-gnu +cross build --release --lib --target=arm-unknown-linux-gnueabihf +cross build --release --lib --target=mips-unknown-linux-gnu +cross build --release --lib --target=mips64-unknown-linux-gnuabi64 +cross build --release --lib --target=mips64el-unknown-linux-gnuabi64 +cross build --release --lib --target=mipsel-unknown-linux-gnu + +# TODO: these work only on iOS +rustup target add aarch64-apple-ios x86_64-apple-ios +cross build --release --target=x86_64-apple-darwin --lib +cross build --release --target=aarch64-apple-darwin --lib +cargo lipo --release --targets=aarch64-apple-ios,x86_64-apple-ios + +popd + +TOOLS_DIR=`dirname $0` +COMPILE_DIR=${TOOLS_DIR}/../lib/rln/target +rm -rf $COMPILE_DIR/x86_64-apple-ios $COMPILE_DIR/aarch64-apple-ios +for platform in `ls ${COMPILE_DIR} | grep -v release | grep -v debug` +do + PLATFORM_DIR=${DIRECTORY}/$platform + mkdir -p ${PLATFORM_DIR} + cp ${COMPILE_DIR}/$platform/release/librln.* ${PLATFORM_DIR} +done diff --git a/scripts/build.sh b/scripts/build.sh index 792912d..8b9d194 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -7,48 +7,46 @@ then exit 0 fi -export RUSTFLAGS="-Ccodegen-units=1" -export CROSS_CONFIG="$PWD/scripts/Cross.toml" - pushd lib/rln -rustup default stable +export RUSTFLAGS="-Ccodegen-units=1" +rustup default 1.52.1 +cargo install cargo-lipo -f +cargo install cargo-strip -f -cargo install cross --git https://github.com/cross-rs/cross --branch main -cargo install cargo-lipo -# cargo install cargo-strip - -cross build --release --lib --target=aarch64-linux-android -cross build --release --lib --target=armv7-linux-androideabi -cross build --release --lib --target=i686-linux-android -cross build --release --lib --target=x86_64-linux-android -cross build --release --lib --target=x86_64-unknown-linux-musl - -#cross build --release --lib --target=arm-unknown-linux-gnueabihf -#cross build --release --lib --target=i686-unknown-linux-gnu -#cross build --release --lib --target=mips-unknown-linux-gnu -#cross build --release --lib --target=mips64-unknown-linux-gnuabi64 -#cross build --release --lib --target=mips64el-unknown-linux-gnuabi64 -#cross build --release --lib --target=mipsel-unknown-linux-gnu -#cross build --release --lib --target=i686-pc-windows-gnu - -# These depend on https://github.com/cross-rs/cross/pull/591 being merged -# In the meantime, we can follow the instructions from here -# https://github.com/cross-rs/cross/wiki/FAQ#newer-linux-versions -# to build the docker images locally. Once that PR is merged, -# remove the CROSS_CONFIG variable and Cross.toml file - -cross build --release --lib --target=x86_64-pc-windows-gnu -cross build --release --lib --target=aarch64-unknown-linux-gnu -cross build --release --lib --target=x86_64-unknown-linux-gnu -cross build --release --lib --target=arm-unknown-linux-gnueabi - - -#rustup target add aarch64-apple-ios x86_64-apple-ios -#cross build --release --target=x86_64-apple-darwin --lib -#cross build --release --target=aarch64-apple-darwin --lib -#cargo lipo --release --targets=aarch64-apple-ios,x86_64-apple-ios +rustup target add x86_64-unknown-linux-gnu +rustup target add aarch64-unknown-linux-gnu +rustup target add x86_64-apple-darwin +rustup target add aarch64-apple-darwin +rustup target add x86_64-pc-windows-gnu +rustup target add aarch64-linux-android +rustup target add armv7-linux-androideabi +rustup target add i686-linux-android +rustup target add x86_64-linux-android +rustup target add x86_64-unknown-linux-musl +rustup target add aarch64-apple-ios x86_64-apple-ios +cargo build --release --target=aarch64-linux-android --lib +cargo strip --target aarch64-linux-android +cargo build --release --target=armv7-linux-androideabi --lib +cargo strip --target armv7-linux-androideabi +cargo build --release --target=i686-linux-android --lib +cargo strip --target i686-linux-android +cargo build --release --target=x86_64-linux-android --lib +cargo strip --target x86_64-linux-android +cargo build --target=x86_64-unknown-linux-gnu --release +cargo strip --target x86_64-unknown-linux-gnu +cargo build --target=aarch64-unknown-linux-gnu --release +cargo strip --target aarch64-unknown-linux-gnu +cargo build --target=x86_64-apple-darwin --release +cargo strip --target x86_64-apple-darwin +cargo build --target=aarch64-apple-darwin --release +cargo strip --target aarch64-apple-darwin +cargo build --target=x86_64-pc-windows-gnu --release +cargo strip --target x86_64-pc-windows-gnu +cargo build --target=x86_64-unknown-linux-musl --release +cargo strip --target x86_64-unknown-linux-musl +cargo lipo --release --targets=aarch64-apple-ios,x86_64-apple-ios popd @@ -60,4 +58,4 @@ do PLATFORM_DIR=${DIRECTORY}/$platform mkdir -p ${PLATFORM_DIR} cp ${COMPILE_DIR}/$platform/release/librln.* ${PLATFORM_DIR} -done +done \ No newline at end of file