annotate Makefile.inc @ 53:3c6ab097eb17

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