Building EPICS R3.13 applications with R3.14 base

This document describes how to modify a R3.13 vxWorks application so that it builds with release R3.14.  It describes an easy way to modify applications subject to the following restrictions:

Ultimately applications should be converted to use the new configure rules so that the OSI features are available.

Prerequisite for building R3.13 applications

The macro COMPAT_313 must be set to YES in base/configure/CONFIG_SITE before the base build. This will install vxWorks object files and perl scripts needed for building R3.13 ioc applications.

Gnumake clean uninstall

At the top of the application execute:

"gnumake clean uninstall"
to remove all files and directories created by earlier builds.


Change  the EPICS_BASE definition to point to the R3.14 base release. All hardware support and some soft support is now unbundled. For example the sequencer is unbundled. You must obtain and build all required unbundled products before you can build the application. The location of each unbundled product must be specified in <top>/config/RELEASE. For example if you are using the sequencer add the line:

SNCSEQ=<full path to sequencer build for 3.14>

Update target arch definitions

Change any target arch specification in config/CONFIG to new R3.14 target arch specification. Look in the R3.14 base/bin directory to see the target arch names.

For example, in config/CONFIG change

In the iocBoot/*/Makefile files, change
ARCH=<old arch name>
ARCH=<new arch name>
and do a "gnumake" in the iocBoot directory to update the cdCommands files.

State Notation Language changes

NOTE: You must have a version of the sequencer that is build for R3.14. This version uses configure rules rather than config rules. It still, however, has a config directory. Makesure that config/RELEASE has the same location for base as configure/RELEASE.

snc is no longer in base. If snc is used in your application, you must download and build the seq module with baseR3.14. See the Application Developer's Guide to see how to build sequence programs.

If you build sequencer programs add the lines

SNC = ${SNCSEQ}/bin/$(HOST_ARCH)/snc$(EXE)
LIBOBJS += $(SNCSEQ_BIN)/seqLibrary.o
LIBOBJS += $(SNCSEQ_BIN)/pvLibrary.o



in application src/Makefile.Vx files to link seq library into your application library,.

Also remove
ld < seq
from the st.cmd files in the iocBoot subdirectories.

iocCore changes

Library db changes

The Db library name was changed to dbStaticHost for host builds and dbStaticIoc for ioc builds.

in your application src/Makefile.Host files.

VxWorks C++ munched libraries and object files

Since R3.14 contains C++ code, the build rules were changed to create a corresponding munched file for every vx object file built. The objects files can be combined to form libraries but the munched files must be loaded into vxWorks. In all st.cmd files add the suffix ".munch" to the ld lines where object files were previously loaded. For example change

ld < exampleLib
ld < exampleLib.munch

recGbl calls

You may need to add the line  "#include "recGbl.h" to any source files that have recGbl* calls so that the file will compile without errors.

Record support changes

The steppermotor, scan, and pid records are no longer in base. If your application does not use these record types, comment out or remove references to them in base.dbd and baseLIBOBJS. If these record types are used by your application you must download and build the modules with R3.14 base, add appropriate module definitions to your application's config/RELEASE fileand change the LIBOBJS definitions. For example

PID=<full path to modules directory>/pid
to config/RELEASE.
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 changes

recDynLink.o and devPtSoft.o are no longer in base. Remove references to them in base.dbd and baseLIBOBJS if they are not used in application.

Hardware support changes

All hardware support (dev, drv and dbd files) has been unbundled from base R3.14. This support includes the files symb, symb.dbd, drvHp1404a.o, drvEpvxiMsg.o, and drvEpvxi.o.  If they are not used in your application, comment out references to these files in base.dbd and baseLIBOBJS.

Hardware support files now exist as separate modules available for download from the EPICS www home page at ANL. You must now download all the hardware support modules needed for your application, build the modules with R3.14 base,  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.

For example, remove

from baseLIBOBJS and add
to your application src/Makefile,
and add the line
SYMB=<full path definition for the built module SYMB>
into your application config/RELEASE file .

After a gnumake in the symb module followed by a gnumake in the application config directory, the definitions SYMB_BIN and SYMB_LIB will be created,  the directory $(SYMB)/include will be added to the include directories on the compiler command lines  (in the INSTALL_INCLUDES definition)  and the directory $(SYMB)/dbd will be added to the dbd search directories on the dbExpand command lines (in the INSTALL_DBDFLAGS definition).

dbLoadtemplate tool changes

The host tool dbLoadTemplate has been replaced by a new extension, msi. dbLoadTemplate is still supported on iocs. Build the new msi extension with a R3.13 or R3.14 base and verify that the msi executable is in your path.

Change the following definitions in your application files.

In config/RULES.Db replace the line

MSI = msi
and change the DBLOADTEMPLATE rule in RULES.Db from
%.t.db.raw: %.substitutions 
        @echo "Inflating database from $<" 
        (RM) $@ 
        @$(DBLOADTEMPLATE) $< > $@


%.t.db.raw: %.substitutions %.template 
        @echo "Inflating database from $<" 
        @$(RM) $@ 
        @$(MSI) -S $^ > $@

depends changes

Remove any SRCS.c and definitions in your application src/Makefile..*files. The depends rule no longer uses these definitions.