c@120: c@120: default: help c@120: c@120: help: c@120: @echo c@120: @echo "Supported make targets:" c@120: @echo c@120: @echo "$$ make em" c@120: @echo " - build Javascript module using Emscripten" c@120: @echo "$$ make linux" c@120: @echo " - build native-code module on Linux (mostly for testing)" c@120: @echo "$$ make clean" c@120: @echo " - remove intermediate build files, but not targets" c@122: @echo "$$ make distclean" c@122: @echo " - remove all targets and intermediate build files" c@120: @echo c@120: @echo "Note: when switching from one target to another, make clean first" c@120: @echo c@120: c@121: MY_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) c@121: c@121: SRC_DIR := $(MY_DIR)/src c@121: SDK_DIR := $(MY_DIR)/../vamp-plugin-sdk c@121: PIPERCPP_DIR := $(MY_DIR)/../piper-cpp c@120: c@120: ADAPTER_HEADERS := \ c@120: $(SRC_DIR)/PiperAdapter.h \ c@120: $(SRC_DIR)/PiperPluginLibrary.h c@120: ADAPTER_SOURCES := \ c@120: $(SRC_DIR)/PiperPluginLibrary.cpp c@120: c@120: SDK_SOURCES := \ c@120: $(SDK_DIR)/src/vamp-hostsdk/PluginBufferingAdapter.cpp \ c@120: $(SDK_DIR)/src/vamp-hostsdk/PluginChannelAdapter.cpp \ c@120: $(SDK_DIR)/src/vamp-hostsdk/PluginHostAdapter.cpp \ c@120: $(SDK_DIR)/src/vamp-hostsdk/PluginInputDomainAdapter.cpp \ c@120: $(SDK_DIR)/src/vamp-hostsdk/PluginLoader.cpp \ c@120: $(SDK_DIR)/src/vamp-hostsdk/PluginSummarisingAdapter.cpp \ c@120: $(SDK_DIR)/src/vamp-hostsdk/PluginWrapper.cpp \ c@120: $(SDK_DIR)/src/vamp-hostsdk/RealTime.cpp \ c@120: $(SDK_DIR)/src/vamp-hostsdk/Files.cpp \ c@120: $(SDK_DIR)/src/vamp-sdk/PluginAdapter.cpp \ c@120: $(SDK_DIR)/src/vamp-sdk/RealTime.cpp \ c@120: $(SDK_DIR)/src/vamp-sdk/FFT.cpp c@120: c@120: OTHER_SOURCES := \ c@120: $(PIPERCPP_DIR)/json11/json11.cpp c@120: c@120: EM_MODULE_EXT := .js c@120: EM_MODULE := $(MODULE_NAME)$(EM_MODULE_EXT) c@120: EM_MODULE_SYMBOL := $(MODULE_NAME)Module c@120: c@120: SO_MODULE_EXT := .so c@120: SO_MODULE := $(MODULE_NAME)$(SO_MODULE_EXT) c@120: c@120: EMFLAGS := \ c@120: --memory-init-file 0 \ c@120: -s MODULARIZE=1 \ c@120: -s NO_FILESYSTEM=1 \ c@120: -s ERROR_ON_UNDEFINED_SYMBOLS=1 \ c@120: -s EXPORT_NAME="'$(EM_MODULE_SYMBOL)'" \ c@120: -s EXPORTED_FUNCTIONS="['_piperRequestJson','_piperProcessRaw','_piperFreeJson']" \ c@120: $(EMFLAGS) c@120: c@120: CXX_SOURCES := $(MODULE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(SDK_SOURCES) $(OTHER_SOURCES) c@121: C_SOURCES := $(PLUGIN_C_SOURCES) $(C_SOURCES) c@120: c@120: #OPTFLAGS := -g3 c@120: OPTFLAGS := -O3 -ffast-math c@120: c@120: DEFINES := $(DEFINES) c@120: c@120: INCPATH := -I$(SRC_DIR) -I$(SDK_DIR) -I$(PIPERCPP_DIR) $(INCPATH) c@120: c@120: em: $(EM_MODULE) c@120: em: CXX := em++ c@120: em: CC := emcc c@120: em: CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(EMFLAGS) $(INCPATH) c@120: em: CFLAGS := -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(EMFLAGS) $(INCPATH) c@120: em: LDFLAGS := $(EMFLAGS) c@120: c@120: linux: $(SO_MODULE) c@120: linux: CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(INCPATH) c@120: linux: CFLAGS := -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(INCPATH) c@120: linux: LDFLAGS := -shared -Wl,-Bsymbolic -Wl,-soname=$(SO_MODULE) -Wl,-z,defs -Wl,--version-script=$(SRC_DIR)/piper.map -ldl c@120: c@120: OBJDIR := o c@120: c@120: CXX_OBJECTS := $(CXX_SOURCES:.cpp=.o) c@120: C_OBJECTS := $(C_SOURCES:.c=.o) c@122: ALL_OBJECTS := $(CXX_OBJECTS) $(C_OBJECTS) c@122: OBJECTS := $(addprefix $(OBJDIR)/,$(abspath $(ALL_OBJECTS))) c@120: c@120: o/%.o: %.cpp c@120: mkdir -p $(dir $@) c@120: $(CXX) -c $(INCPATH) $(CXXFLAGS) -o $@ $< c@120: c@120: o/%.o: %.c c@120: mkdir -p $(dir $@) c@120: $(CC) -c $(INCPATH) $(CFLAGS) -o $@ $< c@120: c@120: $(EM_MODULE): $(OBJECTS) c@121: $(CXX) $(OPTFLAGS) -o $@ $^ $(LDFLAGS) && \ c@122: ( echo "if (typeof process === 'object') module.exports=$(EM_MODULE_SYMBOL);" >> $(EM_MODULE) ) c@120: c@120: $(SO_MODULE): $(OBJECTS) c@120: $(CXX) -o $@ $^ $(LDFLAGS) c@120: c@120: clean: c@120: rm -f $(OBJECTS) c@122: c@122: distclean: clean c@122: rm -f $(EM_MODULE) $(SO_MODULE)