Improve libwaku and C wrappers (#613)

- Move stuff to Makefile
- Move libwaku to root
- Make examples compile for C and Go
- Update README
This commit is contained in:
Oskar Thorén 2021-06-13 20:50:10 +08:00 committed by GitHub
parent a3234ac8a2
commit be717ce5f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 63 additions and 17 deletions

2
.gitignore vendored
View File

@ -34,5 +34,3 @@ rln
package-lock.json
node_modules/
/.update.timestamp
libwaku

View File

@ -29,6 +29,8 @@ DOCKER_IMAGE_NIM_PARAMS ?= -d:chronicles_colors:none -d:insecure
bridge \
test \
clean \
libwaku.so \
wrappers \
libbacktrace
ifeq ($(NIM_PARAMS),)
@ -128,7 +130,7 @@ rlnlib:
ifeq ($(RLN), true)
cargo build --manifest-path vendor/rln/Cargo.toml
endif
test2: | build deps installganache
echo -e $(BUILD_MSG) "build/$@" && \
$(ENV_SCRIPT) nim test2 $(NIM_PARAMS) waku.nims
@ -185,3 +187,17 @@ ifneq ($(USE_LIBBACKTRACE), 0)
endif
endif # "variables.mk" was not included
libwaku.so: | build deps
echo -e $(BUILD_MSG) "build/$@" && \
$(ENV_SCRIPT) nim c --app:lib --noMain --nimcache:nimcache/libwaku $(NIM_PARAMS) -o:build/$@.0 wrappers/libwaku.nim && \
rm -f build/$@ && \
ln -s $@.0 build/$@
# libraries for dynamic linking of non-Nim objects
EXTRA_LIBS_DYNAMIC := -L"$(CURDIR)/build" -lwaku -lm
wrappers: | build deps libwaku.so
echo -e $(BUILD_MSG) "build/C_wrapper_example" && \
$(CC) wrappers/wrapper_example.c -Wl,-rpath,'$$ORIGIN' $(EXTRA_LIBS_DYNAMIC) -g -o build/C_wrapper_example
echo -e $(BUILD_MSG) "build/go_wrapper_example" && \
go build -ldflags "-linkmode external -extldflags '$(EXTRA_LIBS_DYNAMIC)'" -o build/go_wrapper_example wrappers/wrapper_example.go #wrappers/cfuncs.go

View File

@ -1,4 +0,0 @@
#!/usr/bin/env sh
nim c --skipParentCfg libwaku.nim
gcc libwaku.c ./libwaku.a -lm -g -o libwaku

View File

@ -1,5 +0,0 @@
-app:staticlib
o:"libwaku.a"
noMain
header
-d:"chronicles_sinks=textlines"

View File

@ -4,9 +4,6 @@ Exposes a C API that can be used by other environments other than C.
## Running
Make sure you run `$PROJECTDIR/env.sh bash` first. Then:
```
./build.sh
./libwaku
make wrappers
```

View File

@ -1,3 +1,6 @@
#ifndef __LIBWAKU_H__
#define __LIBWAKU_H__
#include <stdint.h>
#include <stddef.h>
@ -7,3 +10,5 @@ void NimMain();
char* info(const char* wakuNode);
void echo();
#endif //__LIBWAKU_H__

View File

@ -10,7 +10,7 @@
# TODO Init a node
# proc info*(node: WakuNode): WakuInfo =
proc info(foo: cstring): cstring {.exportc.} =
proc info(foo: cstring): cstring {.exportc, dynlib.} =
echo "info about node"
echo foo
return foo
@ -34,3 +34,5 @@ proc echo() {.exportc.} =
# await node.start()
#
#main()
# When main done stuff

View File

@ -3,6 +3,8 @@
#include "libwaku.h"
void NimMain();
int main(int argc, char* argv[]) {
char* string;
NimMain();

View File

@ -0,0 +1,35 @@
package main
import (
"fmt"
"runtime"
)
/*
#include <stdlib.h>
// Passing "-lwaku" to the Go linker through "-extldflags" is not enough. We need it in here, for some reason.
#cgo LDFLAGS: -Wl,-rpath,'$ORIGIN' -L${SRCDIR}/../build -lwaku
#include "libwaku.h"
*/
import "C"
// Arrange that main.main runs on main thread.
func init() {
runtime.LockOSThread()
}
func Start() {
C.NimMain()
messageC := C.CString("Calling info")
fmt.Println("Start nim-waku")
var str = C.info(messageC)
fmt.Println("Info", str)
}
func main() {
fmt.Println("Hi main")
Start()
}