
#	EthercCAT kernel driver + libs&headers
#	(this is to replace old style ECmasterECMC EPICS module)
#	- building 1.6.3 for debian12


# goto SKIPIT

# prepare somwhere (in anicic@gfa-ad82:workarea/EtherCAT/1.6.3):
#	cd /home/anicic/workarea/EtherCAT
#	mkdir 1.6.3
#	cd 1.6.3
#	git clone git@gitlab.com:etherlab.org/ethercat.git
#	cd ethercat
#	git checkout 1.6.3 -b gfa-1.6.3
#	cd ..
#	# you can delete ethercat folder (cloned repo) after building



# SKIPIT:


On one target debian12 system:


#####################################################################################################################################################################################
# get it (usualy we have no git* on target)

cd /tmp
# copy sources from somwhere
scp -r anicic@gfa-ad82:workarea/EtherCAT/1.6.3/ethercat .   # need password here


# build

cd ethercat
sudo apt update && sudo apt install -y pkg-config
export LANG=en_US.UTF-8 ; export LANGUAGE=en_US:en ; export LC_ALL=C
autoupdate
echo 'pkgconfigdir = $(libdir)/pkgconfig' >> lib/Makefile.am
./bootstrap
./configure --prefix="/opt/etherlab" --sysconfdir=/etc  \
            --enable-generic=yes --enable-e1000=no --enable-e1000e=no --enable-igb=yes --enable-igc=yes --enable-8139too=no --enable-r8169=no \
            --enable-hrtimer=yes --disable-debug-if --disable-debug-ring --enable-sii-assign=yes --enable-eoe=no
#make -j all modules    ### if building on 8GB (or less) RAMdisk based system, maybe will not work with -j
make all modules
cd ..


#####################################################################################################################################################################################
# build package for target debian12

EPICSHOSTARCH=deb12-x86_64
ETHERCATGITVERSION=1.6.3
ETHERCATVERSIONM=1
ETHERCATVERSIONMM=${ETHERCATVERSIONM}.2
ETHERCATVERSIONMMR=${ETHERCATVERSIONMM}.0
ETHERCATDIR=ethercat
KERNELVERS=`uname -r`

mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab/bin
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab/sbin
cp -a ${ETHERCATDIR}/tool/ethercat            ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab/bin
cp -a ${ETHERCATDIR}/script/ethercatctl       ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab/sbin
chmod a+x                                     ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/opt/etherlab/sbin/ethercatctl

mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/master
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices/igb
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices/igc
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/examples
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/examples/mini
cp -a ${ETHERCATDIR}/master/ec_master.ko      ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/master
cp -a ${ETHERCATDIR}/devices/ec_generic.ko    ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices
cp -a ${ETHERCATDIR}/devices/igb/ec_igb.ko    ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices/igb
cp -a ${ETHERCATDIR}/devices/igc/ec_igc.ko    ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/devices/igc
cp -a ${ETHERCATDIR}/examples/mini/ec_mini.ko ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/lib/modules/${KERNELVERS}/ethercat/examples/mini

mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system
cp -a ${ETHERCATDIR}/script/ethercat.service  ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system/ethercat.service
sed -i 's|#Requires=network.target|Requires=network.target|' ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system/ethercat.service
sed -i 's|#After=network.target|After=network.target|' ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system/ethercat.service
sed -i 's/^\(\(Requires=network\.target\) #.*\)$/\2/' ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system/ethercat.service
sed -i 's/^\(\(After=network\.target\) #.*\)$/\2/' ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/systemd/system/ethercat.service

mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/udev/rules.d
echo 'KERNEL=="EtherCAT[0-9]*", SUBSYSTEM=="EtherCAT", MODE="0666"' > ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/etc/udev/rules.d/99-ethercat.rules

mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/DEBIAN
cat <<EOF >${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/DEBIAN/control
Package: ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv
Version: 1.6.3
Section: custom
Priority: optional
Architecture: amd64
Essential: no
Maintainer: damir.anicic@psi.ch
Description: EtherCAT driver
 This is longer description for
 EtherCAT linux driver
EOF
cat <<EOF >${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/DEBIAN/postinst
#!/bin/bash
echo "Setting up the ethercat driver for kernel ${KERNELVERS}"
/sbin/depmod ${KERNELVERS}
EOF
chmod -R 755 ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv/DEBIAN

sudo chown -R root:root ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv

dpkg-deb --build --root-owner-group ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv


#####################################################################################################################################################################################
# build tar for EPICS

mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/include
mkdir -p ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/lib
cp -a ${ETHERCATDIR}/include/ecrt.h ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/include/ecrt.h
cp -a ${ETHERCATDIR}/include/ectty.h ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/include/ectty.h
cp -a ${ETHERCATDIR}/lib/.libs/libethercat.a ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/lib/libethercat.a
cp -a ${ETHERCATDIR}/lib/.libs/libethercat.so                       ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/lib/libethercat.so
cp -a ${ETHERCATDIR}/lib/.libs/libethercat.so.${ETHERCATVERSIONM}   ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/lib/libethercat.so.${ETHERCATVERSIONM}
cp -a ${ETHERCATDIR}/lib/.libs/libethercat.so.${ETHERCATVERSIONMMR} ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/lib/libethercat.so.${ETHERCATVERSIONMMR}
echo "" > ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/Readme.txt
echo "Created at : $(date)" >> ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/Readme.txt
echo "On         : $(uname -a)" >> ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/Readme.txt
grep 'gitlab.' ${ETHERCATDIR}/.git/config | head -1 | awk '{print "ORIGIN     : " $3}' >> ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/Readme.txt
echo "" >> ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}/Readme.txt
chmod -R a+rw ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics/${EPICSHOSTARCH}
(HERE=`pwd`; cd ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics; tar cvf ${HERE}/${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics.tar ${EPICSHOSTARCH})


#####################################################################################################################################################################################
# copy for installation

# for each sls-lc sf-lc hipa-lc proscan-lc
#    scp   ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv.deb  ${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics.tar    someuser@*-lc:/ioc/NeedfulThings/EtherCAT/install-packages/
# and unpack tar file also
#    @ *-lc:    cd /ioc/NeedfulThings/EtherCAT; mkdir -p 4epics/${ETHERCATGITVERSION; cd 4epics/${ETHERCATGITVERSION; tar xvf ../install-packages/${ETHERCATDIR}-${ETHERCATGITVERSION}-${KERNELVERS}-drv-4epics.tar )

# ALSO:    chmod -R a+rw /ioc/NeedfulThings/EtherCAT/4epics/${ETHERCATGITVERSION

