226 lines
8.3 KiB
HTML
226 lines
8.3 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||
"http://www.w3.org/TR/html4/loose.dtd">
|
||
<html>
|
||
<head>
|
||
<title></title>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||
<meta name="Author" content="jba">
|
||
</head>
|
||
|
||
<body>
|
||
|
||
<center>
|
||
<h2>Building EPICS R3.13 applications with R3.14.0beta2 base</h2>
|
||
</center>
|
||
|
||
<p><br>
|
||
This document describes how to modify a R3.13 vxWorks application so that it
|
||
builds with release R3.14.0beta2. It describes an easy way to modify
|
||
applications subject to the following restrictions:</p>
|
||
<ul>
|
||
<li>The application still uses config rules rather than the configure rules
|
||
which are new to release 3.14.</li>
|
||
<li>The OSI (Operating System Independent) features of R3.14 are not
|
||
available, i.e. iocCore products can only be build for vxWorks.</li>
|
||
<li>Once the application is changed to build with base R3.14, it will not
|
||
build with earlier base releases.</li>
|
||
</ul>
|
||
Ultimately applications should be converted to use the new configure rules so
|
||
that the OSI features are available.
|
||
|
||
<h3><b>Gnumake clean uninstall</b></h3>
|
||
|
||
<p>At the top of the application execute:</p>
|
||
<pre>"<tt>gnumake clean uninstall</tt>"</pre>
|
||
to remove all files and directories created by earlier builds.
|
||
|
||
<h3>Update RELEASE</h3>
|
||
|
||
<p>Change the <tt>EPICS_BASE</tt> 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:</p>
|
||
<pre>SNCSEQ=<full path to sequencer build for 3.14></pre>
|
||
|
||
<h3>Update target arch definitions</h3>
|
||
|
||
<p>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.</p>
|
||
|
||
<p>For example, in config/CONFIG change</p>
|
||
<pre>CROSS_COMPILER_TARGET_ARCHS = mv167</pre>
|
||
to
|
||
<pre>CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040</pre>
|
||
In the iocBoot/*/Makefile files, change
|
||
<pre>ARCH=<old arch name></pre>
|
||
to
|
||
<pre>ARCH=<new arch name></pre>
|
||
and do a "<tt>gnumake"</tt> in the iocBoot directory to update the cdCommands
|
||
files.
|
||
|
||
<h3>State Notation Language changes</h3>
|
||
|
||
<p>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.</p>
|
||
|
||
<p>snc is no longer in base. If snc is used in your application, you must
|
||
download and build the seq module with baseR3.14.0beta2. See the Application
|
||
Developer's Guide to see how to build sequence programs.</p>
|
||
|
||
<p>If you build sequencer programs add the lines</p>
|
||
<pre>SNC = ${SNCSEQ}/bin/$(HOST_ARCH)/snc$(EXE)
|
||
LIBOBJS += $(SNCSEQ_BIN)/seqLibrary.o
|
||
LIBOBJS += $(SNCSEQ_BIN)/pvLibrary.o</pre>
|
||
|
||
<p>remove</p>
|
||
<pre>INSTALLS = seq</pre>
|
||
|
||
<p><br>
|
||
in application src/Makefile.Vx files to link seq library into your
|
||
application library,. <br>
|
||
</p>
|
||
Also remove
|
||
<pre>ld < seq</pre>
|
||
from the st.cmd files in the iocBoot subdirectories.
|
||
|
||
<h3>iocCore changes</h3>
|
||
|
||
<p>iocCore has been renamed to iocCoreLibrary.o. <br>
|
||
Change</p>
|
||
<pre>INSTALLS=iocCore</pre>
|
||
to
|
||
<pre>LIBOBJS += $(EPICS_BASE_BIN)/iocCoreLibrary.o</pre>
|
||
in your application src/Makefile.Vx files . <br>
|
||
Also remove
|
||
<pre>ld < iocCore</pre>
|
||
from the st.cmd files in the iocBoot subdirectories.
|
||
|
||
<h3>Library db changes</h3>
|
||
|
||
<p>The Db library name was changed to dbStaticHost for host builds and
|
||
dbStaticIoc for ioc builds. <br>
|
||
Change</p>
|
||
<pre>PROD_LIBS+=Db</pre>
|
||
to
|
||
<pre>PROD_LIBS+=dbStaticHost</pre>
|
||
and
|
||
<pre>Db_DIR=$(EPICS_BASE_LIB)</pre>
|
||
to
|
||
<pre>dbStaticHost_DIR=$(EPICS_BASE_LIB)</pre>
|
||
in your application src/Makefile.Host files.
|
||
|
||
<h3>VxWorks C++ munched libraries and object files</h3>
|
||
|
||
<p>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 "<tt>.munch</tt>" to the ld lines
|
||
where object files were previously loaded. For example change</p>
|
||
<pre>ld < exampleLib</pre>
|
||
to
|
||
<pre>ld < exampleLib.munch</pre>
|
||
|
||
<h3>recGbl calls</h3>
|
||
|
||
<p>You may need to add the line "<tt>#include "recGbl.h</tt>" to any source
|
||
files that have recGbl* calls so that the file will compile without
|
||
errors.</p>
|
||
|
||
<h3>Record support changes</h3>
|
||
|
||
<p>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 <tt>LIBOBJS</tt> definitions. For example <br>
|
||
add</p>
|
||
<pre>PID=<full path to modules directory>/pid</pre>
|
||
to config/RELEASE. <br>
|
||
Remove
|
||
<pre>LIBOBJS += $(EPICS_BASE_BIN)/pidRecord.o</pre>
|
||
from baseLIBOBJS, <br>
|
||
and add
|
||
<pre>LIBOBJS += $(PID_BIN)/pidRecord.o</pre>
|
||
to your application src/Makefile.
|
||
|
||
<p>You should consider changing any existing old steppermotor records to the
|
||
new EPICS <a
|
||
href="http://www.aps.anl.gov/upd/people/sluiter/epics/modules/mechanism/motor/index.html">motor
|
||
record</a> module supported by Beamline Controls and Data Acquisition at
|
||
APS.</p>
|
||
|
||
<h3>RecDynLink.o and devPtSoft changes</h3>
|
||
|
||
<p>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.</p>
|
||
|
||
<h3>Hardware support changes</h3>
|
||
|
||
<p>All hardware support (dev, drv and dbd files) has been unbundled from base
|
||
R3.14. This support includes the files <tt>symb, symb.dbd, drvHp1404a.o,
|
||
drvEpvxiMsg.o, and drvEpvxi.o</tt>. If they are not used in your
|
||
application, comment out references to these files in base.dbd and
|
||
baseLIBOBJS.</p>
|
||
|
||
<p>Hardware support files now exist as separate modules available for
|
||
download from the <a href="http://www.aps.anl.gov/epics/">EPICS www home page
|
||
at ANL</a>. 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 <tt>LIBOBJS</tt> location definition <tt>$(EPICS_BASE_BIN)</tt> to the
|
||
module definition bin directory in your application src directory files.</p>
|
||
|
||
<p>For example, remove</p>
|
||
<pre>LIBOBJS+=$(EPICS_BASE_BIN)/symb</pre>
|
||
from baseLIBOBJS and add
|
||
<pre>LIBOBJS+=$(SYMB_BIN)/symb</pre>
|
||
to your application src/Makefile, <br>
|
||
and add the line
|
||
<pre>SYMB=<full path definition for the built module SYMB></pre>
|
||
into your application config/RELEASE file .
|
||
|
||
<p>After a gnumake in the symb module followed by a gnumake in the
|
||
application config directory, the definitions <tt>SYMB_BIN</tt> and
|
||
<tt>SYMB_LIB</tt> will be created, the directory $(SYMB)/include will be
|
||
added to the include directories on the compiler command lines (in the
|
||
<tt>INSTALL_INCLUDES</tt> definition) and the directory $(SYMB)/dbd will be
|
||
added to the dbd search directories on the dbExpand command lines (in the
|
||
<tt>INSTALL_DBDFLAGS</tt> definition).</p>
|
||
|
||
<h3>dbLoadtemplate tool changes</h3>
|
||
|
||
<p>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.</p>
|
||
|
||
<p>Change the following definitions in your application files.</p>
|
||
|
||
<p>In config/RULES.Db replace the line</p>
|
||
<pre>DBLOADTEMPLATE=$(EPICS_BASE_HOST_BIN)/dbLoadTemplate$(EXE)</pre>
|
||
with
|
||
<pre>MSI = msi</pre>
|
||
and change the DBLOADTEMPLATE rule in RULES.Db from
|
||
<pre>%.t.db.raw: %.substitutions
|
||
@echo "Inflating database from $<"
|
||
(RM) $@
|
||
@$(DBLOADTEMPLATE) $< > $@</pre>
|
||
|
||
<p>to</p>
|
||
<pre>%.t.db.raw: %.substitutions %.template
|
||
@echo "Inflating database from $<"
|
||
@$(RM) $@
|
||
@$(MSI) -S $^ > $@</pre>
|
||
|
||
<h3>depends changes</h3>
|
||
|
||
<p>Remove any SRCS.c and SRCS.cc definitions in your application
|
||
src/Makefile..*files. The depends rule no longer uses these definitions.</p>
|
||
</body>
|
||
</html>
|