annotate Makefile.inc @ 66:08d80862b69c

-ffast-math is not a great idea as a default flag, because some plugins won't work correctly with it. Also allow people to override these
author Chris Cannam
date Sat, 12 Nov 2016 09:58:24 +0000
parents 4a5295555574
children
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@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)