diff --git a/Makefile b/Makefile index dd1646a..a645fce 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: all clean test pipe named-pipe +.PHONY: all clean test pipe named-pipe ffi .ONESHELL: all: clean @@ -6,6 +6,11 @@ all: clean sleep 1; make test; make pipe; + sleep 3; + make named-pipe; + sleep 3; + make ffi; + make clean; test: mkdir -p test; @@ -15,20 +20,29 @@ test: # note: below line stays in root dir because no `\` at the end of previous line rm -rf test; -pipe: +pipe: clean cd pipe; gcc test_pipe.c -o test_pipe_c_program; go build -o test_pipe_go_program main.go; ./test_pipe_go_program -named-pipe: +named-pipe: clean cd named_pipe; gcc test_named_pipe_receiver.c -o test_named_pipe_receiver_c_program; go build -o test_named_pipe_sender_go_program main.go; ./test_named_pipe_receiver_c_program & ./test_named_pipe_sender_go_program; +ffi: clean + cd ffi; + gcc -c -o example.o example.c; + ar rcs libexample.a example.o; + + go build -o test_ffi_go_program main.go; + ./test_ffi_go_program; + clean: echo "cleaning..." rm -rf pipe/test_pipe_c_program pipe/test_pipe_go_program rm -rf named_pipe/test_named_pipe_receiver_c_program named_pipe/test_named_pipe_sender_go_program + rm -rf ffi/main.o ffi/libmain.a ffi/test_ffi_go_program diff --git a/ffi/example.c b/ffi/example.c new file mode 100644 index 0000000..651ab26 --- /dev/null +++ b/ffi/example.c @@ -0,0 +1,7 @@ +// example.c +#include + +void helloFromC() { + printf("Hello from C!\n"); +} + diff --git a/ffi/example.o b/ffi/example.o new file mode 100644 index 0000000..cafc9cd Binary files /dev/null and b/ffi/example.o differ diff --git a/ffi/libexample.a b/ffi/libexample.a new file mode 100644 index 0000000..4523709 Binary files /dev/null and b/ffi/libexample.a differ diff --git a/ffi/main.go b/ffi/main.go new file mode 100644 index 0000000..13e6887 --- /dev/null +++ b/ffi/main.go @@ -0,0 +1,12 @@ +package main + +/* +#cgo LDFLAGS: -L./ -lexample +void helloFromC(); +*/ +import "C" + +func main() { + print("Hello from Go! calling FFI for C\n") + C.helloFromC() +} diff --git a/named_pipe/test_named_pipe_receiver_c_program b/named_pipe/test_named_pipe_receiver_c_program deleted file mode 100755 index 94b7474..0000000 Binary files a/named_pipe/test_named_pipe_receiver_c_program and /dev/null differ diff --git a/named_pipe/test_named_pipe_sender_go_program b/named_pipe/test_named_pipe_sender_go_program deleted file mode 100755 index 323cb33..0000000 Binary files a/named_pipe/test_named_pipe_sender_go_program and /dev/null differ diff --git a/pipe/test_pipe_c_program b/pipe/test_pipe_c_program deleted file mode 100755 index 7e638ed..0000000 Binary files a/pipe/test_pipe_c_program and /dev/null differ diff --git a/pipe/test_pipe_go_program b/pipe/test_pipe_go_program deleted file mode 100755 index 0e77d25..0000000 Binary files a/pipe/test_pipe_go_program and /dev/null differ