Files
pcas/documentation/BuildingR3.13AppsWithR3.14.html
2004-05-17 14:25:00 +00:00

240 lines
8.7 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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 base</h2>
</center>
<p><br>
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:</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>Prerequisite for building R3.13 applications</h3>
<p>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.
</p>
<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 &lt;top&gt;/config/RELEASE. For
example if you are using the sequencer add the line:</p>
<pre>SNCSEQ=&lt;full path to sequencer build for 3.14&gt;</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=&lt;old arch name&gt;</pre>
to
<pre>ARCH=&lt;new arch name&gt;</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. 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 &lt; seq</pre>
from the st.cmd files in the iocBoot subdirectories.
<h3>iocCore changes</h3>
<ul>
<li>src/Makefile.Vx
<p>iocCore has been renamed to iocCoreLibrary.o. Change</p>
<pre>INSTALLS=iocCore
</pre>
<p>to</p>
<pre>LIBOBJS += $(EPICS_BASE_BIN)/iocCoreLibrary.o
</pre>
</li>
<li>iocBoot/iocxxx/st.cmd
<p>Remove</p>
<pre>ld &lt; iocCore
</pre>
<p>Immediately after the dbLoadDatabase(xxx.dbd) command add</p>
<pre>xxx_registerRecordDeviceDriver(pdbbase)
</pre>
</li>
</ul>
<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 &lt; exampleLib</pre>
to
<pre>ld &lt; 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=&lt;full path to modules directory&gt;/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=&lt;full path definition for the built module SYMB&gt;</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 $&lt;"
(RM) $@
@$(DBLOADTEMPLATE) $&lt; &gt; $@</pre>
<p>to</p>
<pre>%.t.db.raw: %.substitutions %.template
@echo "Inflating database from $&lt;"
@$(RM) $@
@$(MSI) -S $^ &gt; $@</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>