9 Commits

Author SHA1 Message Date
Armborst Felix
bddcb4f9c7 Cafe 1.21 setup script and module template final 2024-07-14 10:29:29 +02:00
Armborst Felix
477d4ec821 Cafe 1.21 setup script updated 2024-07-14 09:59:27 +02:00
Armborst Felix
d59a6b9dae Cafe 1.21 setup script updated 2024-07-13 13:50:04 +02:00
Armborst Felix
8ea218717a Cafe 1.21 setup script updated 2024-07-13 13:32:50 +02:00
a8d745839b Cafe 1.21 setup script done 2024-07-13 13:28:04 +02:00
Armborst Felix
140e306c96 Cafe 1.21 almost done 2024-07-13 09:00:00 +02:00
0eb076c215 bash sh wrappers to makefiles 2024-07-10 17:41:32 +02:00
Armborst Felix
76c93d7b3f updated version in macchinettaSwitch.cpp 2024-07-10 16:26:07 +02:00
36401f6b9e epics 7.0.8 2024-07-10 16:00:26 +02:00
13 changed files with 353 additions and 3 deletions

4
.gitignore vendored
View File

@@ -9,5 +9,7 @@ SL6-x86_64
windows-x64
felix-cache
readme.txt
makefile_rel*
makefile_rel_1.1*
makefile_rel_1.3*
makefile_rel_1.20*
*.*.orig

View File

@@ -8,4 +8,4 @@ function mcaunlock;
% loosing channel access connections.
%mca(0);
mocha('mexUnlock');
disp('mca mex-file is now UNLOCKED');
%disp('mca mex-file is now UNLOCKED');

Binary file not shown.

Binary file not shown.

View File

@@ -501,7 +501,7 @@ void macchinettaFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prh
break;
case MOCHA_VERSION:
plhs[0]=mxCreateString((char *) "mocha-1.20.1 : 7 May 2024");
plhs[0]=mxCreateString((char *) "mocha-1.21.0 : 12 July 2024; Contact: Felix Armborst");
break;
case SHOW:

View File

@@ -0,0 +1,105 @@
#
# Jan Chrin
# Version: July 2019 - Qt5
#
# makefile to build mocha mex file
# printenv | grep MATLAB to reveal your MATLAB Directory
#
#
# 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-1.21.0-gcc-10.4.0
#CAFE version to link to
CAFE_VERSION=cafe-1.21.0-gcc-10.4.0
EPICS_BASE=${EPICS}/base-7.0.8
#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
CAFE_OBJS_DIR = $(CAFE_BASE)/cpp/$(CAFE_VERSION)/lib/$(EPICS_HOST_ARCH)/libcafe.a
#if qt5 has libQt5Core.so link
#QT5_DIR= /opt/psi/Cafe/cafe-matlab/${MATLAB_VERSION}/libexec
QT5_DIR= ${MATLAB_ROOT}/bin/glnxa64
INSTALL_MOCHA_LIBDIR= $(CAFE_MOCHA_BASE)/$(MOCHA_VERSION)/lib/$(EPICS_HOST_ARCH)/$(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 \
-I$(EPICS_BASE)/include/compiler/gcc
INCLUDEPATH_MACHINETTA += $(INCLUDEPATH_MOCHA) -I$(BOOST_BASE) -I$(BOOST_BASE)/boost
# linkage to qt5 required if cafe built with Qt5
#-lboost_system -lboost_thread-mt
LIBS += -ldl -lca -lCom -lmx -lmex -lmat -lQt5Core -lQt5Xml
#LIBS += -lmx -lmex -lmat
$(OBJ_DIR)/mocha.$(MEXE): mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o
mex CXXFLAGS='$(CXXFLAGS) -v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -std=c++1z' \
'LDFLAGS=-L$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -Wl,-rpath,$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -L${QT5_DIR} -Wl,-rpath,${QT5_DIR} -L$(MATLAB_LIB) -Wl,-rpath,$(MATLAB_LIB) $(LIBS)' \
mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o $(CAFE_OBJS_DIR) \
-outdir $(OBJ_DIR) -output mocha.$(MEXE) \
$(INCLUDEPATH_MOCHA)
cp example.m $(OBJ_DIR)
cp scripts/*.m $(OBJ_DIR)
cp scripts/test.xml $(OBJ_DIR)
$(OBJ_DIR)/macchinettaSwitch.o: macchinettaSwitch.cpp macchinettaHelper.h \
macchinetta.h containerMochaccino.h
mex CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -std=c++1z' \
-c macchinettaSwitch.cpp $(INCLUDEPATH_MACHINETTA) 'LDFLAGS=-L$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -Wl,-rpath,$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -L$(MATLAB_LIB) -Wl,-rpath,$(MATLAB_LIB) $(LIBS)' -outdir $(OBJ_DIR)
install: $(OBJ_DIR)/mocha.$(MEXE)
mkdir -p $(INSTALL_PATH)
mex CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -std=c++1z' \
mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o $(CAFE_OBJS_DIR) -outdir $(INSTALL_PATH) -output mocha.$(MEXE) $(INCLUDEPATH_MOCHA) \
'LDFLAGS=-L$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -Wl,-rpath,$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -L$(MATLAB_LIB) -Wl,-rpath,$(MATLAB_LIB) $(LIBS)'
cp example.m $(INSTALL_PATH)
cp scripts/*.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)
print-% : ; @echo $* = $($*)

View File

@@ -0,0 +1,5 @@
module unload gcc
module load gcc/10.4.0
echo "$1"
action=$1
make -f makefile_rel_1.21-gcc-10.4.0 -s $action

105
makefile_rel_1.21-gcc-7.3.0 Normal file
View File

@@ -0,0 +1,105 @@
#
# Jan Chrin
# Version: July 2019 - Qt5
#
# makefile to build mocha mex file
# printenv | grep MATLAB to reveal your MATLAB Directory
#
#
# 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-1.21.0-gcc-7.3.0
#CAFE version to link to
CAFE_VERSION=cafe-1.21.0-gcc-7.3.0
EPICS_BASE=${EPICS}/base-7.0.8
#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
CAFE_OBJS_DIR = $(CAFE_BASE)/cpp/$(CAFE_VERSION)/lib/$(EPICS_HOST_ARCH)/libcafe.a
#if qt5 has libQt5Core.so link
#QT5_DIR= /opt/psi/Cafe/cafe-matlab/${MATLAB_VERSION}/libexec
QT5_DIR= ${MATLAB_ROOT}/bin/glnxa64
INSTALL_MOCHA_LIBDIR= $(CAFE_MOCHA_BASE)/$(MOCHA_VERSION)/lib/$(EPICS_HOST_ARCH)/$(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 \
-I$(EPICS_BASE)/include/compiler/gcc
INCLUDEPATH_MACHINETTA += $(INCLUDEPATH_MOCHA) -I$(BOOST_BASE) -I$(BOOST_BASE)/boost
# linkage to qt5 required if cafe built with Qt5
#-lboost_system -lboost_thread-mt
LIBS += -ldl -lca -lCom -lmx -lmex -lmat -lQt5Core -lQt5Xml
#LIBS += -lmx -lmex -lmat
$(OBJ_DIR)/mocha.$(MEXE): mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o
mex CXXFLAGS='$(CXXFLAGS) -v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -std=c++1z' \
'LDFLAGS=-L$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -Wl,-rpath,$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -L${QT5_DIR} -Wl,-rpath,${QT5_DIR} -L$(MATLAB_LIB) -Wl,-rpath,$(MATLAB_LIB) $(LIBS)' \
mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o $(CAFE_OBJS_DIR) \
-outdir $(OBJ_DIR) -output mocha.$(MEXE) \
$(INCLUDEPATH_MOCHA)
cp example.m $(OBJ_DIR)
cp scripts/*.m $(OBJ_DIR)
cp scripts/test.xml $(OBJ_DIR)
$(OBJ_DIR)/macchinettaSwitch.o: macchinettaSwitch.cpp macchinettaHelper.h \
macchinetta.h containerMochaccino.h
mex CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -std=c++1z' \
-c macchinettaSwitch.cpp $(INCLUDEPATH_MACHINETTA) 'LDFLAGS=-L$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -Wl,-rpath,$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -L$(MATLAB_LIB) -Wl,-rpath,$(MATLAB_LIB) $(LIBS)' -outdir $(OBJ_DIR)
install: $(OBJ_DIR)/mocha.$(MEXE)
mkdir -p $(INSTALL_PATH)
mex CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread -std=c++1z' \
mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o $(CAFE_OBJS_DIR) -outdir $(INSTALL_PATH) -output mocha.$(MEXE) $(INCLUDEPATH_MOCHA) \
'LDFLAGS=-L$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -Wl,-rpath,$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} -L$(MATLAB_LIB) -Wl,-rpath,$(MATLAB_LIB) $(LIBS)'
cp example.m $(INSTALL_PATH)
cp scripts/*.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)
print-% : ; @echo $* = $($*)

View File

@@ -0,0 +1,5 @@
module unload gcc
module load gcc/7.3.0
echo "$1"
action=$1
make -f makefile_rel_1.21-gcc-7.3.0 -s $action

20
modulefile_template Normal file
View File

@@ -0,0 +1,20 @@
#%Module1.0
module-whatis "mocha matlab executable"
module-url "https://cafe.psi.ch"
module-license "GPL V3"
module-maintainer "Felix Armborst <felix.armborst@psi.ch>"
module-help "
Versions
RHEL vrhel
EPICS vepics
GCC vgcc
CAFE vcafe
Further details under https://cafe.psi.ch/mocha.html
"
module load matlab/vmatlab
prepend-path MATLABPATH "$PREFIX/libexec"

108
setup_each_matlab.sh Normal file
View File

@@ -0,0 +1,108 @@
#!/bin/bash
# user prompt for setup step
while [[ ! $step =~ ^(0|1|2|3|4|5|6)$ ]]
do
echo "Which setup step should be run?"
echo " 0 - cleanup (make clean)"
echo " 1 - local build (make)"
echo " 2 - test local build (matlab -batch ...)"
echo " 3 - install build to /opt/gfa/cafe/mocha/ (make install)"
echo " 4 - deploy build to pmodules"
echo " 5 - update pmodule info files"
echo " 6 - test module (module load && matlab -batch ...)"
read -p "choose step (0-6): " step
done
ca office network
module use Cafe
vrhel=${RHREL}
vcafe=1.21.0
vepics=7.0.8
for vmatlab in 2024a 2023b 2023a 2022b 2022a 2021b 2021a 2020b 2020a 2019b 2019a 2018b 2018a
do
if [[ "$vmatlab" =~ ^(2018a|2018b|2019a|2019b|2020a|2020b|2021a|2021b)$ ]]; then
vgcc=7.3.0
elif [[ "$vmatlab" =~ ^(2022a|2022b|2023a|2023b|2024a)$ ]]; then
vgcc=10.4.0
fi
printf "\n\n\n=======================================================================\n"
printf "=======================================================================\n"
echo "Versions"
echo " Matlab: $vmatlab"
echo " RHEL: $vrhel"
echo " gcc: $vgcc"
echo " Cafe: $vcafe"
echo " EPICS: $vepics"
printf "=======================================================================\n"
printf "=======================================================================\n"
module unload cafe-matlab
module unload matlab
module load matlab/$vmatlab
module unload gcc
module load gcc/$vgcc
module list
if [ $step -eq 0 ]; then
echo "0 - cleanup (make clean)"
make -f makefile_rel_1.21-gcc-$vgcc clean
elif [ $step -eq 1 ]; then
echo "1 - local build (make)"
make -f makefile_rel_1.21-gcc-$vgcc
elif [ $step -eq 2 ]; then
echo "2 - test local build (matlab -batch ...)"
if [[ "$vmatlab" =~ ^(2019a|2019b|2020a|2020b|2021a|2021b|2022a|2022b|2023a|2023b|2024a)$ ]]; then
matlab -batch "cd RHEL8-x86_64/$vmatlab;disp(mocha('version'));example"
else
matlab -nodisplay -nosplash -nodesktop -r "cd RHEL8-x86_64/$vmatlab;disp(mocha('version'));example;exit"
fi
elif [ $step -eq 3 ]; then
echo "3 - install build to /opt/gfa/cafe/mocha/ (make install)"
make -f makefile_rel_1.21-gcc-$vgcc install
elif [ $step -eq 4 ]; then
echo "4 - deploy build to pmodules"
new_dir="/opt/psi/Cafe/cafe-matlab/$vmatlab-$vrhel-gcc-$vgcc-cafe-$vcafe/libexec"
src_dir="/opt/gfa/cafe/mocha/mocha-$vcafe-gcc-$vgcc/lib/$vrhel-x86_64/$vmatlab"
echo " new Dir: $new_dir"
echo " src Dir: $src_dir"
mkdir -p $new_dir
# cp mocha mex file
cp $src_dir/* $new_dir
# cp mca/ca scripts
cp /afs/psi.ch/project/cafe/gitlab/CAFE/mocha/scripts/* $new_dir
ls -la $new_dir
rm -f /opt/psi/Cafe/cafe-matlab/$vmatlab
ln -s $vmatlab-$vrhel-gcc-$vgcc-cafe-$vcafe /opt/psi/Cafe/cafe-matlab/$vmatlab
elif [ $step -eq 5 ]; then
echo "5 - update pmodule info files"
cp modulefile_template $vmatlab
sed -i -e "s/vmatlab/$vmatlab/g" $vmatlab
sed -i -e "s/vrhel/$vrhel/g" $vmatlab
sed -i -e "s/vepics/$vepics/g" $vmatlab
sed -i -e "s/vgcc/$vgcc/g" $vmatlab
sed -i -e "s/vcafe/$vcafe/g" $vmatlab
cp $vmatlab /opt/psi/Cafe/modulefiles/cafe-matlab/$vmatlab
rm $vmatlab
elif [ $step -eq 6 ]; then
echo "6 - test module (module load && matlab -batch ...)"
echo $vmatlab
module help cafe-matlab/$vmatlab
module load cafe-matlab/$vmatlab
module list
if [[ "$vmatlab" =~ ^(2019a|2019b|2020a|2020b|2021a|2021b|2022a|2022b|2023a|2023b|2024a)$ ]]; then
matlab -batch "cd RHEL8-x86_64/$vmatlab;disp(mocha('version'));example"
else
matlab -nodisplay -nosplash -nodesktop -r "cd RHEL8-x86_64/$vmatlab;disp(mocha('version'));example;exit"
fi
fi
done