diff --git a/Makefile b/Makefile index 94305ff..3072efd 100644 --- a/Makefile +++ b/Makefile @@ -5,21 +5,38 @@ SWIG_PYTHON=src/react_render_wrap.c main: src/main.c src/react_render.c src/react_render.h gcc -std=c99 src/react_render.c src/main.c $(DUKTAPE_HOME)/duktape.c -I $(DUKTAPE_HOME) -lm -o main -python: $(SOURCES) +swig-python: $(SOURCES) swig -python -outdir python/ src/react_render.i +swig-golang: $(SOURCES) + swig -go -intgosize 32 -outdir golang/ -package main src/react_render.i + $(SWIG_PYTHON): python react_render: $(SOURCES) gcc -c -fpic src/react_render.c src/react_render_wrap.c duktape-1.0.2/src/duktape.c -I /usr/local/include -I /usr/include/python2.7 -Iduktape-1.0.2/src - gcc -shared duktape.o react_render.o react_render_wrap.o -o python/_react_render.so + gcc -shared duktape.o react_render.o react_render_wrap.o -o _react_render.so bundle: app.js ./node_modules/.bin/webpack -test-python: bundle python react_render +python: react_render swig-python + cp _react_render.so python/ + +golang: react_render swig-golang + cp _react_render.so golang/ + rm -f golang/react_render.a + cd golang; \ + go tool 6g react_render.go; \ + go tool 6c -I /usr/local/go/pkg/linux_amd64 react_render_gc.c ; \ + go tool pack c react_render.a react_render.6 react_render_gc.6 _react_render.so + +test-python: bundle python cd python; python test.py +test-golang: bundle golang + cd golang; go tool 6g test.go react_render.go; go tool 6l test.6 + test-python-server: test-python cd python; \ virtualenv env ; \ diff --git a/golang/6.out b/golang/6.out new file mode 100755 index 0000000..712f609 Binary files /dev/null and b/golang/6.out differ diff --git a/golang/react_render.6 b/golang/react_render.6 new file mode 100644 index 0000000..51a9251 Binary files /dev/null and b/golang/react_render.6 differ diff --git a/golang/react_render.a b/golang/react_render.a new file mode 100644 index 0000000..b7a394e Binary files /dev/null and b/golang/react_render.a differ diff --git a/golang/react_render.go b/golang/react_render.go new file mode 100644 index 0000000..29194ff --- /dev/null +++ b/golang/react_render.go @@ -0,0 +1,67 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 3.0.3 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +// source: src/react_render.i + +package main + +import "unsafe" +import _ "runtime/cgo" + +var _cgo_runtime_cgocall func(unsafe.Pointer, uintptr) + + + +type _ unsafe.Pointer + + + +var Swig_escape_always_false bool +var Swig_escape_val interface{} + + +type _swig_fnptr *byte +type _swig_memberptr *byte + +var _wrap_initialize unsafe.Pointer + +func Initialize(arg1 string) (_swig_ret int) { + _swig_p := uintptr(unsafe.Pointer(&arg1)) + _cgo_runtime_cgocall(_wrap_initialize, _swig_p) + return +} +var _wrap_render_element unsafe.Pointer + +func Render_element(arg1 string) (_swig_ret string) { + _swig_p := uintptr(unsafe.Pointer(&arg1)) + _cgo_runtime_cgocall(_wrap_render_element, _swig_p) + return +} +var _wrap_set_debug unsafe.Pointer + +func _swig_wrap_set_debug(base int) { + _swig_p := uintptr(unsafe.Pointer(&base)) + _cgo_runtime_cgocall(_wrap_set_debug, _swig_p) + return +} + +func Set_debug(arg1 int) { + _swig_wrap_set_debug(arg1) +} + + +type SwigcptrVoid uintptr +type Void interface { + Swigcptr() uintptr; +} +func (p SwigcptrVoid) Swigcptr() uintptr { + return uintptr(p) +} + diff --git a/golang/react_render.swig b/golang/react_render.swig new file mode 100644 index 0000000..f6fd0e1 --- /dev/null +++ b/golang/react_render.swig @@ -0,0 +1,11 @@ +%module react_render +%{ + #include "react_render.h" +%} + +%rename(initialize) render_init; +%rename(set_debug) render_set_debug; + +extern int render_init(char *path); +extern char *render_element(char *element); +extern void render_set_debug(int debug_value); diff --git a/golang/react_render_gc.6 b/golang/react_render_gc.6 new file mode 100644 index 0000000..34d3822 Binary files /dev/null and b/golang/react_render_gc.6 differ diff --git a/golang/react_render_gc.c b/golang/react_render_gc.c new file mode 100644 index 0000000..39bbd83 --- /dev/null +++ b/golang/react_render_gc.c @@ -0,0 +1,34 @@ + +#include "runtime.h" +#include "cgocall.h" + +#pragma dataflag 16 +static void *cgocall = runtime·cgocall; +#pragma dataflag 16 +void *·_cgo_runtime_cgocall = &cgocall; + + +#pragma dynimport _wrap_initialize _wrap_initialize "" +#pragma cgo_import_static _wrap_initialize +extern void _wrap_initialize(void*); +uintptr ·_wrap_initialize = (uintptr)_wrap_initialize; + + + + +#pragma dynimport _wrap_render_element _wrap_render_element "" +#pragma cgo_import_static _wrap_render_element +extern void _wrap_render_element(void*); +uintptr ·_wrap_render_element = (uintptr)_wrap_render_element; + + + + +#pragma dynimport _wrap_set_debug _wrap_set_debug "" +#pragma cgo_import_static _wrap_set_debug +extern void _wrap_set_debug(void*); +uintptr ·_wrap_set_debug = (uintptr)_wrap_set_debug; + + + + diff --git a/golang/test.6 b/golang/test.6 new file mode 100644 index 0000000..8afd836 Binary files /dev/null and b/golang/test.6 differ diff --git a/golang/test.go b/golang/test.go new file mode 100644 index 0000000..3cc291c --- /dev/null +++ b/golang/test.go @@ -0,0 +1,11 @@ +package main + +import ( + "fmt" +) + +func main() { + Initialize("../bundle.js") + Render_element("Page") + fmt.Println("Hi Go!") +}