Chris@51
|
1
|
Chris@51
|
2 default: help
|
Chris@51
|
3
|
Chris@51
|
4 help:
|
Chris@51
|
5 @echo
|
Chris@51
|
6 @echo "Supported make targets:"
|
Chris@51
|
7 @echo
|
Chris@51
|
8 @echo "$$ make em"
|
Chris@51
|
9 @echo " - build Javascript module using Emscripten"
|
Chris@63
|
10 @echo "$$ make test"
|
Chris@65
|
11 @echo " - build and run simple load test of Javascript module using node.js"
|
Chris@51
|
12 @echo "$$ make linux"
|
Chris@55
|
13 @echo " - build native-code module on Linux (currently this is mostly for testing)"
|
Chris@51
|
14 @echo "$$ make clean"
|
Chris@51
|
15 @echo " - remove intermediate build files, but not targets"
|
Chris@53
|
16 @echo "$$ make distclean"
|
Chris@53
|
17 @echo " - remove all targets and intermediate build files"
|
Chris@51
|
18 @echo
|
Chris@51
|
19 @echo "Note: when switching from one target to another, make clean first"
|
Chris@51
|
20 @echo
|
Chris@15
|
21
|
Chris@52
|
22 MY_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
|
Chris@52
|
23
|
Chris@52
|
24 SRC_DIR := $(MY_DIR)/src
|
Chris@52
|
25 SDK_DIR := $(MY_DIR)/../vamp-plugin-sdk
|
Chris@52
|
26 PIPERCPP_DIR := $(MY_DIR)/../piper-cpp
|
Chris@15
|
27
|
Chris@50
|
28 ADAPTER_HEADERS := \
|
Chris@50
|
29 $(SRC_DIR)/PiperAdapter.h \
|
Chris@50
|
30 $(SRC_DIR)/PiperPluginLibrary.h
|
Chris@50
|
31 ADAPTER_SOURCES := \
|
Chris@50
|
32 $(SRC_DIR)/PiperPluginLibrary.cpp
|
Chris@50
|
33
|
Chris@15
|
34 SDK_SOURCES := \
|
Chris@50
|
35 $(SDK_DIR)/src/vamp-hostsdk/PluginBufferingAdapter.cpp \
|
Chris@15
|
36 $(SDK_DIR)/src/vamp-hostsdk/PluginChannelAdapter.cpp \
|
Chris@50
|
37 $(SDK_DIR)/src/vamp-hostsdk/PluginHostAdapter.cpp \
|
Chris@50
|
38 $(SDK_DIR)/src/vamp-hostsdk/PluginInputDomainAdapter.cpp \
|
Chris@50
|
39 $(SDK_DIR)/src/vamp-hostsdk/PluginLoader.cpp \
|
Chris@50
|
40 $(SDK_DIR)/src/vamp-hostsdk/PluginSummarisingAdapter.cpp \
|
Chris@50
|
41 $(SDK_DIR)/src/vamp-hostsdk/PluginWrapper.cpp \
|
Chris@50
|
42 $(SDK_DIR)/src/vamp-hostsdk/RealTime.cpp \
|
Chris@50
|
43 $(SDK_DIR)/src/vamp-hostsdk/Files.cpp \
|
Chris@15
|
44 $(SDK_DIR)/src/vamp-sdk/PluginAdapter.cpp \
|
Chris@15
|
45 $(SDK_DIR)/src/vamp-sdk/RealTime.cpp \
|
Chris@15
|
46 $(SDK_DIR)/src/vamp-sdk/FFT.cpp
|
Chris@15
|
47
|
Chris@15
|
48 OTHER_SOURCES := \
|
Chris@43
|
49 $(PIPERCPP_DIR)/json11/json11.cpp
|
Chris@15
|
50
|
Chris@51
|
51 EM_MODULE_EXT := .js
|
Chris@51
|
52 EM_MODULE := $(MODULE_NAME)$(EM_MODULE_EXT)
|
Chris@51
|
53 EM_MODULE_SYMBOL := $(MODULE_NAME)Module
|
Chris@51
|
54
|
Chris@51
|
55 SO_MODULE_EXT := .so
|
Chris@51
|
56 SO_MODULE := $(MODULE_NAME)$(SO_MODULE_EXT)
|
Chris@15
|
57
|
Chris@15
|
58 EMFLAGS := \
|
Chris@15
|
59 --memory-init-file 0 \
|
Chris@15
|
60 -s MODULARIZE=1 \
|
Chris@15
|
61 -s NO_FILESYSTEM=1 \
|
Chris@15
|
62 -s ERROR_ON_UNDEFINED_SYMBOLS=1 \
|
Chris@51
|
63 -s EXPORT_NAME="'$(EM_MODULE_SYMBOL)'" \
|
Chris@43
|
64 -s EXPORTED_FUNCTIONS="['_piperRequestJson','_piperProcessRaw','_piperFreeJson']" \
|
Chris@17
|
65 $(EMFLAGS)
|
Chris@15
|
66
|
Chris@37
|
67 CXX_SOURCES := $(MODULE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(SDK_SOURCES) $(OTHER_SOURCES)
|
Chris@52
|
68 C_SOURCES := $(PLUGIN_C_SOURCES) $(C_SOURCES)
|
Chris@15
|
69
|
Chris@66
|
70 #OPTFLAGS ?= -g3
|
Chris@66
|
71 OPTFLAGS ?= -O
|
Chris@15
|
72
|
Chris@35
|
73 DEFINES := $(DEFINES)
|
Chris@65
|
74 INCLUDES := -I$(SRC_DIR) -I$(SDK_DIR) -I$(PIPERCPP_DIR) $(INCLUDES)
|
Chris@15
|
75
|
Chris@51
|
76 em: $(EM_MODULE)
|
Chris@51
|
77 em: CXX := em++
|
Chris@51
|
78 em: CC := emcc
|
Chris@61
|
79 em: CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(EMFLAGS) $(INCLUDES)
|
Chris@61
|
80 em: CFLAGS := -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(EMFLAGS) $(INCLUDES)
|
Chris@51
|
81 em: LDFLAGS := $(EMFLAGS)
|
Chris@51
|
82
|
Chris@51
|
83 linux: $(SO_MODULE)
|
Chris@61
|
84 linux: CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(INCLUDES)
|
Chris@61
|
85 linux: CFLAGS := -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(INCLUDES)
|
Chris@51
|
86 linux: LDFLAGS := -shared -Wl,-Bsymbolic -Wl,-soname=$(SO_MODULE) -Wl,-z,defs -Wl,--version-script=$(SRC_DIR)/piper.map -ldl
|
Chris@37
|
87
|
Chris@50
|
88 OBJDIR := o
|
Chris@50
|
89
|
Chris@37
|
90 CXX_OBJECTS := $(CXX_SOURCES:.cpp=.o)
|
Chris@37
|
91 C_OBJECTS := $(C_SOURCES:.c=.o)
|
Chris@53
|
92 ALL_OBJECTS := $(CXX_OBJECTS) $(C_OBJECTS)
|
Chris@53
|
93 OBJECTS := $(addprefix $(OBJDIR)/,$(abspath $(ALL_OBJECTS)))
|
Chris@50
|
94
|
Chris@50
|
95 o/%.o: %.cpp
|
Chris@50
|
96 mkdir -p $(dir $@)
|
Chris@61
|
97 $(CXX) -c $(INCLUDES) $(CXXFLAGS) -o $@ $<
|
Chris@50
|
98
|
Chris@50
|
99 o/%.o: %.c
|
Chris@50
|
100 mkdir -p $(dir $@)
|
Chris@61
|
101 $(CC) -c $(INCLUDES) $(CFLAGS) -o $@ $<
|
Chris@15
|
102
|
Chris@51
|
103 $(EM_MODULE): $(OBJECTS)
|
Chris@52
|
104 $(CXX) $(OPTFLAGS) -o $@ $^ $(LDFLAGS) && \
|
Chris@53
|
105 ( echo "if (typeof process === 'object') module.exports=$(EM_MODULE_SYMBOL);" >> $(EM_MODULE) )
|
Chris@15
|
106
|
Chris@51
|
107 $(SO_MODULE): $(OBJECTS)
|
Chris@51
|
108 $(CXX) -o $@ $^ $(LDFLAGS)
|
Chris@15
|
109
|
Chris@63
|
110 test: em
|
Chris@63
|
111 node $(MY_DIR)/test/node-load-test.js $(shell pwd)/$(EM_MODULE)
|
Chris@63
|
112
|
Chris@15
|
113 clean:
|
Chris@51
|
114 rm -f $(OBJECTS)
|
Chris@53
|
115
|
Chris@53
|
116 distclean: clean
|
Chris@53
|
117 rm -f $(EM_MODULE) $(SO_MODULE)
|