# # Jan Chrin # New Version: June 2016 # # makefile to build mocha mex file # printenv | grep MATLAB to reveal your MATLAB Directory # # e.g. on sf-lc we have # MATLAB=/afs/psi.ch/sys/linux/opt/matlab/2015a.x86_64 # # local executables are built in ./${EPICS_HOST_ARCH}/$(MVER) # where the MATLAB version is grepped from $(MATLAB) MATLAB_ROOT=${MATLAB} MATLAB_VERSION=$(notdir $(MATLAB_ROOT)) ##### CHANGE AS APPROPRIATE ################# #Mocha Version to install MOCHA_VERSION=mocha-noqt-1.8.0-gcc-6.3.0 #CAFE version to link to CAFE_VERSION=cafe-noqt-1.8.0-gcc-6.3.0 EPICS_BASE=${EPICS}/base #CAFE project base CAFE_BASE=/opt/gfa/cafe CAFE_MOCHA_BASE=${CAFE_BASE}/mocha CAFE_CPP_BASE=$(CAFE_BASE)/cpp/$(CAFE_VERSION) BOOST_BASE=${CAFE_BASE}/boost/boost_1_61_0/include INSTALL_MOCHA_LIBDIR= $(CAFE_MOCHA_BASE)/$(MOCHA_VERSION)/lib/$(MATLAB_VERSION) ############################################# #First deteremine if we are on a 32/64 bit machine #as mex file extensions are named differently pattern64=x86_64 pattern32=i386 PWD=$(shell pwd) #hardware platform HW=$(shell uname -i) ifeq ($(pattern64),$(findstring $(pattern64), $(HW))) MEXE=mexa64 MATLAB_LIB = $(MATLAB_ROOT)/bin/glnxa64 else ifeq ($(pattern32),$(findstring $(pattern32), $(HW))) MEXE=mexglx MATLAB_LIB = $(MATLAB_ROOT)/bin/glnxa86 endif endif INSTALL_PATH?=$(INSTALL_MOCHA_LIBDIR) OBJ_DIR= ${EPICS_HOST_ARCH}/$(MATLAB_VERSION) INCLUDEPATH_MOCHA += -I$(MATLAB_ROOT)/extern/include \ -I$(CAFE_CPP_BASE)/include -I./ \ -I$(EPICS_BASE)/include -I$(EPICS_BASE)/include/os/Linux INCLUDEPATH_MACHINETTA += $(INCLUDEPATH_MOCHA) -I$(BOOST_BASE) -I$(BOOST_BASE)/boost LIB_DIR += \ -L$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} \ -Wl,-rpath,$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} \ -L$(MATLAB_LIB) -Wl,-rpath,$(MATLAB_LIB) #-lboost_system -lboost_thread-mt LIBS += -ldl -lca -lCom -lmx -lmex -lmat LIB_INSTALL = $(LIB_DIR) -L$(INSTALL_PATH) -Wl,-rpath,$(INSTALL_PATH) LIB_LOCAL = $(LIB_DIR) CPP_OBJS=../cpp/src/libs/cafe/$(CAFE_VERSION_M) #CAFE_OBJS_DIR = $(CPP_OBJS)/cafe.o $(CPP_OBJS)/cafeCache.o $(CPP_OBJS)/cafeGroup.o $(CPP_OBJS)/cafeVectors.o \ # $(CPP_OBJS)/cafeXML.o $(CPP_OBJS)/callbackHandlerCreate.o $(CPP_OBJS)/callbackHandlerMonitor.o \ # $(CPP_OBJS)/conduitGroup.o $(CPP_OBJS)/conduit.o \ # $(CPP_OBJS)/connectCallbacks.o $(CPP_OBJS)/connectGroup.o \ # $(CPP_OBJS)/connect.o $(CPP_OBJS)/exceptionsHelper.o $(CPP_OBJS)/granules.o $(CPP_OBJS)/handleHelper.o \ # $(CPP_OBJS)/helper.o \ # $(CPP_OBJS)/loadCollectionXMLParser.o $(CPP_OBJS)/loadGroupXMLParser.o $(CPP_OBJS)/methodCallbacks.o \ # $(CPP_OBJS)/policyHelper.o \ # $(CPP_OBJS)/restorePVGroupXMLParser.o $(CPP_OBJS)/transpose.o CAFE_OBJS_DIR = $(CAFE_BASE)/cpp/$(CAFE_VERSION)/lib/libcafe.a # MATLAB Versions 2014 onwards, use # LDFLAGS='$(LIB_LOCAL) $(LIBS) instead of $(LIB_LOCAL) $(LIBS) # LDFLAGS='$(LIB_LOCAL) $(LIBS) instead of $(LIB_INSTALL) $(LIBS) $(OBJ_DIR)/mocha.$(MEXE): mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o mex -largeArrayDims CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread' \ mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o $(CAFE_OBJS_DIR) -outdir $(OBJ_DIR) -output mocha.$(MEXE) \ $(INCLUDEPATH_MOCHA) \ LDFLAGS='$(LIB_LOCAL) $(LIBS)' #$(OBJ_DIR)/libmacchinetta.so: $(OBJ_DIR)/macchinettaSwitch.o # g++ -shared -Wl,-soname,libmacchinetta.so \ # $(OBJ_DIR)/macchinettaSwitch.o -o $(OBJ_DIR)/libmacchinetta.so $(OBJ_DIR)/macchinettaSwitch.o: macchinettaSwitch.cpp macchinettaHelper.h \ macchinetta.h containerMochaccino.h mex CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread' \ -c macchinettaSwitch.cpp $(INCLUDEPATH_MACHINETTA) -outdir $(OBJ_DIR) install: $(OBJ_DIR)/mocha.$(MEXE) mkdir -p $(INSTALL_PATH) mex CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread' \ mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o $(CAFE_OBJS_DIR) -outdir $(INSTALL_PATH) -output mocha.$(MEXE) \ $(INCLUDEPATH_MOCHA) \ LDFLAGS='$(LIB_INSTALL) $(LIBS)' cp example.m $(INSTALL_PATH) cp scripts/monitorAction.m $(INSTALL_PATH) cp scripts/pvtable.m $(INSTALL_PATH) cp scripts/test.xml $(INSTALL_PATH) install_lib: $(OBJ_DIR)/libmacchinetta.so mkdir -p $(INSTALL_PATH) cp $(OBJ_DIR)/libmacchinetta.so $(INSTALL_PATH) clean: rm -f $(OBJ_DIR)/*.o $(OBJ_DIR)/*.so $(OBJ_DIR)/*.$(MEXE)