annotate Makefile.inc @ 51:1062bd8432e0

Merge the EM and Linux build files
author Chris Cannam
date Thu, 10 Nov 2016 11:34:04 +0000
parents Makefile.inc.em@afaeb2258678
children 9aa535cc3939
rev   line source
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@51 10 @echo "$$ make linux"
Chris@51 11 @echo " - build native-code module on Linux (mostly for testing)"
Chris@51 12 @echo "$$ make clean"
Chris@51 13 @echo " - remove intermediate build files, but not targets"
Chris@51 14 @echo
Chris@51 15 @echo "Note: when switching from one target to another, make clean first"
Chris@51 16 @echo
Chris@15 17
Chris@50 18 SRC_DIR := src
Chris@15 19 SDK_DIR := ../vamp-plugin-sdk
Chris@43 20 PIPERCPP_DIR := ../piper-cpp
Chris@15 21
Chris@50 22 ADAPTER_HEADERS := \
Chris@50 23 $(SRC_DIR)/PiperAdapter.h \
Chris@50 24 $(SRC_DIR)/PiperPluginLibrary.h
Chris@50 25 ADAPTER_SOURCES := \
Chris@50 26 $(SRC_DIR)/PiperPluginLibrary.cpp
Chris@50 27
Chris@15 28 SDK_SOURCES := \
Chris@50 29 $(SDK_DIR)/src/vamp-hostsdk/PluginBufferingAdapter.cpp \
Chris@15 30 $(SDK_DIR)/src/vamp-hostsdk/PluginChannelAdapter.cpp \
Chris@50 31 $(SDK_DIR)/src/vamp-hostsdk/PluginHostAdapter.cpp \
Chris@50 32 $(SDK_DIR)/src/vamp-hostsdk/PluginInputDomainAdapter.cpp \
Chris@50 33 $(SDK_DIR)/src/vamp-hostsdk/PluginLoader.cpp \
Chris@50 34 $(SDK_DIR)/src/vamp-hostsdk/PluginSummarisingAdapter.cpp \
Chris@50 35 $(SDK_DIR)/src/vamp-hostsdk/PluginWrapper.cpp \
Chris@50 36 $(SDK_DIR)/src/vamp-hostsdk/RealTime.cpp \
Chris@50 37 $(SDK_DIR)/src/vamp-hostsdk/Files.cpp \
Chris@15 38 $(SDK_DIR)/src/vamp-sdk/PluginAdapter.cpp \
Chris@15 39 $(SDK_DIR)/src/vamp-sdk/RealTime.cpp \
Chris@15 40 $(SDK_DIR)/src/vamp-sdk/FFT.cpp
Chris@15 41
Chris@15 42 OTHER_SOURCES := \
Chris@43 43 $(PIPERCPP_DIR)/json11/json11.cpp
Chris@15 44
Chris@51 45 EM_MODULE_EXT := .js
Chris@51 46 EM_MODULE := $(MODULE_NAME)$(EM_MODULE_EXT)
Chris@51 47 EM_MODULE_SYMBOL := $(MODULE_NAME)Module
Chris@51 48
Chris@51 49 SO_MODULE_EXT := .so
Chris@51 50 SO_MODULE := $(MODULE_NAME)$(SO_MODULE_EXT)
Chris@15 51
Chris@15 52 EMFLAGS := \
Chris@15 53 --memory-init-file 0 \
Chris@15 54 -s MODULARIZE=1 \
Chris@15 55 -s NO_FILESYSTEM=1 \
Chris@15 56 -s ERROR_ON_UNDEFINED_SYMBOLS=1 \
Chris@51 57 -s EXPORT_NAME="'$(EM_MODULE_SYMBOL)'" \
Chris@43 58 -s EXPORTED_FUNCTIONS="['_piperRequestJson','_piperProcessRaw','_piperFreeJson']" \
Chris@17 59 $(EMFLAGS)
Chris@15 60
Chris@37 61 CXX_SOURCES := $(MODULE_SOURCE) $(ADAPTER_SOURCES) $(PLUGIN_SOURCES) $(SDK_SOURCES) $(OTHER_SOURCES)
Chris@50 62 C_SOURCES := $(PLUGIN_C_SOURCES)
Chris@15 63
Chris@15 64 #OPTFLAGS := -g3
Chris@15 65 OPTFLAGS := -O3 -ffast-math
Chris@15 66
Chris@35 67 DEFINES := $(DEFINES)
Chris@15 68
Chris@50 69 INCPATH := -I$(SRC_DIR) -I$(SDK_DIR) -I$(PIPERCPP_DIR) $(INCPATH)
Chris@15 70
Chris@51 71 em: $(EM_MODULE)
Chris@51 72 em: CXX := em++
Chris@51 73 em: CC := emcc
Chris@51 74 em: CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(EMFLAGS) $(INCPATH)
Chris@51 75 em: CFLAGS := -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(EMFLAGS) $(INCPATH)
Chris@51 76 em: LDFLAGS := $(EMFLAGS)
Chris@51 77
Chris@51 78 linux: $(SO_MODULE)
Chris@51 79 linux: CXXFLAGS := -std=c++11 -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(INCPATH)
Chris@51 80 linux: CFLAGS := -fPIC -Wall -Wextra $(DEFINES) $(OPTFLAGS) $(INCPATH)
Chris@51 81 linux: LDFLAGS := -shared -Wl,-Bsymbolic -Wl,-soname=$(SO_MODULE) -Wl,-z,defs -Wl,--version-script=$(SRC_DIR)/piper.map -ldl
Chris@37 82
Chris@50 83 OBJDIR := o
Chris@50 84
Chris@37 85 CXX_OBJECTS := $(CXX_SOURCES:.cpp=.o)
Chris@37 86 C_OBJECTS := $(C_SOURCES:.c=.o)
Chris@37 87 OBJECTS := $(CXX_OBJECTS) $(C_OBJECTS)
Chris@50 88 OBJECTS := $(addprefix $(OBJDIR)/,$(realpath $(OBJECTS)))
Chris@50 89
Chris@50 90 o/%.o: %.cpp
Chris@50 91 mkdir -p $(dir $@)
Chris@51 92 $(CXX) -c $(INCPATH) $(CXXFLAGS) -o $@ $<
Chris@50 93
Chris@50 94 o/%.o: %.c
Chris@50 95 mkdir -p $(dir $@)
Chris@51 96 $(CC) -c $(INCPATH) $(CFLAGS) -o $@ $<
Chris@15 97
Chris@51 98 $(EM_MODULE): $(OBJECTS)
Chris@51 99 $(CXX) $(OPTFLAGS) $(EMFLAGS) -o $@ $^ $(LDFLAGS) && \
Chris@51 100 ( echo "if (typeof process === 'object') module.exports=$(MODULE_SYMBOL);" >> $(EM_MODULE) )
Chris@15 101
Chris@51 102 $(SO_MODULE): $(OBJECTS)
Chris@51 103 $(CXX) -o $@ $^ $(LDFLAGS)
Chris@15 104
Chris@15 105 clean:
Chris@51 106 rm -f $(OBJECTS)