Add go-to-rust via cgo. Dynamic and static variants.

This commit is contained in:
Andrey Voronkov
2019-08-16 02:06:23 +02:00
parent 12f8d239f8
commit 931889571a
8 changed files with 76 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
[package]
name = "go-to-rust"
version = "0.1.0"
authors = ["Voronkov Andrey <voronkovaa@gmail.com>"]
[lib]
name = "double_input"
crate-type = ["dylib"]

View File

@@ -0,0 +1,14 @@
ifeq ($(shell uname),Darwin)
EXT := dylib
else
EXT := so
endif
all: target/debug/libdouble_input.$(EXT)
go run src/double.go
target/debug/libdouble_input.$(EXT): src/lib.rs Cargo.toml
cargo build
clean:
rm -rf target

View File

@@ -0,0 +1,15 @@
package main
//#cgo LDFLAGS: -L${SRCDIR}/../target/debug -Wl,-rpath=${SRCDIR}/../target/debug -ldouble_input -ldl
//#include <stdint.h>
//extern int32_t double_input(int32_t input);
import "C"
import (
"fmt"
)
func main() {
input := 2
double := C.double_input(C.int32_t(input))
fmt.Printf("%d * 2 = %d\n", input, double)
}

View File

@@ -0,0 +1,4 @@
#[no_mangle]
pub extern "C" fn double_input(input: i32) -> i32 {
input * 2
}

View File

@@ -0,0 +1,8 @@
[package]
name = "go-to-rust"
version = "0.1.0"
authors = ["Voronkov Andrey <voronkovaa@gmail.com>"]
[lib]
name = "double_input"
crate-type = ["staticlib"]

View File

@@ -0,0 +1,8 @@
all: target/debug/libdouble_input.a
go run src/double.go
target/debug/libdouble_input.a: src/lib.rs Cargo.toml
cargo build
clean:
rm -rf target

View File

@@ -0,0 +1,15 @@
package main
//#cgo LDFLAGS: -L${SRCDIR}/../target/debug -ldouble_input -ldl
//#include <stdint.h>
//extern int32_t double_input(int32_t input);
import "C"
import (
"fmt"
)
func main() {
input := 2
double := C.double_input(C.int32_t(input))
fmt.Printf("%d * 2 = %d\n", input, double)
}

View File

@@ -0,0 +1,4 @@
#[no_mangle]
pub extern "C" fn double_input(input: i32) -> i32 {
input * 2
}