Building EPICS R3.13 applications with R3.14.0alpha2 base
This document describes how to convert a R3.13 vxWorks application so that
it builds with release R3.14.0alpha2. It describes an easy way to
convert applications subject to the following restrictions:
-
The application still uses config rules rather than the configure rules
which are new to release 3.14.
-
The OSI (Operating System Independent) features of R3.14 are not available,
i.e. iocCore products can only be build for vxWorks.
-
Once the application is changed to build with base R3.14, it will not build
with earlier base releases.
Ultimately applications should be converted to use the new configure rules
so that the OSI features are available.
Gnumake clean uninstall
At the top of the application execute:
"gnumake clean uninstall"
to remove all files and directories created by earlier builds.
Update RELEASE
Change the EPICS_BASE definition to point to the R3.14 base release.
In addition 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 described in <top>/config/RELEASE.
Update target arch definitions
Change any target arch specification in config/CONFIG to new base R3.14
target arch specification. Look in the R3.14 base/bin to see the target
arch names.
For example, in config/CONFIG change
CROSS_COMPILER_TARGET_ARCHS = mv167
to
CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
In the iocBoot/*/Makefile files, change
ARCH=<old arch name>
to
ARCH=<new arch name>
and do a "gnumake" in the iocBoot directory to update the cdCommands
files.
SNC changes
snc is no longer in base. If snc is used in your application, you must
download and build the seq module with baseR3.14.0alpha2 or later. See
the Application Developer's Guide to see how to build sequence programs.
iocCore changes
iocCore has been renamed to iocCoreLibrary.o.
Change
INSTALLS=iocCore
to
LIBOBJS = $(EPICS_BASE_BIN)/iocCoreLibrary.o
in your application src/Makefile.Vx files to link iocCore into your application
library.
Also remove
ld < iocCore
from the st.cmd files in the iocBoot subdirectories.
Library db changes
The Db library name was changed to dbStaticHost for host builds and dbStaticIoc
for ioc builds.
Change
PROD_LIBS+=Db
to
PROD_LIBS+=dbStaticHost
and
Db_DIR=$(EPICS_BASE_LIB)
to
dbStaticHost_DIR=$(EPICS_BASE_LIB)
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
to
ld < exampleLibrary.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
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 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.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
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 .
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 replace by a new extension, msi.
dbLoadTemplate is still supported on iocs. Build the msi extension with
base R3.14 and change definitions the following definitions in your application
files.
In config/RULES.Db replace the line
DBLOADTEMPLATE=$(EPICS_BASE_HOST_BIN)/dbLoadTemplate$(EXE)
with
MSI = $(firstword $(wildcard $(EPICS_EXTENSIONS_HOST_BIN)/msi$(HOSTEXE) \
(EPICS_EXTENSIONS)/bin/$(HOST_OS_CLASS)/msi$(HOSTEXE)) msi$(HOSTEXE))
and change line:
@$(DBLOADTEMPLATE) $< > $@
to
@$(MSI) $< > $@
Also add the definition
EPICS_EXTENSIONS=<full path name to epics extensions directory>
to your application config/RELEASE file.