Skip to content
This repository was archived by the owner on May 6, 2024. It is now read-only.

Commit 0389019

Browse files
authored
Add Swift example (#112)
* Enhance CI script * Add Swift example
1 parent 768e538 commit 0389019

File tree

8 files changed

+91
-39
lines changed

8 files changed

+91
-39
lines changed

.circleci/config.yml

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,31 @@ jobs:
6161
- checkout
6262
- restore-sccache-cache
6363
- run:
64-
name: Initial configuration
64+
name: External dependencies
6565
command: |
66-
sudo apt-get install -y default-jdk g++ gcc valgrind snapd
66+
sudo apt-get install -y clang default-jdk g++ gcc libicu-dev libtinfo5 valgrind
67+
- run:
68+
name: Cbindgen
69+
command: |
70+
cd signer-ffi
6771
rustup install nightly
68-
cargo +nightly install cbindgen
72+
rustup default nightly
73+
cargo install cbindgen
74+
cbindgen --config cbindgen.toml --crate filecoin-signer-ffi --lang c --output /tmp/filecoin_signer_ffi.h
75+
cbindgen --config cbindgen.toml --crate filecoin-signer-ffi --lang c++ --output /tmp/filecoin_signer_ffi_cpp.h
76+
- run:
77+
name: Libraries
78+
command: |
79+
cd signer-ffi
80+
cargo build
81+
cp ../target/debug/libfilecoin_signer_ffi.so /tmp/libfilecoin_signer_ffi.so
82+
cargo build --features with-jni
83+
cp ../target/debug/libfilecoin_signer_ffi.so /tmp/libfilecoin_signer_ffi_java.so
6984
- run: OUT_DIR=/tmp/c ./.circleci/test_c.sh
7085
- run: OUT_DIR=/tmp/cpp ./.circleci/test_cpp.sh
7186
- run: OUT_DIR=/tmp/java ./.circleci/test_java.sh
7287
- run: OUT_DIR=/tmp/kotlin ./.circleci/test_kotlin.sh
88+
- run: OUT_DIR=/tmp/swift ./.circleci/test_swift.sh
7389

7490
tests_wasm:
7591
docker:

.circleci/test_c.sh

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
cd signer-ffi
21
mkdir $OUT_DIR
3-
cp -r ../examples/ffi/c/* $OUT_DIR
4-
rustup default nightly
5-
cbindgen --config cbindgen.toml --crate filecoin-signer-ffi --lang c --output $OUT_DIR/filecoin_signer_ffi.h
6-
cargo build
7-
cp ../target/debug/libfilecoin_signer_ffi.so $OUT_DIR
8-
( cd $OUT_DIR; gcc main.c -L. -lfilecoin_signer_ffi -o main )
9-
LD_LIBRARY_PATH=$OUT_DIR $OUT_DIR/main
10-
LD_LIBRARY_PATH=$OUT_DIR valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose $OUT_DIR/main
2+
cp -r ./examples/ffi/c/* $OUT_DIR
3+
cd $OUT_DIR;
4+
cp /tmp/filecoin_signer_ffi.h .
5+
cp /tmp/libfilecoin_signer_ffi.so .
6+
gcc main.c -L. -lfilecoin_signer_ffi -o ./main
7+
LD_LIBRARY_PATH=. ./main
8+
LD_LIBRARY_PATH=. valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose ./main

.circleci/test_cpp.sh

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
cd signer-ffi
21
mkdir $OUT_DIR
3-
cp -r ../examples/ffi/c++/* $OUT_DIR
4-
rustup default nightly
5-
cbindgen --config cbindgen.toml --crate filecoin-signer-ffi --lang c++ --output $OUT_DIR/filecoin_signer_ffi.h
6-
cargo build
7-
cp ../target/debug/libfilecoin_signer_ffi.so $OUT_DIR
8-
( cd $OUT_DIR; g++ main.cpp -L. -lfilecoin_signer_ffi -o main )
9-
LD_LIBRARY_PATH=$OUT_DIR $OUT_DIR/main
10-
LD_LIBRARY_PATH=$OUT_DIR valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose $OUT_DIR/main
2+
cp -r ./examples/ffi/c++/* $OUT_DIR
3+
cd $OUT_DIR
4+
cp /tmp/filecoin_signer_ffi_cpp.h ./filecoin_signer_ffi.h
5+
cp /tmp/libfilecoin_signer_ffi.so .
6+
g++ main.cpp -L. -lfilecoin_signer_ffi -o ./main
7+
LD_LIBRARY_PATH=. ./main
8+
LD_LIBRARY_PATH=. valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose ./main

.circleci/test_java.sh

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
cd signer-ffi
21
mkdir $OUT_DIR
3-
cp -r ../examples/ffi/java/* $OUT_DIR
4-
cp -r java/* $OUT_DIR
5-
javac -h $OUT_DIR java/src/main/java/ch/zondax/FilecoinSigner.java
6-
cargo build --features with-jni
7-
cp ../target/debug/libfilecoin_signer_ffi.so $OUT_DIR
8-
javac -d $OUT_DIR $OUT_DIR/src/main/java/ch/zondax/FilecoinSigner.java
9-
javac -cp $OUT_DIR $OUT_DIR/Main.java
10-
( cd $OUT_DIR; java -Djava.library.path="." -ea Main )
2+
cp -r ./examples/ffi/java/* $OUT_DIR
3+
cp -r ./signer-ffi/java/* $OUT_DIR
4+
cd $OUT_DIR
5+
cp /tmp/filecoin_signer_ffi.h .
6+
cp /tmp/libfilecoin_signer_ffi_java.so ./libfilecoin_signer_ffi.so
7+
javac -d . -h . ./src/main/java/ch/zondax/FilecoinSigner.java
8+
javac -cp . ./Main.java
9+
java -Djava.library.path="." -ea Main

.circleci/test_kotlin.sh

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@ bash sdk.install.sh
33
. ~/.sdkman/bin/sdkman-init.sh
44
sdk install kotlin
55

6-
cd signer-ffi
76
mkdir $OUT_DIR
8-
cp -r ../examples/ffi/kotlin/* $OUT_DIR
9-
cp -r java/* $OUT_DIR
10-
javac -h $OUT_DIR java/src/main/java/ch/zondax/FilecoinSigner.java
11-
cargo build --features with-jni
12-
cp ../target/debug/libfilecoin_signer_ffi.so $OUT_DIR
13-
javac -d $OUT_DIR $OUT_DIR/src/main/java/ch/zondax/FilecoinSigner.java
14-
kotlinc -cp $OUT_DIR $OUT_DIR/Main.kt -include-runtime -d $OUT_DIR
15-
( cd $OUT_DIR; kotlin -Djava.library.path="." -J-ea MainKt )
7+
cp -r ./examples/ffi/kotlin/* $OUT_DIR
8+
cp -r ./signer-ffi/java/* $OUT_DIR
9+
cd $OUT_DIR
10+
cp /tmp/filecoin_signer_ffi.h .
11+
cp /tmp/libfilecoin_signer_ffi_java.so ./libfilecoin_signer_ffi.so
12+
javac -d . -h . ./src/main/java/ch/zondax/FilecoinSigner.java
13+
kotlinc -cp . ./Main.kt -include-runtime -d .
14+
kotlin -Djava.library.path="." -J-ea MainKt

.circleci/test_swift.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
wget https://swift.org/builds/swift-5.2.1-release/ubuntu1804/swift-5.2.1-RELEASE/swift-5.2.1-RELEASE-ubuntu18.04.tar.gz
2+
tar xzf swift-5.2.1-RELEASE-ubuntu18.04.tar.gz
3+
mv swift-5.2.1-RELEASE-ubuntu18.04 ~/.swift
4+
5+
mkdir $OUT_DIR
6+
cp -r ./examples/ffi/swift/* $OUT_DIR
7+
cd $OUT_DIR;
8+
cp /tmp/filecoin_signer_ffi.h .
9+
cp /tmp/libfilecoin_signer_ffi.so .
10+
~/.swift/usr/bin/swiftc -import-objc-header filecoin_signer_ffi.h main.swift libfilecoin_signer_ffi.so -o ./main
11+
LD_LIBRARY_PATH=. ./main

examples/ffi/swift/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Swift bindingds
2+
3+
To use this example, download the latest header and library or compile the `signer-ffi` directory.
4+
5+
# Running
6+
7+
Assuming that the header and library are in the same directory.
8+
9+
```bash
10+
swiftc -import-objc-header filecoin_signer_ffi.h main.swift libfilecoin_signer_ffi.so -o ./main
11+
LD_LIBRARY_PATH=. ./main
12+
```

examples/ffi/swift/main.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
let error = filecoin_signer_error_new();
2+
let extended_key = filecoin_signer_key_derive(
3+
"equip will roof matter pink blind book anxiety banner elbow sun young",
4+
"m/44'/461'/0/0/0",
5+
error
6+
);
7+
8+
if (filecoin_signer_error_code(error) != 0) {
9+
let err = String(cString: filecoin_signer_error_message(error)!);
10+
fputs(err, stderr)
11+
}
12+
else {
13+
let private_key = filecoin_signer_extended_key_private_key(extended_key);
14+
assert(String(cString: private_key!) == "f15716d3b003b304b8055d9cc62e6b9c869d56cc930c3858d4d7c31f5f53f14a");
15+
filecoin_signer_string_free(private_key);
16+
}
17+
18+
filecoin_signer_extended_key_free(extended_key);
19+
filecoin_signer_error_free(error);

0 commit comments

Comments
 (0)