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