changeset 173:b23c3427eb61

Merge branch 'master' into wasm
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 12 Jun 2018 14:57:45 +0100
parents 04bb3a41a3b2 (diff) 395304838d4d (current diff)
children a007360392e0
files Makefile.inc
diffstat 3 files changed, 55 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.gitignore	Tue Jun 12 14:57:45 2018 +0100
@@ -0,0 +1,2 @@
+*.o
+*~
--- a/Makefile.inc	Wed May 16 11:56:21 2018 +0100
+++ b/Makefile.inc	Tue Jun 12 14:57:45 2018 +0100
@@ -87,6 +87,11 @@
 EM_MODULE_U	:= $(MODULE_NAME)$(EM_MODULE_U_EXT)
 EM_MODULE_SYMBOL	:= $(MODULE_NAME)Module
 
+WASM_MODULE_T_EXT := _w.js
+WASM_MODULE_U_EXT := _w.umd.js
+WASM_MODULE_T   := $(MODULE_NAME)$(WASM_MODULE_T_EXT)
+WASM_MODULE_U   := $(MODULE_NAME)$(WASM_MODULE_U_EXT)
+
 SO_MODULE_EXT	:= .so
 SO_MODULE	:= $(MODULE_NAME)$(SO_MODULE_EXT)
 
@@ -95,11 +100,17 @@
 		-s MODULARIZE=1 \
 		-s NO_FILESYSTEM=1 \
 		-s ERROR_ON_UNDEFINED_SYMBOLS=1 \
-	    	-s EXPORT_NAME="'$(EM_MODULE_SYMBOL)'" \
-	    	-s EXPORTED_FUNCTIONS="['_piperRequestJson','_piperProcessRaw','_piperFreeJson']" \
-                -s EXTRA_EXPORTED_RUNTIME_METHODS="['cwrap', 'allocate', 'ALLOC_NORMAL', 'Pointer_stringify', 'intArrayFromString']" \
+	    	-s "EXPORT_NAME='$(EM_MODULE_SYMBOL)'" \
+	    	-s "EXPORTED_FUNCTIONS=['_piperRequestJson','_piperProcessRaw','_piperFreeJson']" \
+                -s "EXTRA_EXPORTED_RUNTIME_METHODS=['cwrap', 'allocate', 'ALLOC_NORMAL', 'Pointer_stringify', 'intArrayFromString']" \
 		$(EMFLAGS)
 
+WASMFLAGS       := \
+                $(EMFLAGS) \
+                -s WASM=1
+
+#                -s "BINARYEN_METHOD='native-wasm'"
+
 CXX_SOURCES	:= $(MODULE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(SDK_SOURCES) $(OTHER_SOURCES)
 C_SOURCES	:= $(PLUGIN_C_SOURCES) $(C_SOURCES)
 
@@ -116,6 +127,13 @@
 em:	CFLAGS		:= -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(EMFLAGS) $(INCLUDES)
 em:	LDFLAGS		:= $(EMFLAGS)
 
+wasm:   $(WASM_MODULE_U)
+wasm:   CXX		:= em++
+wasm:	CC		:= emcc
+wasm:	CXXFLAGS	:= -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(WASMFLAGS) $(INCLUDES)
+wasm:	CFLAGS		:= -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(WASMFLAGS) $(INCLUDES)
+wasm:	LDFLAGS		:= $(WASMFLAGS)
+
 linux:	$(SO_MODULE)
 linux:	CXXFLAGS	:= -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(INCLUDES)
 linux:	CFLAGS		:= -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(INCLUDES)
@@ -143,15 +161,25 @@
                 rm $(EM_MODULE_T) && \
 		( echo ; echo "return $(EM_MODULE_SYMBOL);}));" >> $(EM_MODULE_U) )
 
+$(WASM_MODULE_U): $(OBJECTS)
+		$(CXX) $(OPTFLAGS) -o $(WASM_MODULE_T) $^ $(LDFLAGS) && \
+		( echo "(function(root,factory){if(typeof define==='function'&&define.amd){define([],factory);}else if(typeof module==='object'&&module.exports){module.exports=factory();}else{root['$(EM_MODULE_SYMBOL)']=factory();}}(this,function(){" > $(WASM_MODULE_U) ) && \
+		cat $(WASM_MODULE_T) >> $(WASM_MODULE_U) && \
+                rm $(WASM_MODULE_T) && \
+		( echo ; echo "return $(EM_MODULE_SYMBOL);}));" >> $(WASM_MODULE_U) )
+
 $(SO_MODULE):	$(OBJECTS)
 		$(CXX) -o $@ $^ $(LDFLAGS)
 
 test:		em
 		$(NODE) $(MY_DIR)/test/node-load-test.js $(shell pwd)/$(EM_MODULE_U)
 
+test-wasm:		wasm
+		$(NODE) $(MY_DIR)/test/node-load-test.js $(shell pwd)/$(WASM_MODULE_U)
+
 clean:
 		rm -f $(OBJECTS)
 
 distclean:	clean
-		rm -f $(EM_MODULE_T) $(EM_MODULE_U) $(SO_MODULE)
+		rm -f $(EM_MODULE_T) $(EM_MODULE_U) $(WASM_MODULE_T) $(WASM_MODULE_U) $(SO_MODULE)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/quick-test-wasm.html	Tue Jun 12 14:57:45 2018 +0100
@@ -0,0 +1,21 @@
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <title>Piper Adapter Test</title>
+
+    <style type="text/css">
+      body { margin: 5%; }
+      table, td, th { border: 0.1em solid #e0e0e0; border-collapse: collapse }
+      td, th { padding: 0.5em }
+    </style>
+
+    <script src="../examples/vamp-example-plugins/VampExamplePlugins_w.umd.js"></script>
+    <script src="quick-test.js"></script>
+  </head>
+  <body>
+    <h3>Piper Adapter Test</h3>
+
+    <p id="test-result"></p>
+    
+  </body>
+</html>