Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Makefile.in 6.78 KiB
# RCG Makefile

SHELL = /bin/sh

top_srcdir := `readlink -m @top_srcdir@`
srcdir := `readlink -m @srcdir@`
linux_version := '@linux_version@'
VPATH=$(srcdir)

prefix      = @prefix@
exec_prefix = @exec_prefix@
bindir      = @bindir@
infodir     = @infodir@
mandir      = @mandir@
infodir     = @infodir@
libdir      = @libdir@
datarootdir      = @datarootdir@

CXX=@CXX@
CC=@CC@
LIBS=@LIBS@
DEBUGFLAGS=-g
PERFORMANCEFLAGS=-DNDEBUG -g -O5
RELEASEFLAGS=-DNDEBUG -DNPROBE -g -O5
#DEBUGFLAGS=-DNDEBUG -O5 -unroll=16
DEVFLAGS=@DEVFLAGS@

%: clean-%
	@mkdir -p src/epics/util src/fe target build src/epics/fmseq config src/include
	@ln -fs $(srcdir)/src/epics/util/lib src/epics/util > /dev/null 2>&1 || /bin/true
	@ln -fs $(srcdir)/src/include/drv src/include > /dev/null 2>&1 || /bin/true
	@ln -fs $(srcdir)/src/epics/simLink src/epics > /dev/null 2>&1 || /bin/true
	@ln -fs $(srcdir)/src/epics/util/GNUmakefile src/epics/util > /dev/null 2>&1 || /bin/true
	@echo Parsing the model $@...
	@make -C src/epics/util -sf Makefile $@ > $@.log 2>$@_error.log || (tail $@.log; cat $@_error.log && /bin/false)
	@echo Done
	@/bin/rm -rf build/$@epics-medm
	@/bin/rm -rf build/$@epics-config
	@/bin/mv -f build/$@epics/medm build/$@epics-medm
	@/bin/mv -f build/$@epics/config build/$@epics-config
	@/bin/rm -rf target/$@epics build/$@epics;
	@echo Building EPICS sequencers...
	@env RCG_SRC_DIR=$(srcdir) PERL5LIB=$(srcdir)/src/epics/util make -f config/Makefile.$@epics RCG_SRC_DIR=$(srcdir) >> $@.log 2>>$@_error.log || (tail $@.log; cat $@_error.log && /bin/false)
	@echo Done
	@($(srcdir)/src/epics/util/nameLengthChk.pl $@) >> $@.log 2>>$@_error.log || (tail $@.log; cat $@_error.log && /bin/false)
	@/bin/mkdir -p build/$@epics
	@/bin/mv -f build/$@epics-medm build/$@epics/medm
	@/bin/mv -f build/$@epics-config build/$@epics/config
	@echo Building front-end Linux kernel module $@...
	@make -sC src/fe/$@ clean
# copy IOP symbol file to build area if found
	@cp src/fe/ModuleIOP.symvers src/fe/$@ > /dev/null 2>&1 || /bin/true
	@cat /opt/DIS/lib/modules/$(linux_version)/*.symvers > src/fe/$@/Module.symvers || /bin/true
# build it
	@make -C src/fe/$@ >> $@.log 2>>$@_error.log || (tail $@.log; cat $@_error.log && /bin/false)
# save IOP symbol to file
	@grep IOP src/fe/$@/Module.symvers > /tmp/tmp.symvers
	@awk -vOFS='\t' '{$$3 = "/"; print}' /tmp/tmp.symvers > src/fe/ModuleIOP.symvers
	@rm /tmp/tmp.symvers
	@make -C src/fe/$@ >> $@.log 2>>$@_error.log || (tail $@.log; cat $@_error.log && /bin/false)
	@$(srcdir)/src/epics/util/checkUndefined.pl $@_error.log >> $@.log 2>>$@_error.log || (tail $@.log; cat $@_error.log && /bin/false)
	@echo Done
#	@echo Building front-end user space object $@...
#	@/bin/rm -rf src/fe/$@_usp/*.o ;
#	@make -C src/fe/$@_usp >> $@.log 2>>$@_error.log || (tail $@.log; cat $@_error.log && /bin/false)
#	@echo Done
	@/bin/mkdir -p target/$@epics/src
	@echo $(srcdir) > target/$@epics/src/rcg_location.txt
	@echo Build date `date` > target/$@epics/src/build.txt
	@echo Compiled on `hostname` >> target/$@epics/src/build.txt
	@echo RCG_LIB_PATH=${RCG_LIB_PATH} >> target/$@epics/src/build.txt
	@tar Ccf $(srcdir) - --exclude rcg.tar.gz --exclude build --exclude target . | gzip > target/$@epics/src/rcg.tar.gz
	@cp src/epics/util/sources.$@ target/$@epics/src/src_locations.txt
	@cp $@.log target/$@epics/src
	@cp $@_error.log target/$@epics/src
	@sort src/epics/util/sources.$@ | uniq |  tar czTf - target/$@epics/src/sources.tar.gz > /dev/null 2>&1
	@echo RCG source code directory:
	@echo $(srcdir)
	@echo The following files were used for this build:
	@sort src/epics/util/sources.$@ | uniq
	@echo
	@echo  Successfully compiled $@
	@echo '***********************************************'
	@echo  Compile Warnings, found in $@_warnings.log:
	@echo '***********************************************'
	@cat   $@_warnings.log 
	@echo '***********************************************'


all: 
	/bin/true

.PHONY : doc
doc:	
	(cd doc && bash ./doxScript && doxygen doxygen.cfg)

reclean:
	-/bin/rm -rf build config src target

clean-%:
	@system=$(subst clean-,,$@); echo Cleaning $${system}...; \
        /bin/rm -rf target/$${system}epics build/$${system}epics; \
        (make -siC src/fe/$${system}/Makefile clean 2>/dev/null); echo Done

install-adclist-%:
	@system=$(subst install-adclist-,,$@); $(srcdir)/install-adclist $${system} $(srcdir)

install-%:
	@system=$(subst install-,,$@); $(srcdir)/install $${system} $(srcdir)

uninstall-%:
	@system=$(subst uninstall-,,$@); $(srcdir)/uninstall $${system} $(srcdir)

#MDL_MODELS = x1cdst1 x1isiham x1isiitmx x1iss x1lsc x1omc1 x1psl x1susetmx x1susetmy x1susitmx x1susitmy x1susquad1 x1susquad2 x1susquad3 x1susquad4 x1x12 x1x13 x1x14 x1x15 x1x16 x1x20 x1x21 x1x22 x1x23

#MDL_MODELS = $(wildcard src/epics/simLink/l1*.mdl)
#MDL_MODELS = $(shell cd src/epics/simLink; ls m1*.mdl | sed 's/.mdl//')
#MDL_MODELS=\
#l1ioplsc0 l1lsc l1omc1 l1omc2 l1lsctest\
#l1iopasc0 l1asctest l1ascwfs\
#l1iopoaf0 l1pemlvea\
#l1iopseib1 l1isiitmy l1seiitmy\
#l1iopseib2 l1isibs l1seibs\
#l1iopseib3 l1isiitmx l1seiitmx\
#l1iopseih16 l1seiham1 l1seiham6\
#l1iopseih23 l1isiham3 l1hpiham3 \
#l1iopseih45 l1seiham4 l1seiham5\
#l1iopsusbsc123 l1susbs l1susitmy l1susitmx\
#l1iopsush2a l1susquad l1susprm3\
#l1iopsush2b\
#l1iopsush34 l1susmc2 l1sussr2 l1suspr2\
#l1iopsusauxh34 l1susauxh34\
#l1iopsush56 l1sussr3 l1sussrm\
#l1ioppsl0 l1psldbb l1pslfss l1pslpmc l1psliss\
#l1ioppemex l1pemex l1susetmx l1isietmx\
#l1ioppemey l1pemey l1susetmy l1isietmy
#

MDL_MODELS = $(shell if [ -e /etc/rt.sh ]; then /etc/rt.sh; fi)

World: $(MDL_MODELS)
	@echo Successfully compiled $(MDL_MODELS)

startWorld:
	@echo $(patsubst %,start% \;,$(MDL_MODELS))

killWorld:
	@echo $(patsubst %,kill% \;,$(MDL_MODELS))

showWorld:
	@echo $(MDL_MODELS)

# Extract all "ai" Epics record (setpoints) and print SQL commands to insert into the Archiver database
settingsWorld:
	@for i in $(MDL_MODELS); do grep grecord\(ai /opt/rtcds/lho/h1/target/$$i/$${i}epics/db/H1/$${i}1.db; done | sed 's/grecord(ai,"\(.*\)")/\1/g' | awk "{ printf \"insert into channel (name, grp_id) values ('%s', 1);\n\", \$$0 }"

cleanWorld: $(patsubst %,clean-%,$(MDL_MODELS))
	@echo Cleaned $(MDL_MODELS)

installWorld: $(patsubst %,install-%,$(MDL_MODELS)) 
	@echo Installed $(MDL_MODELS)

installAdclistWorld: $(patsubst %,install-adclist-%,$(MDL_MODELS)) 
	@echo Installed $(MDL_MODELS)

# For test builds of IFO models
cdstest:=$(USERAPPS_DIR)/cds/test/scripts
TST_MODELS = $(shell if [ -e $(cdstest)/rt-allmodels.sh ]; then $(cdstest)/rt-allmodels.sh; fi)

WorldTest: $(TST_MODELS)
	@echo Successfully compiled $(TST_MODELS)

showWorldTest:
	@echo $(TST_MODELS)

cleanWorldTest: $(patsubst %,clean-%,$(TST_MODELS))
	@echo Cleaned $(TST_MODELS)

installWorldTest: $(patsubst %,install-%,$(TST_MODELS)) 
	@echo Installed $(TST_MODELS)

# Show all predefined preprocessor definitions
dump_predefines:
	gcc -E -dM -x c /dev/null