Mercurial > hg > piper-vamp-js
diff Makefile.inc @ 120:975719b38bdb
Merge the EM and Linux build files
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Thu, 10 Nov 2016 11:34:04 +0000 |
parents | |
children | d1a99d44812b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile.inc Thu Nov 10 11:34:04 2016 +0000 @@ -0,0 +1,106 @@ + +default: help + +help: + @echo + @echo "Supported make targets:" + @echo + @echo "$$ make em" + @echo " - build Javascript module using Emscripten" + @echo "$$ make linux" + @echo " - build native-code module on Linux (mostly for testing)" + @echo "$$ make clean" + @echo " - remove intermediate build files, but not targets" + @echo + @echo "Note: when switching from one target to another, make clean first" + @echo + +SRC_DIR := src +SDK_DIR := ../vamp-plugin-sdk +PIPERCPP_DIR := ../piper-cpp + +ADAPTER_HEADERS := \ + $(SRC_DIR)/PiperAdapter.h \ + $(SRC_DIR)/PiperPluginLibrary.h +ADAPTER_SOURCES := \ + $(SRC_DIR)/PiperPluginLibrary.cpp + +SDK_SOURCES := \ + $(SDK_DIR)/src/vamp-hostsdk/PluginBufferingAdapter.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginChannelAdapter.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginHostAdapter.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginInputDomainAdapter.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginLoader.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginSummarisingAdapter.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/PluginWrapper.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/RealTime.cpp \ + $(SDK_DIR)/src/vamp-hostsdk/Files.cpp \ + $(SDK_DIR)/src/vamp-sdk/PluginAdapter.cpp \ + $(SDK_DIR)/src/vamp-sdk/RealTime.cpp \ + $(SDK_DIR)/src/vamp-sdk/FFT.cpp + +OTHER_SOURCES := \ + $(PIPERCPP_DIR)/json11/json11.cpp + +EM_MODULE_EXT := .js +EM_MODULE := $(MODULE_NAME)$(EM_MODULE_EXT) +EM_MODULE_SYMBOL := $(MODULE_NAME)Module + +SO_MODULE_EXT := .so +SO_MODULE := $(MODULE_NAME)$(SO_MODULE_EXT) + +EMFLAGS := \ + --memory-init-file 0 \ + -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']" \ + $(EMFLAGS) + +CXX_SOURCES := $(MODULE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(SDK_SOURCES) $(OTHER_SOURCES) +C_SOURCES := $(PLUGIN_C_SOURCES) + +#OPTFLAGS := -g3 +OPTFLAGS := -O3 -ffast-math + +DEFINES := $(DEFINES) + +INCPATH := -I$(SRC_DIR) -I$(SDK_DIR) -I$(PIPERCPP_DIR) $(INCPATH) + +em: $(EM_MODULE) +em: CXX := em++ +em: CC := emcc +em: CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(EMFLAGS) $(INCPATH) +em: CFLAGS := -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(EMFLAGS) $(INCPATH) +em: LDFLAGS := $(EMFLAGS) + +linux: $(SO_MODULE) +linux: CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(INCPATH) +linux: CFLAGS := -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(INCPATH) +linux: LDFLAGS := -shared -Wl,-Bsymbolic -Wl,-soname=$(SO_MODULE) -Wl,-z,defs -Wl,--version-script=$(SRC_DIR)/piper.map -ldl + +OBJDIR := o + +CXX_OBJECTS := $(CXX_SOURCES:.cpp=.o) +C_OBJECTS := $(C_SOURCES:.c=.o) +OBJECTS := $(CXX_OBJECTS) $(C_OBJECTS) +OBJECTS := $(addprefix $(OBJDIR)/,$(realpath $(OBJECTS))) + +o/%.o: %.cpp + mkdir -p $(dir $@) + $(CXX) -c $(INCPATH) $(CXXFLAGS) -o $@ $< + +o/%.o: %.c + mkdir -p $(dir $@) + $(CC) -c $(INCPATH) $(CFLAGS) -o $@ $< + +$(EM_MODULE): $(OBJECTS) + $(CXX) $(OPTFLAGS) $(EMFLAGS) -o $@ $^ $(LDFLAGS) && \ + ( echo "if (typeof process === 'object') module.exports=$(MODULE_SYMBOL);" >> $(EM_MODULE) ) + +$(SO_MODULE): $(OBJECTS) + $(CXX) -o $@ $^ $(LDFLAGS) + +clean: + rm -f $(OBJECTS)