This document describes how to convert a R3.13 vxWorks application so that it
builds with release R3.14.0beta2. It describes procedures such that:
First do a gnumake clean uninstall in the application's root directory to remove all files created by earlier builds.
mkdir <top> cd <top> <full path to 3.14 base>/bin/<host_arch>/makeBaseApp.pl -t example junk /bin/rm -fr junkApp
cd <oldtop> find *App iocBoot -print | cpio -pvmd <fullpath name to new top>
Copy definitions of external modules excluding EPICS_BASE and
TEMPLATES_TOP from old application RELEASE file.
If sequence programs (*.st or *.stt files) exist in your application, add the
SNCSEQ location definition for the R3.14 seq external module
SNCSEQ =<full path to seq module top>
The R3.14 seq module must exist and be built with EPICS base R3.14.0beta2Change "include $(TOP)/config/CONFIG_APP" to "include $(TOP)/configure/CONFIG"
Change " include $(TOP)/config/RULES_DIRS" to "include $(TOP)/configure/RULES_DIRS"
Remove existing Makefile
Rename Makefile.Host to Makefile
Modify Makefile as follows:
Change "TOP=../../.." to "TOP=../.."
Change "include $(TOP)/config/CONFIG_APP" to "include $(TOP)/configure/CONFIG"
Change "include $(TOP)/config/RULES.Db" to "include $(TOP)/configure/RULES"
Place all definitions between the include lines.
Place any rules after the last include line.
This is the hardest step. The definitions in Makefile.Host and Makefile.Vx must be manually converted to the new configure definitions.
First replace Makefile with a template Makefile from base.
rm Makefile cp <base>/templates/makeBaseApp/top/exampleApp/src/Makefile .
This new Make file has comments explaining how to build the various host and ioc products. Lets consider some examples
Makefile.Host contains definitions like:
PROD += caExample caExample_SRCS += caExample.c
In Makefile these are:
PROD_HOST += caExample caExample_SRCS += caExample.c caExample_LIBS += ca caExample_LIBS += Com
Makefile.Host (or perhaps Makefile.Vx) contains:
RECTYPES += xxxRecord.h
In Makefile this is:
DBDINC += xxxRecord
Makefile.Host (or perhaps Makefile.Vx) contains:
DBDEXPAND = exampleInclude.dbd DBDNAME = exampleApp.dbd
In Makefile this is:
DBD += example.dbd
NOTES: Change exampleApp.dbd to example.dbd in all st.cmd files. Also this definition assumes that file exampleInclude.dbd exists.
Makefile.Vx contains statements like:
SRCS.c += ../xxxRecord.c SRCS.c += ../devXxxSoft.c LIBOBJS += xxxRecord.o LIBOBJS += devXxxSoft.o LIBOBJS += sncExample.o include ../baseLIBOBJS LIBNAME = exampleLib INSTALLS += iocCore seq
In Makefile these become:
PROD_IOC_vxWorks = example example_SRCS += xxxRecord.c example_SRCS += devXxxSoft.c example_SRSC += sncExample.stt example_SRCS += example_registerRecordDeviceDriver.cpp example_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary #The following are for sequence programs example_LIBS += seq example_LIBS += pv seq_DIR = $(SNCSEQ_LIB) pv_DIR = $(SNCSEQ_LIB) example_LIBS += recIoc example_LIBS += softDevIoc example_LIBS += testDevIoc example_LIBS += iocsh example_LIBS += miscIoc example_LIBS += rsrvIoc example_LIBS += dbtoolsIoc example_LIBS += asIoc example_LIBS += dbIoc example_LIBS += registryIoc example_LIBS += dbStaticIoc example_LIBS += ca example_LIBS += Com
After these changes are made the following files are no longer needed: baseLIBOBS, Makefile.Host, and Makefile.Vx
Change " include $(TOP)/config/CONFIG_APP" to "include $(TOP)/configure/CONFIG"
Remove the line "DIRS += $(wildcard *ioc*"
Change "include $(TOP)/config/RULES.iocBoot" to "include $(TOP)/configure/RULES.iocBoot"
Change "include $(TOP)/config/CONFIG_APP" to "include $(TOP)/configure/CONFIG"
Change
include ARCH = <old arch specification e.g. mv167>
to
"include ARCH = <new arch specification e.g. vxWorks-68040>"
Change "include $(TOP)/config/RULES.ioc" to "include $(TOP)/configure/RULES.ioc"
If it exists remove the line
buildInstall: cdCommands
Remove the lines
ld < seq ld < iocCore
Change "ld < <libname>Lib" to "ld < <libname>.munch"
Change the statement:
dbLoadDatabase("../../dbd/exampleApp.dbd")
dbLoadDatabase("../../dbd/<name>.dbd") registerRecordDeviceDriver(pdbbase)
If any source file makes calls to recGbl routines make sure it has "#include "recGbl.h". If it doesn't the compiler will issue warning messages and the ioc may issue the message: "undefined symbol: _recGblSetSevr".
The steppermotor, scan, and pid records are no longer in base. If these records are not used in your application, comment out references to them in base.dbd. If these record types are used at your site, they should be downloaded and built with base R3.14 by your EPICS administrator. To update the R3.14 location of these record types in your application you must add appropriate module definitions to your application's config/RELEASE file and change the LIBOBJS definitions.
For example add
PID=<full path to modules directory>/pid
to config/RELEASE.
Remove
LIBOBJS += $(EPICS_BASE_BIN)/pidRecord.o
from baseLIBOBJS, and add
LIBOBJS += $(PID_BIN)/pidRecord.o
to your application src/Makefile.You should consider changing any existing old steppermotor records to the new EPICS motor record module supported by Beamline Controls and Data Acquisition at APS.
recDynLink.o and devPtSoft.o are no longer in EPICS base and now exist as separate EPICS modules.You must now add the appropriate module full path definitions to your application config/RELEASE file, and change LIBOBJS location definition $(EPICS_BASE_BIN) to the module definition bin directory in your application src directory files. See "Hardware support changes" below for instructions.
All hardware support (dev, drv and dbd files) except soft support has been unbundled from base R3.14. This support includes the files symb.dbd, drvHp1404a.o, drvEpvxiMsg.o, and drvEpvxi.o. If these are not used by your application, comment out references to them in base.dbd.
Hardware support now exists as separate EPICS modules. The hardware support for your site should be downloaded and built with base R3.14 by your EPICS administrator. You must now add the appropriate module full path definitions to your application config/RELEASE file, and change LIBOBJS location from $(EPICS_BASE_BIN) to the module bin directory in your application src directory files.
For example, remove
LIBOBJS+=$(EPICS_BASE_BIN)/symb
from baseLIBOBJS and add
LIBOBJS+=$(SYMB_BIN)/symb
to your application src/Makefile,
and add the line
SYMB=<full path definition for the built module SYMB>
into your application config/RELEASE file .
The host tool dbLoadTemplate has been replace by a new EPICS extension, msi, which should be downloaded and built with base R3.14 by your EPICS administrator. dbLoadTemplate is still supported on iocs. If, in your application, db files are created from template and substitution files you should add the definition
EPICS_EXTENSIONS=<full path name to epics extensions directory>
to your application config/RELEASE file.