Janet Anderson is the author of this chapter.
This chapter describes the EPICS build facility including directory structure, environment and system requirements, configuration files, Makefiles, and related build tools.
EPICS software can be divided into multiple <top> areas. Examples of <top> areas are EPICS base itself, EPICS extensions, and simple or complicated IOC applications. Each <top> may be maintained separately. Different <top> areas can be on different releases of external software such as EPICS base releases.
A <top> directory has the following directory structure:
where configure is a directory containing build configuration files and a Makefile, where dir1, dir2, ... are user created subdirectory trees with Makefiles and source files to be built. Because the build rules allow make commands like “make install.vxWorks-68040”, subdirectory names within a <top> directory structure may not contain a period “.” character.
Files generated during the build are installed into subdirectories of an installation directory which defaults to
$(TOP), the <top> directory. For base, extensions, and IOC applications, the default value can be changed in the
configure/CONFIG_SITE file. The installation directory for the EPICS components is controlled by the definition of the
INSTALL_LOCATION variable.
Due to a side-effect of the build rules, the parent of the installation directory ($(INSTALL_LOCATION)/..) should not contain directories with the same names as the subdirectories listed below.
The following subdirectories may exist in the installation directory. They are created by the build and contain the installed build components.
The main ingredients of the build system are:
The principal features of the build system are:
You can build on multiple host systems and for multiple cross target systems using a single EPICS directory structure. The intermediate and binary files generated by the build will be created in separate O.* subdirectories and installed into the appropriate separate host or target install directories. EPICS executables and scripts are installed into the $(INSTALL_LOCATION)/bin/<arch> directories. Libraries are installed into $(INSTALL_LOCATION)/lib/<arch>. The default definition for $(INSTALL_LOCATION) is $(TOP) which is the root directory in the directory structure. Architecture dependant created files (e.g. object files) are stored in O.<arch> source subdirectories, and architecture independent created files are stored in O.Common source subdirectories. This allows objects for multiple cross target architectures to be maintained at the same time.
To build EPICS base for a specific host/target combination you must have the proper host/target c/c++ cross compiler and target header files, CROSS_COMPILER_HOST_ARCHS must empty or include the host architecture in its list value, the CROSS_COMPILER_TARGET_ARCHS variable must include the target to be cross-compiled, and the base/configure/ os directory must have the appropriate configure files.
Only one environment variable, EPICS_HOST_ARCH, is required to build EPICS <top> areas. This variable should be set to be your workstation’s operating system - architecture combination to use the os vendor’s c/c++ compiler for native builds or set to the operating system - architecture - alternate compiler combination to use an alternate compiler for native builds if an alternate compiler is supported on your system. The filenames of the CONFIG.⋆.Common files in base/ configure/os show the currently supported EPICS_HOST_ARCH values. Examples are solaris-sparc, solaris-sparc-gnu, linux-x86, win32-x86, and cygwin-x86.
Before you can build EPICS components your host system must have the following software installed:
If you will be building EPICS components for vxWorks targets you will also need:
If you will be building EPICS components for RTEMS targets you will also need:
You must have the perl executable in your path and you may need C and C++ compilers in your search path. Check definitions of CC and CCC in base/configure/os/CONFIG.<host>.<host> or the definitions for GCC and G++ if ANSI=GCC and CPLUSPLUS=GCC are specified in CONFIG_SITE. For building base you also must have echo in your search path. You can override the default settings by defining PERL, CC and CCC, GCC and G++, GNU_DIR ... in the appropriate file (usually configure/os/CONFIG_SITE.$EPICS_HOST_ARCH.Common)
For Unix host builds you also need touch, cpp, cp, rm, mv, and mkdir in your search path and /bin/chmod must exist. On some Unix systems you may also need ar and ranlib in your path, and the c compiler may require ld in your path.
On WIN32 systems, building shared libraries is the default setting and you will need to add fullpathname to $(INSTALL_LOCATION)/bin/$(EPICS_HOST_ARCH) to your path so the shared libraries, dlls, can be found during the build.. Building shared libraries is determined by the value of the macro SHARED_LIBRARIES in CONFIG_SITE or os/CONFIG.Common.<host> (either YES or NO).
Because the build rules allow make commands like “make <dir>.<action>,<arch>”, subdirectory names within a <top> directory structure may not contain a period”.” character.
The startup directory in EPICS base contains a perl script, EpicsHostArch.pl, which can be used to define EPICS_HOST_ARCH. This script can be invoked with a command line parameter defining the alternate compiler (e.g. if invoking EpicsHostArch.pl yields solaris-sparc, then invoking EpicsHostArch.pl gnu will yield solaris-sparc-gnu).
The startup directory also contains scripts to help users set the path and other environment variables.
To configure EPICS base for your site, you may want to modify the default definitions in the following files:
To configure each host system for your site, you may override the default definitions in the configure/os directory by adding a new file with override definitions. The new file should have the same name as the distribution file to be overridden except CONFIG in the name is changed to CONFIG_SITE.
To configure each target system, you may override the default definitions in the configure/os directory by adding a new file with override definitions. The new file should have the same name as the distribution file to be overridden except CONFIG in the name is replaced by CONFIG_SITE.
To configure EPICS base for building with R3.13 extensions and ioc applications, you must modify the default definitions in the base/config/CONFIG_SITE* files to agree with site definitions you made in base/configure and base/configure/os files.You must also modify the following tow macros in the base/configure/CONFIG_SITE file:
The configure files contain definitions for locations in which to install various components. These are all relative to INSTALL_LOCATION. The default value for INSTALL_LOCATION is $(TOP), and $(T_A) is the current build’s target architecture. The default value for INSTALL_LOCATION can be overridden in the configure/CONFIG_SITE file.
The base/configure directory contains files with the default build definitions and site specific build definitions. The
extensions/configure directory contains extension specific build definitions (e.g. location of X11 and Motif libraries)
and “include <filename>” lines for the base/configure files. Likewise, the <application>/configure
directory contains application specific build definitions and includes for the application source files. Build definitions such as
CROSS_COMPILER_TARGET_ARCHS can be overridden in an extension or application by placing an override definition in
the <top>/configure/CONFIG_SITE file.
Every <top>/configure directory contains a RELEASE file. RELEASE contains a user specified list of other <top> directory structures containing files needed by the current <top>, and may also include other files to take those definitions from elsewhere. The macros defined in the RELEASE file (or its includes) may reference other defined macros, but cannot rely on environment variables to provide definitions.
When make is executed, macro definitions for include, bin, and library directories are automatically generated for each external <top> definition given in the RELEASE file. Also generated are include statements for any existing RULES_BUILD files, cfg/RULES* files, and cfg/CONFIG* files from each external <top> listed in the RELEASE file.
For example, if configure/RELEASE contains the definition
then the generated macros will be:
RELEASE_DBDFLAGS will appear on the command lines for the dbToRecordTypeH, mkmf.pl, and dbExpand tools, and RELEASE_INCLUDES will appear on compiler command lines. CAMAC_LIB and CAMAC_BIN can be used in a Makefile to define the location of needed scripts, executables, object files, libraries or other files.
Definitions in configure/RELEASE can be overridden for a specific host and target architectures by providing the appropriate file or files containing overriding definitions.
For <top> directory structures created by makeBaseApp.pl, an EPICS base perl script, convertRelease.pl can perform consistency checks for the external <top> definitions in the RELEASE file and its includes as part of the <top> level build. Consistancy checks are controlled by value of CHECK_RELEASE which is defined in <top>/configure/ CONFIG_SITE. CHECK_RELEASE can be set to YES, NO or WARN, and if YES (the default value), consistency checks will be performed. If CHECK_RELEASE is set to WARN the build will continue even if conflicts are found.
You should always do a gnumake clean uninstall in the <top> directory BEFORE adding, changing, or removing any definitions in the configure/RELEASE* files and then a gnumake at the top level AFTER making the changes.
The file <top>/configure/RELEASE contains definitions for components obtained from outside <top>. If you want to link to a new release of anything defined in the file do the following:
change the relevant line(s) to point to the new release
All definitions in <top>/configure/RELEASE must result in complete path definitions, i.e. relative path names are not permitted. If your site could have multiple releases of base and other support <top> components installed at once, these path definitions should contain a release number as one of the components. However as the RELEASE file is read by gnumake, it is permissible to use macro substitutions to define these pathnames, for example:
Definitions in a Makefile will apply to the host system (the platform on which make is executed) and each system defined by CROSS_COMPILER_TARGET_ARCHS.
It is possible to limit the architectures for which a particular definition is used. Most Makefile definition names can be specified with an appended underscore “_” followed by an osclass name. If an _<osclass> is not specified, then the definition applies to the host and all CROSS_COMPILER_TARGET_ARCHS systems. If an _<osclass> is specified, then the definition applies only to systems with the specified os class. A Makefile definition can also have an appended _DEFAULT specification. If _DEFAULT is appended, then the Makefile definition will apply to all systems that do not have an _<osclass> specification for that definition. If a _DEFAULT definition exists but should not apply to a particular system OS Class, the value “-nil-” should be specified in the relevant Makefile definition.
Each system has an OS_CLASS definition in its configure/os/CONFIG.Common.<arch> file. A few examples are:
For example the following Makefile lines specify that product aaa should be created for all systems. Product bbb should be created for systems that do not have OS_CLASS defined as solaris.
It is possible for the user to limit the systems for which a particular definition applies to specific target systems.
For example the following Makefile lines specify that product aaa should be created for all target architecture which allow IOC type products and product bbb should be created only for the vxWorks-68040 and vxWorks-ppc603 targets. Remember T_A is the build’s current target architecture. so PROD_IOC has the bbb value only when the current built target architecture is vwWorks-68040 or vxWorks-ppc603
Build creates two type of makefile targets: Host and Ioc. Host targets are executables, object files, libraries, and scripts which are not part of iocCore. Ioc targets are components of ioc libraries, executables, object files, or iocsh scripts which will be run on an ioc.
Each supported target system has a VALID_BUILDS definition which specifies the type of makefile targets it can support. This definition appears in configure/os/CONFIG.Common.<arch> or configure/os/CONFIG.<arch>.<arch> files.
In a Makefile it is possible to limit the systems for which a particular PROD, TESTPROD, LIBRARY, SCRIPTS, and OBJS is built. For example the following Makefile lines specify that product aaa should be created for systems that support Host type builds. Product bbb should be created for systems that support Ioc type builds. Product ccc should be created for all target systems.
These definitions can be further limited by specifying an appended underscore “_” followed by an osclass or DEFAULT specification.
User specific override definitions are allowed in user created files in the user’s <home>/configure subdirectory. These override definitions will be used for builds in all <top> directory structures. The files must have the following names.
The name of the makefile in each directory must be Makefile.
Makefiles normally include files from <top>/configure. Thus the makefile “inherits” rules and definitions from configure. The files in <top>/configure may in turn include files from another <top>/configure. This technique makes it possible to share make variables and even rules across <top> directories.
A Makefile in this type of directory must define where <top> is relative to this directory, include <top>/configure files, and specify the subdirectories in the desired order of make execution. Running gnumake in a directory with the following Makefile lines will cause gnumake to be executed in <dir1> first and then <dir2>. The build rules do not allow a Makefile to specify both subdirectories and components to be built.
A Makefile in this type of directory must define where <top> is relative to this directory, include <top> configure files, and specify the target component definitions. Optionally it may contain user defined rules. Running gnumake in a directory with this type of Makefile will cause gnumake to create an O.<arch> subdirectory and then execute gnumake to build the defined components in this subdirectory. It contains the following lines:
Create an IOC type library named asIoc from the source file asDbLib.c and install it into the $(INSTALL_LOCATION)/lib/<arch> directory.
For each Host type target architecture, create an executable named catest from the catest1.c and catest2.c source files linking with the existing EPICS base ca and Com libraries, and then install the catest executable into the $(INSTALL_LOCATION)/bin/<arch> directory.
EPICS provides an extensive set of make rules. These rules only work with the GNU version of make, gnumake, which is supplied by the Free Software Foundation. Thus, on most Unix systems, the native make will not work. On some systems, e.g. Linux, GNU make may be the default. This manual always uses gnumake in the examples.
NOTE: It is possible to invoke the following commands for a single target architecture by appending <arch> to the target in the command.
The most frequently used make commands are:
This rebuilds and installs everything that is not up to date.
This is the same as “gnumake install”.
This is the same as “gnumake install”.
This rebuilds and installs everything that is not up to date first for the host arch and then (if different) for the specified target arch.
NOTE: This is the same as “gnumake install.<arch>”
This can be used to save disk space by deleting the O.<arch> directories that gnumake will create, but does not remove any installed files from the bin, db, dbd etc. directories. “gnumake clean.<arch>” can be invoked to clean a single architecture.
This command will remove the current build’s O.<arch> directories but not O.Common directory.
This command will remove ALL the O.<arch> subdirectories (even those created by a gnumake from another EPICS_HOST_ARCH).
This is the same as “gnumake clean install”. If you are unsure about the state of the generated files in an application, just execute “gnumake rebuild”.
This command can be executed from the <top> directory only. It will remove everything installed by gnumake in the include, lib, bin, db, dbd, etc. directories.
This command can be executed from the <top> directory only. It is the same as issuing both the realclean and realuninstall commands.
This command can be executed from the <top> directory only. It removes cvs .#* files in the make directory tree.
The following is a summary of targets that can be specified for gnumake:
where:
Note: You can build using your os vendors’ native compiler and also build using a supported alternate compiler in the same directory structure because the executables and libraries will be created and installed into separate directories (e.g bin/solaris-sparc and bin/solaris-sparc-gnu). You can do this by changing your EPICS_HOST_ARCH, environment variable between builds or by setting EPICS_HOST_ARCH on the gnumake command line.
The build system ensures the host architecture is up to date before building a cross-compiled target, thus Makefiles must be explicit in defining which architectures a component should be built for.
All product, test product, and library source files which appear in one of the source file definitions (e.g. SRCS, PROD_SRCS, LIB_SRCS, <prodname>_SRCS) will have their header file dependencies automatically generated and included as part of the Makefile.
The following components can be defined in a Makefile:
Normally all product, test product, and library source files reside in the same directory as the Makefile. OS specific source files are allowed and should reside in subdirectories os/<os_class> or os/posix or os/default.
The build rules also allow source files to reside in subdirectories of the current Makefile directory (src directory). For each subdirectory <dir> containing source files add the SRC_DIRS definition.
where <dir> is a relative path definition. An example of SRC_DIRS is
The directory search order for the above definition is
where the build directory O.<arch> is . and the src directory is ...
The epics base config files assume posix source code and define POSIX to be YES as the default. Individual Makefiles can override this by setting POSIX to NO. Source code files may have the suffix .c, .cc, .cpp, or .C.
For each breakpoint table dbd file, bpt<table name>.dbd, to be created from an existing bpt<table name>.data file, add the definition
to the Makefile. The following Makefile will create a bptTypeJdegC.dbd file from an existing bptTypeJdegC.data file using the EPICS base utility program makeBpt and install the new dbd file into the $(INSTALL_LOCATION)/dbd directory.
For each new record type, the following definition should be added to the makefile:
A <rectype>Record.h header file will be created from an existing <rectype>Record.dbd file using the EPICS base utility program dbToRecordTypeH. This header will be installed into the $(INSTALL_LOCATION)/include directory and the dbd file will be installed into the $(INSTALL_LOCATION)/dbd directory.
The following Makefile will create xxxRecord.h from an existing xxxRecord.dbd file, install xxxRecord.h into $(INSTALL_LOCATION)/include, and install xxxRecord.dbd into $(INSTALL_LOCATION)/dbd.
If a menu menu<name>.dbd file is present, then add the following definition:
The header file, menu<name>.h will be created from the existing menu<name>.dbd file using the EPICS base utility program dbToMenuH and installed into the $(INSTALL_LOCATION)/include directory and the menu dbd file will be installed into $(INSTALL_LOCATION)/dbd.
The following Makefile will create a menuConvert.h file from an existing menuConvert.dbd file and install menuConvert.h into $(INSTALL_LOCATION)/include and menuConvert.dbd into $(INSTALL_LOCATION)/dbd.
Database definition include files named <name>Include.dbd containing includes for other database definition files can be expanded by the EPICS base utility program dbExpand into a created <name>.dbd file and the <name>.dbd file installed into $(INSTALL_LOCATION)/dbd. The following variables control the process:
where
is the name of the output dbd file to contain the expanded definitions. It is created by expanding an existing or build created <name>Include.dbd file and then copied into $(INSTALL_LOCATION)/dbd.
An example of a file to be expanded is exampleInclude.dbd containing the following lines
USR_DBDFLAGS defines optional flags for dbExpand. Currently only an include path (-I <path>) and macro substitution (-S <substitution>) are supported. The include paths for EPICS base/dbd, and other <top>/dbd directories will automatically be added during the build if the <top> names are specified in the configure/RELEASE file.
A database definition include file named <name>Include.dbd containing includes for other database definition files can be created from a <name>_DBD definition. The lines
will create an expanded dbd file <name>.dbd by first creating a <name>Include.dbd. For each filename in the <name>_DBD definition, the created <name>Include.dbd will contain an include statement for that filename. Then the expanded DBD file is generated from the created <name>Include.dbd file and installed into $(INSTALL_LOCATION)/ dbd.
The following Makefile will create an expanded dbd file named example.dbd from an existing exampleInclude.dbd file and then install example.dbd into the $(INSTALL_LOCATION)/dbd directory.
The following Makefile will create an exampleInclude.dbd file from the example_DBD definition then expand it to create an expanded dbd file, example.dbd, and install example.dbd into the $(INSTALL_LOCATION)/dbd directory.
The created exampleInclude.dbd file will contain the following lines
A source file which registers simple static variables and record/device/driver support routines with iocsh can be created. The list of variables and routines to register is obtained from lines in an existing dbd file.
The following line in a Makefile will result in <name>_registerRecordDeviceDriver.cpp being created, compiled, and linked into <prodname>. It requires that the file <name>.dbd exist or can be created using other make rules.
An example of registering the variable mySubDebug and the routines mySubInit and mySubProcess is <name>.dbd containg the following lines
The following line installs the existing named dbd files into $(INSTALL_LOCATION)/dbd without expansion.
Definitions of the form:
result in files being installed to the $(INSTALL_LOCATION/dbd directory. The file <name> can appear with or without a directory prefix. If the file has a directory prefix e.g. $(APPNAME)/dbd/, it is copied from the specified location. If a directory prefix is not present, make will look in the current source directory for the file.
For most databases just the name of the database has to be specified. Make will figure out how to generate the file:
generates xxx.db depending on which source files exist and installs it into $(INSTALL_LOCATION)/db.
A <name>.db database file will be created from an optional <name>.template file and/or an optional <name>.substitutions file, If the substitution file exists but the template file is not named <name>.template, the template file name can be specified as
A ⋆<nn>.db database file will be created from a *.template and a ⋆<nn>.substitutions file, (where nn is an optional index number).
If a <name> substitutions file contains “file” references to other input files, these referenced files are made dependencies of the created <name>.db by the makeDbDepends.pl perl tool.
The Macro Substitutions and Include tool, msi, will be used to generate the database, and msi must either be in your path or you must redefine MSI as the full path name to the msi binary in a RELEASE file or Makefile. An example MSI definition is
Template files <name>.template, and db files, <name>.db, will be created from an edf file <name>.edf and an <name>.edf file will be created from a <name>.sch file.
Template and substitution files can be installed.
generates and installs these files. If one or more xxx.substitutions files are to be created by script, the script name must be placed in the CREATESUBSTITUTIONS variable (e.g. CREATESUBSTITUTIONS=mySubst.pl). This script will be executed by gnumake with the prefix of the substitution file name to be generated as its argument. If (and only if) there are script generated substitutions files, the prefix of any inflated database’s name may not equal the prefix of the name of any template used within the directory.
Definitions of the form:
result in files being installed to the $(INSTALL_LOCATION/db directory. The file <name> can appear with or without a directory prefix. If the file has a directory prefix e.g. $(APPNAME)/db/, it is copied from the specified location. If a directory prefix is not present, make will look in the current source directory for the file.
Any of the following can be specified:
These definitions will apply to all compiler and linker targets.
header file directories each prefixed by a “-I”.
os specific header file directories each prefixed by a “-I”.
header file directories each prefixed by “-I” for any arch that does not have a USR_INCLUDE_<osclass> definition
C compiler options.
os specific C compiler options.
target architecture specific C compiler options.
C compiler options for any arch that does not have a USR_CFLAGS_<osclass> definition
C++ compiler options.
C++ compiler options for the specified osclass.
C++ compiler options for the specified target architecture.
C++ compiler options for any arch that does not have a USR_CXXFLAGS_<osclass> definition
C preprocessor options.
os specific C preprocessor options.
target architecture specific C preprocessor options.
C preprocessor options for any arch that does not have a USR_CPPFLAGS_<osclass> definition
linker options.
os specific linker options.
linker options for any arch that does not have a USR_LDFLAGS_<osclass> definition
header file directories each prefixed by a “-I”.
os specific header file directories each prefixed by a “-I”.
target architecture specific header file directories each prefixed by a “-I”.
c compiler options.
os specific c compiler options.
target architecture specific c compiler options.
c++ compiler options.
c++ compiler options for the specified osclass.
c++ compiler options for the specified target architecture.
c preprocessor options.
os specific c preprocessor options.
target architecture specific c preprocessor options.
linker options.
os specific linker options.
A library is created and installed into $(INSTALL_LOCATION)/lib/<arch> by specifying its name and the name of the object and/or source files containing code for the library. An object or source file name can appear with or without a directory prefix. If the file name has a directory prefix e.g. $(EPICS_BASE_BIN), it is taken from the specified location. If a directory prefix is not present, make will first look in the source directories for a file with the specified name and next try to create the file using existing configure rules. A library filename prefix may be prepended to the library name when the file is created. For Unix type systems and vxWorks the library prefix is lib and there is no prefix for WIN32. Also a library suffix appropriate for the library type and target arch (e.g. .a, .so, .lib, .dll) will be appended to the filename when the file is created.
vxWorks and RTEMS Note: Only archive libraries are created.
Shared libraries Note: Shared libraries can be built for any or all HOST type architectures. The definition of SHARED_LIBRARIES (YES/NO) in base/configure/CONFIG_SITE determines whether shared or archive libraries will be built. When SHARED_LIBRARIES is YES, both archive and shared libraries are built. This definition can be overridden for a specific arch in an configure/os/CONFIG_SITE.<arch>.Common file.,The default definition for SHARED_LIBRARIES in the EPICS base distribution file is YES for all host systems.
win32 Note: An object library file is created when SHARED_LIBRARIES=NO, <name>.lib which is installed into
$(INSTALL_LOCATION)/lib/<arch>. Two library files are created when SHARED_LIBRARIES=YES,
<name>.lib, an import library for DLLs, which is installed into $(INSTALL_LOCATION)/lib/<arch>, and
<name>.dll which is installed into $(INSTALL_LOCATION)/bin/<arch>. (Warning: The file <name>.lib will
only be created by the build if there are exported symbols from the library.) If SHARED_LIBRARIES=YES, the directory
$(INSTALL_LOCATION)/bin/<arch> must be in the user’s path during builds to allow invoking executables
which were linked with shared libraries. NOTE: the <name>.lib files are different for shared and nonshared
builds.
Any of the following can be specified:
A library will be created for every target arch.
Library <name> will be created for all archs of the specified osclass.
Library <name> will be created for any arch that does not have a LIBRARY_<osclass> definition
Library <name> will be created for IOC type archs.
Library <name> will be created for all IOC type archs of the specified osclass.
Library <name> will be created for any IOC type arch that does not have a LIBRARY_IOC_<osclass> definition
Library <name> will be created for HOST type archs.
Library <name> will be created for all HOST type archs of the specified osclass.
Library <name> will be created for any HOST type arch that does not have a LIBRARY_HOST_<osclass> definition
Source file names, which must have a suffix, are defined as follows:
Source files will be used for all defined libraries and products.
Source files will be used for all defined libraries and products for all archs of the specified osclass.
Source files will be used for all defined libraries and products for any arch that does not have a SRCS_<osclass> definition
LIBSRCS and LIB_SRCS have the same meaning. LIBSRCS is deprecated, but retained for R3.13 compatibility.
Source files will be used for all defined libraries.
Source files will be used for all defined libraries for all archs of the specified osclass.
Source files will be used for all defined libraries for any arch that does not have a LIBSRCS_<osclass> definition
Source files will be used for all defined products and libraries.
Source files will be used for all defined products and libraries for all archs of the specified osclass.
Source files will be used for all defined products and libraries for any arch that does not have a USR_SRCS_<osclass> definition
Source files will be used for all libraries.
Source files will be used for all defined libraries for all archs of the specified osclass.
Source files will be used for all defined libraries for any arch that does not have a LIB_SRCS_<osclass> definition
Source files will be used for the named library.
Source files will be used for named library for all archs of the specified osclass.
Source files will be used for named library for any arch that does not have a <libname>_SRCS_<osclass> definition
Library object file names should only be specified for object files which will not be built in the current directory. For object files built in the current directory, library source file names should be specified. See Specifying Library Source File Names above.
Object files which have filename with a “.o” or “.obj” suffix are defined as follows and can be specified without the suffix but should have the directory prefix
Object files will be used in builds of all products and libraries
Object files will be used in builds of all products and libraries for archs with the specified osclass.
Object files will be used in builds of all products and libraries for archs without a USR_OBJS_<osclass> definition specified.
Object files will be used in builds of all libraries.
Object files will be used in builds of all libraries for archs of the specified osclass.
Object files will be used in builds of all libraries for archs without a LIB_OBJS_<osclass> definition specified.
Object files will be used for all builds of the named library)
Object files will be used in builds of the library for archs with the specified osclass.
Object files will be used in builds of the library for archs without a <libname>_OBJS_<osclass> definition specified.
Combined object files, from R3.13 built modules and applications which have file names that do not include a “.o” or ”.obj” suffix (e.g. xyzLib) are defined as follows:
Combined object files will be used in builds of all libraries and products.
Combined object files will be used in builds of all libraries and products for archs of the specified osclass.
Combined object files will be used in builds of all libraries and products for archs without a USR_OBJLIBS_<osclass> definition specified.
Combined object files will be used in builds of all libraries.
Combined object files will be used in builds of all libraries for archs of the specified osclass.
Combined object files will be used in builds of all libraries for archs without a LIB_OBJLIBS_<osclass> definition specified.
Combined object files will be used for all builds of the named library.
Combined object files will be used in builds of the library for archs with the specified osclass.
Combined object files will be used in builds of the library for archs without a <libname>_OBJLIBS_<osclass> definition specified.
Combined object files will be used for all builds of the named library. (deprecated)
Combined object files will be used in builds of the library for archs with the specified osclass. (deprecated)
Combined object files will be used in builds of the library for archs without a <libname>_LDOBJS_<osclass> definition specified. (deprecated)
Previous versions of epics (3.13 and before) accepted definitions like:
These are gathered together in files such as baseLIBOBJS. To use such definitions include the lines:
Note: vxWorks applications created by makeBaseApp.pl from 3.14 Base releases no longer have a file named baseLIBOBJS. Base record and device support now exists in archive libraries.
For each library name specified which is not a system library nor a library from an EPICS top defined in the configure/ RELEASE file, a <name>_DIR definition must be present in the Makefile to specify the location of the library.
Library names, which must not have a directory and “lib” prefix nor a suffix, are defined as follows:
Libraries to be used when linking all defined libraries.
Libraries to be used or all archs of the specified osclass when linking all defined libraries.
Libraries to be used for any arch that does not have a LIB_LIBS_<osclass> definition when linking all defined libraries.
Libraries to be used when linking all defined products and libraries.
Libraries to be used or all archs of the specified osclasswhen linking all defined products and libraries.
Libraries to be used for any arch that does not have a USR_LIBS_<osclass> definition when linking all defined products and libraries.
Libraries to be used for linking the named library.
Libraries will be used for all archs of the specified osclass for linking named library.
Libraries to be used for any arch that does not have a <libname>_LIBS_<osclass> definition when linking named library.
System libraries to be used for linking the named library.
System libraries will be used for all archs of the specified osclass for linking named library.
System libraries to be used for any arch that does not have a <libname>_LIBS_<osclass> definition when linking named library.
Dependant library names appear in the following order on a library link line:
WIN32 libraries require all external references to be resolved, so if a library contains references to items in other DLL libraries, these DLL library names must be specified (without directory prefix and without “.dll” suffix) as follows:
These DLLs will be used for all libraries.
These DLLs will be used for the named library.
Each <name> must have a corresponding <name>_DIR definition specifying its directory location.
A library version number can be specified when creating a shared library as follows:
On WIN32 this results in /version:$(SHRLIB_VERSION) link option. On Unix type hosts .$(SHRLIB_VERSION) is
appended to the shared library name and a symbolic link is created for the unversioned library name.
$(EPICS_VERSION).$(EPICS_REVISION) is the default value for SHRLIB_VERSION.
If the architectures defined in <top>/configure are solaris-sparc and vxWorks-68040 and LINAC is defined in the <top>/configure/RELEASE file, then the following libraries will be created:
Loadable libraries are regular libraries which are not required to have all symbols resolved during the build. The intent is to create dynamic plugins so no archive library is created. Source file, object files, and dependant libraries are specified in exactly the same way as for regular libraries.
Any of the following can be specified:
The <name> loadable library will be created for every target arch.
Loadable library <name> will be created for all archs of the specified osclass.
item LOADABLE_LIBRARY_DEFAULT += <name>
Loadable library <name> will be created for any arch that does not have a LOADABLE_LIBRARY_<osclass> definition
Loadable library <name> will be created for HOST type archs.
Loadable library <name> will be created for all HOST type archs of the specified osclass.
Loadable library <name> will be created for any HOST type arch that does not have a
LOADABLE_LIBRARY_HOST_<osclass> definition
Combined object libraries are regular combined object files which have been created by linking together multiple object files. OBJLIB specifications in the Makefile create a combined object file and a corresponding munch file for vxWorks target architectures only. Combined object libraries have a Library.o suffix. It is possible to generate and install combined object libraries by using definitions:
These definitions result in the combined object file <name>Library.o and its corresponding <name>Library.munch munch file being built for each vxWorks architecture from source/object files in the OBJLIB_SRCS/OBJLIB_OBJS definitions. The combined object file and the munch file are installed into the $(INSTALL_LOCATION)/bin/<arch> directory.
It is possible to generate and install object files by using definitions:
These will cause the specified file to be generated from an existing source file for the appropriate target arch and installed into $(INSTALL_LOCATION)/bin/<arch>.
The following Makefile will create the abc object file for all target architectures, the def object file for all target archs except vxWorks, and the xyz object file only for the vxWorks target architecture and install them into the appropriate $(INSTALL_LOCATION)/bin/<arch> directory.
A state notation program file can be specified as a source file in any SRC definition. For example:
The state notation compiler snc will generate the file <name>.c from the state notation program file <name>.stt. This C file is compiled and the resulting object file is linked into the <prodname> product.
A state notation source file must have the extension .st or .stt. The .st file is passed through the C preprocessor before it is processed by snc.
If you have state notation language source files (.stt and .st files), the module seq must be built and SNCSEQ defined in the RELEASE file. If the state notation language source files require c preprocessing before conversion to c source (.st files), gcc must be in your path.
Any of the following can be specified:
A script will be installed from the src directory to the $(INSTALL_LOCATION)/bin/<arch> directories.
Script <name> will be installed for all archs of the specified osclass.
Script <name> will be installed for any arch that does not have a SCRIPTS_<osclass> definition
Script <name> will be installed for IOC type archs.
Script <name> will be installed for all IOC type archs of the specified osclass.
Script <name> will be installed for any IOC type arch that does not have a SCRIPTS_IOC_<osclass> definition
Script <name> will be installed for HOST type archs.
Script <name> will be installed for all HOST type archs of the specified osclass.
Script <name> will be installed for any HOST type arch that does not have a SCRIPTS_HOST_<osclass> definition
Definitions of the form:
results in the <name1> script being installed from the src directory to the $(INSTALL_LOCATION)/bin/<arch> directories for all target archs of the specified os class <osclass> and the <name2> script installed into the $(INSTALL_LOCATION)/bin/<arch> directories of all other target archs.
A definition of the form:
results in file <name>.h being installed or created and installed to the $(INSTALL_LOCATION)/include directory.
Definitions of the form:
results in file <name>.h being installed or created and installed into the appropriate $(INSTALL_LOCATION)/include/os/<osclass> directory.
A definition of the form:
results in file <name> being installed from the src directory to the $(INSTALL_LOCATION)/html/<dirname> directory.
A definition of the form:
results in file <name> being installed from the src directory to the $(INSTALL_LOCATION)/doc directory.
Adding definitions of the form
results in the file <name> being installed from the src directory to the $(INSTALL_LOCATION)/templates/<dirname> directory. If a directory structure of template files is to be installed, the template file names may include a directory prefix.
If a <name>.c source file specified in a Makefile definition is not found in the source directory, gnumake will try to build it from <name>.y and <name>_lex.l files in the source directory. Lex converts a <name>.l Lex code file to a lex.yy.c file which the build rules renames to <name>.c. Yacc converts a <name>.y yacc code file to a y.tab.c file, which the build rules renames to <name>.c. Optionally yacc can create a y.tab.h file which the build rules renames to <name>.h.
A product executable is created for each <arch> and installed into $(INSTALL_LOCATION)/bin/<arch> by specifying its name and the name of either the object or source files containing code for the product. An object or source file name can appear with or without a directory prefix. Object files should contain a directory prefix. If the file has a directory prefix e.g. $(EPICS_BASE_BIN), the file is taken from the specified location. If a directory prefix is not present, make will look in the source directories for a file with the specified name or try build it using existing rules. An executable filename suffix appropriate for the target arch (e.g. .exe) may be appended to the filename when the file is created.
PROD specifications in the Makefile for vxWorks target architectures create a combined object file with library references resolved and a corresponding .munch file.
results in the executable <name> being built for each HOST architecture, <arch>, from a <srcname>.c file. Then <name> is installed into the $(INSTALL_LOCATION)/bin/<arch> directory.
Any of the following can be specified:
Product <name> will be created for every target arch.
Product <name> will be created for all archs of the specified osclass.
Product <name> will be created for any arch that does not have a PROD_<osclass> definition
Product <name> will be created for IOC type archs.
Product <name> will be created for all IOC type archs of the specified osclass.
Product <name> will be created for any IOC type arch that does not have a PROD_IOC_<osclass> definition
Product <name> will be created for HOST type archs.
Product <name> will be created for all HOST type archs of the specified osclass.
Product <name> will be created for any HOST type arch that does not have a PROD_HOST_<osclass> definition
Object files which have filenames with a “.o” or “.obj” suffix are defined as follows and can be specified without the suffix but should have the directory prefix
Object files will be used in builds of all products and libraries
Object files will be used in builds of all products and libraries for archs with the specified osclass.
Object files will be used in builds of all products and libraries for archs without a USR_OBJS_<osclass> definition specified.
Object files will be used in builds of all products
Object files will be used in builds of all products for archs with the specified osclass.
Object files will be used in builds of all products for archs without a PROD_OBJS_<osclass> definition specified.
Object files will be used for all builds of the named product
Object files will be used in builds of the named product for archs with the specified osclass.
Object files will be used in builds of the named product for archs without a <prodname>_OBJS_<osclass> definition specified.
Combined object files, from R3.13 built modules and applications which have file names that do not include a “.o” or ”.obj” suffix (e.g. xyzLib) are defined as follows:
Combined object files will be used in builds of all libraries and products.
Combined object files will be used in builds of all libraries and products for archs of the specified osclass.
Combined object files will be used in builds of all libraries and products for archs without a USR_OBJLIBS_<osclass> definition specified.
Combined object files will be used in builds of all products.
Combined object files will be used in builds of all products for archs of the specified osclass.
Combined object files will be used in builds of all products for archs without a PROD_OBJLIBS_<osclass> definition specified.
Combined object files will be used for all builds of the named product.
Combined object files will be used in builds of the named product for archs with the specified osclass.
Combined object files will be used in builds of the named product for archs without a <prodname>_OBJLIBS_<osclass> definition specified.
Object files will be used for all builds of the named product. (deprecated)
Object files will be used in builds of the name product for archs with the specified osclass. (deprecated)
Object files will be used in builds of the product for archs without a <prodname>_LDOBJS_<osclass> definition specified. (deprecated)
Source file names, which must have a suffix, are defined as follows:
Source files will be used for all defined libraries and products.
Source files will be used for all defined libraries and products for all archs of the specified osclass.
Source files will be used for all defined libraries and products for any arch that does not have a SRCS_<osclass> definition
Source files will be used for all products and libraries.
Source files will be used for all defined products and libraries for all archs of the specified osclass.
Source files will be used for all defined products and libraries for any arch that does not have a USR_SRCS_<osclass> definition
Source files will be used for all products.
Source files will be used for all defined products for all archs of the specified osclass.
Source files will be used for all defined products for any arch that does not have a PROD_SRCS_<osclass> definition
Source file will be used for the named product.
Source files will be used for named product for all archs of the specified osclass.
Source files will be used for named product for any arch that does not have a <prodname>_SRCS_<osclass> definition
For each library name specified which is not a system library nor a library from EPICS_BASE, a <name>_DIR definition must be present in the Makefile to specify the location of the library.
Library names, which must not have a directory and “lib” prefix nor a suffix, are defined as follows:
Libraries to be used when linking all defined products.
Libraries to be used or all archs of the specified osclass when linking all defined products.
Libraries to be used for any arch that does not have a PROD_LIBS_<osclass> definition when linking all defined products.
Libraries to be used when linking all defined products.
Libraries to be used or all archs of the specified osclasswhen linking all defined products.
Libraries to be used for any arch that does not have a USR_LIBS_<osclass> definition when linking all defined products.
Libraries to be used for linking the named product.
Libraries will be used for all archs of the specified osclass for linking named product.
Libraries to be used for any arch that does not have a <prodname>_LIBS_<osclass> definition when linking named product.
System libraries to be used when linking all defined products.
System libraries to be used for all archs of the specified osclass when linking all defined products.
System libraries to be used for any arch that does not have a PROD_LIBS_<osclass> definition when linking all defined products.
System libraries to be used for linking the named product.
System libraries will be used for all archs of the specified osclass for linking named product.
System libraries to be used for any arch that does not have a <prodname>_LIBS_<osclass> definition when linking named product.
Dependant library names appear in the following order on a product link line:
On WIN32 only a product version number can be specified as follows:
This results in “/version:$(PROD_VERSION)” link option.
Product executables can be linked with either archive versions or shared versions of EPICS libraries. Shared versions of system libraries will always be used in product linking. The definition of STATIC_BUILD (YES/NO) in base/configure/ CONFIG_SITE determines which EPICS libraries to use. When STATIC_BUILD is NO, shared libraries will be used. (SHARED_LIBRARIES must be set to YES.) The default definition for STATIC_BUILD in the EPICS base CONFIG_SITE distribution file is NO. A STATIC_BUILD definition in a Makefile will override the definition in CONFIG_SITE.Static builds may not be possible on all systems. For static builds, all nonsystem libraries must have an archive version, and this may not be true form all libraries.
Test products are product executables that are created but not installed into $(INSTALL_LOCATION)/bin/<arch> directories. Test product libraries, source, and object files are specified in exactly the same way as regular products.
Any of the following can be specified:
Test product <name> will be created for every target arch.
Test product <name> will be created for all archs of the specified osclass.
Test product <name> will be created for any arch that does not have a
TESTPROD_<osclass> definition
Test product <name> will be created for IOC type archs.
Test product <name> will be created for all IOC type archs of the specified osclass.
Test product <name> will be created for any IOC type arch that does not have a
TESTPROD_IOC_<osclass> definition
Test product <name> will be created for HOST type archs.
Test product <name> will be created for all HOST type archs of the specified osclass.
Test product <name> will be created for any HOST type arch that does not have a
TESTPROD_HOST_<osclass> definition
Test scripts are perl scripts whose names end in .t that get executed to satisfy the runtests make target. They are run by the perl Test::Harness library, and should send output to stdout following the Test Anything Protocol. Any of the following can be specified, although only TESTSCRIPTS_HOST is currently useful:
Test script <name> will be created for every target arch.
Test script <name> will be created for all archs of the specified osclass.
Test script <name> will be created for any arch that does not have a
TESTSCRIPTS_<osclass> definition
Test script <name> will be created for IOC type archs.
Test script <name> will be created for all IOC type archs of the specified osclass.
Test script <name> will be created for any IOC type arch that does not have a
TESTSCRIPTS_IOC_<osclass> definition
Test script <name> will be created for HOST type archs.
Test script <name> will be created for all HOST type archs of the specified osclass.
Test script <name> will be created for any HOST type arch that does not have a
TESTSCRIPTS_HOST_<osclass> definition.
If a name in one of the above variables matches a regular executable program name (normally generated as a test product) with “.t” appended, a suitable perl script will be generated that will execute that program directly; this makes it simple to run programs that use the epicsUnitTest routines in libCom. A test script written in Perl with a name ending .plt will be copied into the O.<arch> directory with the ending changed to .t; such scripts will usually use the perl Test::Simple or Test::More libraries.
A definition of the form:
results in the file <name> being built in the O.<arch> directory from existing rules and files in the source directory. These target files are not installed.
Definitions of the form:
will result in the named files being installed to the appropriate $(INSTALL_LOCATION)/bin/<arch> directory. The file <name> can appear with or without a directory prefix. If the file has a directory prefix e.g. $(EPICS_BASE_BIN), it is copied from the specified location. If a directory prefix is not present, make will look in the source directory for the file.
Definitions of the form:
result in files being installed to the appropriate $(INSTALL_LOCATION)/lib/<arch> directory. The file <name> can appear with or without a directory prefix. If the file has a directory prefix e.g. $(EPICS_BASE_LIB), it is copied from the specified location. If a directory prefix is not present, make will look in the source directory for the file.
Definitions of the form:
RCS += <name> Resource definition script files for all products and libraries.
RCS_<osclass> += <name>
PROD_RCS += <name> Resource definition script files for all products.
PROD_RCS_<osclass> += <name>
PROD_RCS_DEFAULT += <name>
LIB_RCS += <name> Resource definition script files for all libraries.
LIB_RCS_<osclass> += <name>
LIB_RCS_DEFAULT += <name>
<name>_RCS += <name> Resource definition script files for specified product or library.
<name>_RCS_<osclass> += <name>
<name>_RCS_DEFAULT += <name>
result in resource files (*.res files) being created from the specified *.rc resource definition script files and linked into the prods
and/or libraries.
Definitions of the form:
result in the specified tcl files being installed to the $(INSTALL_LOCATION)/lib/<arch> directory.
Java class files can be created by the javac tool into $(INSTALL_JAVA) or into the O.Common subdirectory, by specifying the name of the java class file in the Makefile. Command line options for the javac tool can be specified. The configuration files set the java c option “-sourcepath .:..:../..”.
Any of the following can be specified:
The <name>.java file will be used to create the <name>.class file in the $(INSTALL_JAVA) directory.
The <name>.java files will be used to create the <name>.class file in the O.Common subdirectory.
The javac option <name> will be used on the javac command lines.
In this example, three class files are created in $(INSTALL_LOCATION)/javalib/mytest. The javac depreciation flag is used to list the description of each use or override of a deprecated member or class.
In this example, the test.class file is created in the O.Common subdirectory.
A single java jar file can be created using the java jar tool and installed into $(INSTALL_JAVA)
(i.e. $(INSTALL_LOCATION)/javalib) by specifying its name, and the names of its input files to be included in the created jar
file. The jar input file names must appear with a directory prefix.
Any of the following can be specified:
The <name> jar file will be created and installed into the $(INSTALL_JAVA) directory.
Names of images, audio files and classes files to be included in the jar file.
The preexisting manifest file will be used for the created jar file.
Names of java packages to be installed and added to the created jar file.
In this example, all the class files created by the current Makefile’s “JAVA+=” definitions, are placed into a file named mytest1.jar. A manifest file will be automatically generated for the jar.
Note: $(INSTALL_CLASSES) is set to $(addprefix $(INSTALL_JAVA)/,$(CLASSES)) in the EPICS base configure files.
In this example, three class files are created and placed into a new jar archive file named mytest2.jar. An existing manifest file, mytest2.mf is put into the new jar file.
A C header files for use with java native methods will be created by the javah tool in the O.Common subdirectory by specifying the name of the header file to be created. The name of the java class file used to generate the header is derived from the name of the header file. Underscores (_) are used as a header file name delimiter. Command line options for the javah tool can be specified.
Any of the following can be specified:
The <name>.h header file will be created in the O.Common subdirectory.
The javah option <name> will be used on the javah tool command line.
In this example, the C header xx_yy_zz.h will be created in the $(COMMON_DIR) subdirectory from the class xx.yy.zz (i.e. the java class file $(INSTALL_JAVA)/xx/yy/zz.class)). The option “-old” will tell javah to create old JDK1.0 style header files.
Module developers can now create new CONFIG and RULES* files ia a <top> application source directory. These new CONFIG* or RULES* files will be installed into the directory $(INSTALL_LOCATION)/cfg by including lines like the following Makefile line:
The build will install the new files CONFIG_MY1 and RULES_MY1 into the $(INSTALL_LOCATION)/cfg directory.
Files in a $(INSTALL_LOCATION)/cfg directory are now included during a build by so that the definitions and rules in them are available for use by later src directory Makefiles in the same module or by other modules with a RELEASE line pointing to the TOP of this module.
Module developers can now define a new type of file, e.g. ABC, so that files of type ABC will be installed into a directory defined by INSTALL_ABC. This is done by creating a new CONFIG_<name> file, e.g. CONFIG_ABC, with the following lines:
The INSTALL_ABC directory should be a subdirectory of $(INSTALL_LOCATION). The file type ABC should be target architecture independent (alh files, medm files, edm files.
Optional rules necessary for files of type ABC should be put in a RULES_ABC file.
The module developer installs new CONFIG_ABC and RULES_ABC files for the new file type into the directory $(INSTALL_LOCATION)/cfg by including the following Makefile line:
Files of type ABC are installed into INSTALL_ABC directory by adding a line like the following to a Makefile.
Since the files in $(INSTALL_LOCATION)/cfg directory are now included by the base config files, the ABC += definition lines are available for use by later src directory Makefiles in the same module or by other modules with a RELEASE line pointing to the TOP of this module.
A single output file is generated from assembling specified snippet files. Snippet file names start with numbers and are sorted when the snippets are concatenated: first by the number, then alphabetical by the remaining part of the name. (This mechanism is conceptually similar to the Linux convention of collecting configuration file snippets in *.d directories.)
Snippets with file names not starting with a number or ending in ’~’ are ignored. The specified snippets are processed in the order they appear on the command line. Multiple snippets with the same number are concatenated. ”Commands” (tags in the snippet name) can be used to control the treatment of snippets with the same number:
Specification of the target file is different for architecture dependent or independent files.
Snippet files are configured specifically (relative or absolute path) or as patterns (searched relative to all source directories).
The following macros can be used in snippets, and will be replaced by the current value when assembling is done.
This mechanism can be used to create an IOC startup file from snippets in a global and an application specific directory, allowing applications to add commands to different phases of the IOC startup by dropping appropriately numbered snippets into the directory.
Given the following directories and snippets:
And the following Makefile declaration:
The build will create and install a st.cmd script using the following snippets:
Source | Snippet | Comment |
L | 10_init | L default resets the G default |
G | 20_environment | |
L | 30_another-driver | implicit addition, alphabetical sorting |
G | 30_drivers | |
L | 40_settings | replacing a default, ignoring backup file |
L | 70_start-my-ioc | explicit replace |
Definitions given below containing <osclass> are used when building for target archs of a specific osclass, and the <osclass> part of the name should be replaced by the desired osclass, e.g. solaris, vxWorks, etc. If a _DEFAULT setting is given but a particular <osclass> requires that the default not apply and there are no items in the definition that apply for that <osclass>, the value “-nil-” should be specified in the relevant Makefile definition.
Build Option |
Description |
Products to be built (host type archs only) |
|
PROD |
products (names without execution suffix) to build and install. Specify xyz to build executable xyz on Unix and xyz.exe on WIN32 |
PROD_<osclass> |
os class specific products to build and install for <osclass> archs only |
PROD_DEFAULT |
products to build and install for archs with no PROD_<osclass> specified |
PROD_IOC |
products to build and install for ioc type archs |
PROD_IOC_<osclass> |
os specific products to build and install for ioc type archs |
PROD_IOC_DEFAULT |
products to build and install for ioc type arch systems with no PROD_IOC_<osclass> specified |
PROD_HOST |
products to build and install for host type archs. |
PROD_HOST_<osclass> |
os class specific products to build and install for <osclass> type archs |
PROD_HOST_DEFAULT |
products to build and install for arch with no PROD_HOST_<osclass> specified |
Test products to be built |
|
TESTPROD |
test products (names without execution suffix) to build but not install |
TESTPROD_<osclass> |
os class specific test products to build but not install |
TESTPROD_DEFAULT |
test products to build but not install for archs with no TESTPROD_<osclass> specified |
TESTPROD_IOC |
test products to build and install for ioc type archs |
TESTPROD_IOC_<osclass> |
os specific test products to build and install for ioc type archs |
TESTPROD_IOC_DEFAULT |
test products to build and install for ioc type arch systems with no TESTPROD_IOC_<osclass> specified |
TESTPROD_HOST |
testproducts to build and install for host type archs. |
TESTPROD_HOST_<osclass> |
os class specific testproducts to build and install for <osclass> type archs |
TESTPROD_HOST_DEFAULT |
test products to build and install for arch with no TESTPROD_HOST_<osclass> specified |
Test scripts to be built |
|
TESTSCRIPTS |
test scripts (names with .t suffix) to build but not install |
TESTSCRIPTS_<osclass> |
os class specific test scripts to build but not install |
TESTSCRIPTS_DEFAULT |
test scripts to build but not install for archs with no TESTSCRIPTS_<osclass> specified |
TESTSCRIPTS_IOC |
test scripts to build and install for ioc type archs |
TESTSCRIPTS_IOC_<osclass> |
os specific test scripts to build and install for ioc type archs |
TESTSCRIPTS_IOC_DEFAULT |
test scripts to build and install for ioc type arch systems with no TESTSCRIPTS_IOC_<osclass> specified |
TESTSCRIPTS_HOST |
test scripts to build and install for host type archs. |
TESTSCRIPTS_HOST_<osclass> |
os class specific testscripts to build and install for <osclass> type archs |
TESTSCRIPTS_HOST_DEFAULT |
test scripts to build and install for arch with no TESTSCRIPTS_HOST_<osclass> specified |
Libraries to be built |
|
LIBRARY |
name of library to build and install. The name should NOT include a prefix or extension e.g. specify Ca to build libCa.a on Unix, Ca.lib or Ca.dll on WIN32 |
LIBRARY_<osclass> |
os specific libraries to build and install |
LIBRARY_DEFAULT |
libraries to build and install for archs with no LIBRARY_<osclass> specified |
LIBRARY_IOC |
name of library to build and install for ioc type archs. The name should NOT include a prefix or extension e.g. specify Ca to build libCa.a on Unix, Ca.lib or Ca.dll on WIN32 |
LIBRARY_IOC_<osclass> |
os specific libraries to build and install for ioc type archs |
LIBRARY_IOC_DEFAULT |
libraries to build and install for ioc type arch systems with no LIBRARY_IOC_<osclass> specified |
LIBRARY_HOST |
name of library to build and install for host type archs. The name should NOT include a prefix or extension, e.g. specify Ca to build libCa.a on Unix, Ca.lib or Ca.dll on WIN32 |
LIBRARY_HOST_<osclass> |
os class specific libraries to build and install for host type archs |
|
|
LIBRARY_HOST_DEFAULT |
libraries to build and install for host type arch systems with no LIBRARY_HOST_<osclass> specified |
SHARED_LIBRARIES |
build shared libraries? Must be YES or NO |
SHRLIB_VERSION |
shared library version number |
Loadable libraries to be built |
|
LOADABLE_LIBRARY |
name of loadable library to build and install. The name should NOT include a prefix or extension e.g. specify Ca to build libCa.so on Unix and Ca.dll on WIN32 |
LOADABLE_LIBRARY_<osclass> |
os specific loadable libraries to build and install |
LOADABLE_LIBRARY_DEFAULT |
loadable libraries to build and install for archs with no LOADABLE_LIBRARY_<osclass> specified |
LOADABLE_LIBRARY_HOST |
name of loadable library to build and install for host type archs. The name should NOT include a prefix or extension, e.g. specify test to build libtest.so on Unix and test.dll on WIN32 |
LOADABLE_LIBRARY_HOST_<osclass> |
os class specific loadable libraries to build and install for host type archs |
LOADABLE_LIBRARY_HOST_DEFAULT |
loadable libraries to build and install for host type arch systems with no LOADABLE_LIBRARY_HOST_<osclass> specified |
Combined object files (vxWorks only) |
|
OBJLIB |
name of a combined object file library and corresponding munch file to build and install. The name will have a Library suffix appended |
OBJLIB_vxWorks |
same as OBJLIB |
OBJLIB_SRCS |
source files to build the OBJLIB |
OBJLIB_OBJS |
object files to include in OBJLIB |
Product and library source files |
|
SRCS |
source files to build all PRODs and LIBRARYs |
SRCS_<osclass> |
osclass specific source files to build all PRODs and LIBRARYs |
SRCS_DEFAULT |
source file to build all PRODs and LIBRARYs for archs with no SRCS_<osclass> specified |
USR_SRCS |
source files to build all PRODs and LIBRARYs |
|
|
USR_SRCS_<osclass> |
osclass specific source files to build all PRODs and LIBRARYs |
USR_SRCS_DEFAULT |
source file to build all PRODs and LIBRARYs for archs with no SRCS_<osclass> specified |
PROD_SRCS |
source files to build all PRODs |
PROD_SRCS_<osclass> |
osclass specific source files to build all PRODs |
PROD_SRCS_DEFAULT |
source files needed to build PRODs for archs with no SRCS_<osclass> specified |
LIB_SRCS |
source files for building LIBRARY (e.g. LIB_SRCS=la.c lb.c lc.c) |
LIB_SRCS_<osclass> |
os-specific library source files |
LIB_SRCS_DEFAULT |
library source files for archs with no LIB_SRCS_<osclass> specified |
LIBSRCS |
source files for building LIBRARY (deprecated) |
LIBSRCS_<osclass> |
os-specific library source files (deprecated) |
LIBSRCS_DEFAULT |
library source files for archs with no LIBSRCS_<osclass> specified (deprecated) |
<name>_SRCS |
source files to build a specific PROD or LIBRARY |
<name>_SRCS_<osclass> |
os specific source files to build a specific PROD or LIBRARY |
<name>_SRCS_DEFAULT |
source files needed to build a specific PROD or LIBRARY for archs with no <prod>_SRCS_<osclass> specified |
Product and library object files |
|
USR_OBJS |
object files, specified without suffix, to build all PRODs and LIBRARYs |
USR_OBJS_<osclass> |
osclass specific object files, specified without suffix, to build all PRODs and LIBRARYs |
USR_OBJS_DEFAULT |
object files, specified without suffix, needed to build PRODs and LIBRARYs for archs with no OBJS_<osclass> specified |
PROD_OBJS |
object files, specified without suffix, to build all PRODs |
PROD_OBJS_<osclass> |
osclass specific object files, specified without suffix, to build all PRODs |
|
|
PROD_OBJS_DEFAULT |
object files, specified without suffix, needed to build PRODs for archs with no OBJS_<osclass> specified |
LIB_OBJS |
object files, specified without suffix, for building all LIBRARYs (e.g. LIB_OBJS+=$(AB_BIN)/la $(AB_BIN)/lb) |
LIB_OBJS_<osclass> |
os-specific library object files, specify without suffix, |
LIB_OBJS_DEFAULT |
library object files, specified without suffix, for archs with no LIB_OBJS_<osclass> specified |
<name>_OBJS |
object files, specified without suffix, to build a specific PROD or LIBRARY |
<name>_OBJS_<osclass> |
os specific object files, specified without suffix, to build a specific PROD or LI|BRARY |
<name>_OBJS_DEFAULT |
object files, without suffix, needed to build a specific PROD or LIBRARY for archs with no <prod>_OBJS_<osclass> specified |
Product and library R3.13 combined object files |
|
USR_OBJLIBS |
combined object files with filenames that do not have a suffix, needed for building all PRODs and LIBRARYs (e.g. USR_OBJLIBS+=$(XYZ_BIN)/xyzLib) |
USR_OBJLIBS_<osclass> |
os-specific combined object files with filenames that do not have a suffix for building all PRODs and LIBRARYs |
USR_OBJLIBS_DEFAULT |
combined object files with filenames that do not have a suffix, for archs with no USR_OBJLIBS_<osclass> specified for building all PRODs and LIBRARYs |
PROD_OBJLIBS |
combined object files with filenames that do not have a suffix, needed for building all PRODs (e.g. PROD_OBJLIBS+=$(XYZ_BIN)/xyzLib) |
PROD_OBJLIBS_<osclass> |
os-specific combined object files with filenames that do not have a suffix for building all PRODs |
PROD_OBJLIBS_DEFAULT |
combined object files with filenames that do not have a suffix, for archs with no PROD_OBJLIBS_<osclass> specified for building all PRODs |
LIB_OBJLIBS |
combined object files with filenames that do not have a suffix, needed for building all LIBRARYs (e.g. LIB_OBJLIBS+=$(XYZ_BIN)/xyzLib) |
LIB_OBJLIBS_<osclass> |
os-specific combined object files with filenames that do not have a suffix for building all LIBRARYs |
LIB_OBJLIBS_DEFAULT |
combined object files with filenames that do not have a suffix, for archs with no LIB_OBJLIBS_<osclass> specified for building all LIBRARYs |
<name>_OBJLIBS |
combined object files with filenames that do not have a suffix, needed to build a specific PROD or LIBRARY |
<name>_OBJLIBS_<osclass> |
os specific combined object files with filenames that do not have a suffix, to build a specific PROD or LI|BRARY |
<name>_OBJLIBS_DEFAULT |
combined object files with filenames that do not have a suffix, needed to build a specific PROD or LIBRARY for archs with no <name>_OBJLIBS_<osclass> specified |
|
|
<name>_LDOBJS |
combined object files with filenames that do not have a suffix, needed to build a specific PROD or LIBRARY (deprecated) |
<name>_LDOBJS_<osclass> |
os specific combined object files with filenames that do not have a suffix, to build a specific PROD or LI|BRARY (deprecated) |
<name>_LDOBJS_DEFAULT |
combined object files with filenames that do not have a suffix, needed to build a specific PROD or LIBRARY for archs with no <name>_LDOBJS_<osclass> specified (deprecated) |
Product and library dependant libraries |
|
<name>_DIR |
directory to search for the specified lib. (For libs listed in all PROD_LIBS, LIB_LIBS, <name>_LIBS and USR_LIBS listed below)System libraries do not need a <name>_dir definition. |
USR_LIBS |
load libraries (e.g. Xt X11) for all products and libraries |
USR_LIBS_<osclass> |
os specific load libraries for all makefile links |
USR_LIBS_DEFAULT |
load libraries for systems with no USR_LIBS_<osclass> specified libs |
<name>_LIBS |
named prod or library specific ld libraries (e.g. probe_LIBS=X11 Xt) |
<name>_LIBS_<osclass> |
os-specific libs needed to link named prod or library |
<name>_LIBS_DEFAULT |
libs needed to link named prod or library for systems with no <name>_LIBS_<osclass> specified |
PROD_LIBS |
libs needed to link every PROD |
PROD_LIBS_<osclass> |
os-specific libs needed to link every PROD |
PROD_LIBS_DEFAULT |
libs needed to link every PROD for archs with no PROD_LIBS_<osclass> specified |
LIB_LIBS |
libraries to be linked with every library being created |
LIB_LIBS_<osclass> |
os class specific libraries to be linked with every library being created |
LIB_LIBS_DEFAULT |
libraries to be linked with every library being created for archs with no LIB_LIBS_<osclass> specified |
USR_SYS_LIBS |
system libraries (e.g. Xt X11) for all products and libraries |
USR_SYS_LIBS_<osclass> |
os class specific system libraries for all makefile links |
USR_SYS_LIBS_DEFAULT |
system libraries for archs with no USR_SYS_LIBS_<osclass> specified |
|
|
<name>_SYS_LIBS |
named prod or library specific system ld libraries |
<name>_SYS_LIBS_<osclass> |
os class specific system libs needed to link named prod or library |
<name>_SYS_LIBS_DEFAULT |
system libs needed to link named prod or library for systems with no <name>_SYS_LIBS_<osclass> specified |
PROD_SYS_LIBS |
system libs needed to link every PROD |
PROD_SYS_LIBS_<osclass> |
os class specific system libs needed to link every PROD |
PROD_SYS_LIBS_DEFAULT |
system libs needed to link every PROD for archs with no PROD_SYS_LIBS_<osclass> specified |
LIB_SYS_LIBS |
system libraries to be linked with every library being created |
LIB_SYS_LIBS_<osclass> |
os class specific system libraries to be linked with every library being created |
LIB_SYS_LIBS_DEFAULT |
system libraries to be linked with every library being created for archs with no LIB_SYS_LIBS_<osclass> specified |
SYS_PROD_LIBS |
system libs needed to link every PROD for all systems (deprecated) |
SYS_PROD_LIBS_<osclass> |
os class specific system libs needed to link every PROD (deprecated) |
SYS_PROD_LIBS_DEFAULT |
system libs needed to link every PROD for systems with no SYS_PROD_LIBS_<osclass> specified (deprecated) |
Compiler flags |
|
USR_CFLAGS |
C compiler flags for all systems |
USR_CFLAGS_<T_A> |
target architecture specific C compiler flags |
USR_CFLAGS_<osclass> |
os class specific C compiler flags |
USR_CFLAGS_DEFAULT |
C compiler flags for archs with no USR_CFLAGS_<osclass> specified |
<name>_CFLAGS |
file specific C compiler flags (e.g. xxxRecord_CFLAGS=-g) |
<name>_CFLAGS_<T_A> |
file specific C compiler flags for a specific target architecture |
<name>_CFLAGS_<osclass> |
file specific C compiler flags for a specific os class |
|
|
USR_CXXFLAGS |
C++ compiler flags for all systems (e.g. xyxMain_CFLAGS=-DSDDS) |
USR_CXXFLAGS_<T_A> |
target architecture specific C++ compiler flags |
USR_CXXFLAGS_<osclass> |
os-specific C++ compiler flags |
USR_CXXFLAGS_DEFAULT |
C++ compiler flags for systems with no USR_CXXFLAGS_<osclass> specified |
<name>_CXXFLAGS |
file specific C++ compiler flags |
<name>_CXXFLAGS_<T_A> |
file specific C++ compiler flags for a specific target architecture |
<name>_CXXFLAGS_<osclass> |
file specific C++ compiler flags for a specific osclass |
USR_CPPFLAGS |
C pre-processor flags (for all makefile compiles) |
USR_CPPFLAGS_<T_A> |
target architecture specific cpp flags |
USR_CPPFLAGS_<osclass> |
os specific cpp flags |
USR_CPPFLAGS_DEFAULT |
cpp flags for systems with no USR_CPPFLAGS_<osclass> specified |
<name>_CPPFLAGS |
file specific C pre-processor flags(e.g. xxxRecord_CPPFLAGS=-DDEBUG) |
<name>_CPPFLAGS_<T_A> |
file specific cpp flags for a specific target architecture |
<name>_CPPFLAGS_<osclass> |
file specific cpp flags for a specific os class |
USR_INCLUDES |
directories, with -I prefix, to search for include files(e.g. -I$(EPICS_EXTENSIONS_INCLUDE)) |
USR_INCLUDES_<osclass> |
directories, with -I prefix, to search for include files for a specific os class |
USR_INCLUDES_DEFAULT |
directories, with -I prefix, to search for include files for systems with no <name>_INCLUDES_<osclass> specified |
<name>_INCLUDES |
directories, with -I prefix, to search for include files when building a specific object file (e.g. -I$(MOTIF_INC)) |
<name>_INCLUDES_<T_A> |
file specific directories, with -I prefix, to search for include files for a specific target architecture |
<name>_INCLUDES_<osclass> |
file specific directories, with -I prefix, to search for include files for a specific os class |
|
|
HOST_WARN |
Are compiler warning messages desired for host type builds? (YES or NO) (default is YES) |
CROSS_WARN |
C cross-compiler warning messages desired (YES or NO) (default YES) |
HOST_OPT |
Is host build compiler optimization desired (default is NO optimization) |
CROSS_OPT |
Is cross-compiler optimization desired (YES or NO) (default is NO optimization) |
CMPLR |
C compiler selection, TRAD, ANSI or STRICT (default is STRICT) |
CXXCMPLR |
C++ compiler selection, NORMAL or STRICT (default is STRICT) |
Linker options |
|
USR_LDFLAGS |
linker options (for all makefile links) |
USR_LDFLAGS_<osclass> |
os specific linker options (for all makefile links) |
USR_LDFLAGS_DEFAULT |
linker options for systems with no USR_LDFLAGS_<osclass> specified |
PROD_LDFLAGS |
prod linker options |
PROD_LDFLAGS_<osclass> |
os specific prod linker options |
PROD_LDFLAGS_DEFAULT |
prod linker options for systems with no PROD_LDFLAGS_<osclass> specified |
LIB_LDFLAGS |
library linker options |
LIB_LDFLAGS_<osclass> |
os specific library linker options |
LIB_LDFLAGS_DEFAULT |
library linker options for systems with no LIB_LDFLAGS_<osclass> specified |
<name>_LDFLAGS |
prod or library specific linker options |
<name>_LDFLAGS_<osclass> |
prod or library specific linker flags for a specific os class |
<name>_LDFLAGS_DEFAULT |
linker options for systems with no <name>_LDFLAGS_<osclass> specified |
STATIC_BUILD |
Is static build desired (YES or NO) (default is NO). On win32 if STATIC_BUILD=YES then set SHARED_LIBRARIES=NO) |
|
|
Header files to be installed |
|
INC |
list of include files to install into $(INSTALL_DIR)/include |
INC_<osclass> |
os specific includes to installed under $(INSTALL_DIR)/include/os/<osclass> |
INC_DEFAULT |
include files to install where no INC_<osclass> is specified |
Perl, csh, tcl etc. script installation |
|
SCRIPTS |
scripts to install for all systems |
SCRIPTS_<osclass> |
os-specific scripts to install |
SCRIPTS_DEFAULT |
scripts to install for systems with no SCRIPTS_<osclass> specified |
SCRIPTS_IOC |
scripts to install for ioc type archs. |
SCRIPTS_IOC_<osclass> |
os specific scripts to install for ioc type archs |
SCRIPTS_IOC_DEFAULT |
scripts to install for ioc type arch systems with no SCRIPTS_IOC_<osclass> specified |
SCRIPTS_HOST |
scripts to install for host type archs. T |
SCRIPTS_HOST_<osclass> |
os class specific scripts to install for host type archs |
SCRIPTS_HOST_DEFAULT |
scripts to install for host type arch systems with no OBJS_HOST_<osclass> specified |
TCLLIBNAME |
list of tcl scripts to install into $(INSTALL_DIR)/lib/<osclass> (Unix hosts only) |
TCLINDEX |
name of tcl index file to create from TCLLIBNAME scripts |
Object files |
The names in the following OBJS definitions should NOT include a suffix (.o or.obj). |
OBJS |
object files to build and install for all system. |
OBJS_<osclass> |
os-specific object files to build and install. |
OBJS_DEFAULT |
object files to build and install for systems with no OBJS_<osclass> specified. |
|
|
OBJS_IOC |
object files to build and install for ioc type archs. |
OBJS_IOC_<osclass> |
os specific object files to build and install for ioc type archs |
OBJS_IOC_DEFAULT |
object files to build and install for ioc type arch systems with no OBJS_IOC_<osclass> specified |
OBJS_HOST |
object files to build and install for host type archs. T |
OBJS_HOST_<osclass> |
os class specific object files to build and install for host type archs |
OBJS_HOST_DEFAULT |
object files to build and install for host type arch systems with no OBJS_HOST_<osclass> specified |
Documentation |
|
DOCS |
text files to be installed into the $(INSTALL_DIR)/doc directory |
HTMLS_DIR |
name install Hypertext directory name i.e. $(INSTALL_DIR)/html/$(HTMLS_DIR) |
HTMLS |
hypertext files to be installed into the $(INSTALL_DIR)/html/$(HTMLS_DIR) directory |
TEMPLATES_DIR |
template directory to be created as $(INSTALL_DIR)/templates/$(TEMPLATE_DIR) |
TEMPLATES |
template files to be installed into $(TEMPLATE_DIR) |
Database Definition files |
|
DBD |
database definition files to be installed or created and installed into $(INSTALL_DBD). |
DBDINC |
names, without suffix, of menus or record database definitions and headers to be installed or created and installed. |
USR_DBDFLAGS |
optional flags for dbExpand. Currently only include path (-I <path>) and macro substitution (-S <substitution>) are supported. |
DBD_INSTALLS |
files from specified directory to install into $(INSTALL_DBD) (e.g. DBD_INSTALLS = $(APPNAME)/dbd/test.dbd |
Database Files |
|
DB |
database files to be installed or created and installed into $(INSTALL_DB). |
DB_INSTALLS |
files from specified directory to install into $(INSTALL_DB) (e.g. DB_INSTALLS = $(APPNAME)/db/test.db |
|
|
USR_DBFLAGS |
optional flags for msi (EPICS Macro Substitution Tool) |
Options for other programs |
|
YACCOPT |
yacc options |
LEXOPT |
lex options |
SNCFLAGS |
state notation language, snc, options |
<name>_SNCFLAGS |
product specific state notation language options |
E2DB_FLAGS |
e2db options |
SCH2EDIF_FLAGS |
sch2edif options |
RANLIBFLAGS |
ranlib options |
USR_ARFLAGS |
ar options |
Facilities for building Java programs |
|
JAVA |
names of Java source files to be built and installed |
TESTJAVA |
names of Java source files to be built |
JAVAINC |
names of C header file to be created in O.Common subdirectory |
JAR |
name of Jar file to be built |
JAR_INPUT |
names of files to be included in JAR |
JAR_MANIFEST |
name of manifest file for JAR |
USR_JAVACFLAGS |
javac tool options |
USR_JAVAHFLAGS |
javah tool options |
Facilities for Windows 95/NT resource ( .rc) files |
|
|
|
RCS |
resource files (<name>.rc) needed to build every PROD and LIBRARY |
RCS_<osclass> |
resource files (<name>.rc) needed to build every PROD and LIBRARY for ioc type archs |
RCS_DEFAULT |
resource files needed to build every PROD and LIBRARY for ioc type arch systems with no RCS_<osclass> specified |
<name>_RCS |
resource files needed to build a specific PROD or LIBRARY |
<name>_RCS_<osclass> |
os specific resource files to build a specific PROD or LIBRARY |
<name>_RCS_DEFAULT |
resource files needed to build a specific PROD or LIBRARY for ioc type arch systems with no RCS_<osclass> specified |
Assemblies |
|
ASSEMBLIES |
names of files to be assembled from snippets |
COMMON_ASSEMBLIES |
names of arch-independent files to be assembled from snippets |
<name>_SNIPPETS |
snippet files needed to build a specific assembly |
<name>_PATTERN |
patterns for snippet files (searched from all source directories) needed to build a specific assembly |
Other definitions: |
|
USR_VPATH |
list of directories |
BIN_INSTALLS |
files from specified directories to be installed into $(INSTALL_BIN) (e.g. BIN_INSTALLS = $(EPICS_BASE_BIN)/aiRecord$(OBJ)) |
BIN_INSTALLS_<osclass> |
os class specific files from specified directories to be installed into $(INSTALL_BIN) |
BIN_INSTALLS_DEFAULT |
files from specified directories to be installed into $(INSTALL_BIN) for target archs with no BIN_INSTALLS_<osclass> specified |
LIB_INSTALLS |
files from specified directories to be installed into $(INSTALL_LIB) |
LIB_INSTALLS_<osclass> |
os class specific files from specified directories to be installed into $(INSTALL_LIB) |
LIB_INSTALLS_DEFAULT |
files from specified directories to be installed into $(INSTALL_LIB) for target archs with no LIB_INSTALLS_<osclass> specified |
TARGETS |
files to create but not install |
|
|
INSTALL_LOCATION |
installation directory (defaults to $(TOP)) |
|
|
|
|
|
The base/configure directory has the following directory structure:
The configure files contain definitions and make rules to be included in the various makefiles.
Definitions for all hosts and all targets for a cross build (host different than target).
Definitions for all hosts and all targets for builds using the gnu compiler.
Definitions which setup the variables that have <osclass> and DEFAULT options.
Definitions to generate include, bin, lib, perl module, db, and dbd directory definitions for RELEASE <top>s.
EPICS base specific definitions.
Definitions for the version number of EPICS base. This file is used for creating epicsVersion.h which is installed into base/include.
Definitions common to all builds.
Default definitions of the EPICS environment variables. This file is used for creating envData.c which is included in the Com library.
Definitions to allow user created file types.
File in which you add to or modify make variables in EPICS base. A definition commonly overridden is CROSS_COMPILER_TARGET_ARCHS
Defaults for site specific definitions of EPICS environment variables. This file is used for creating envData.c which is included in the Com library.
Include statements for all the other configure files. You can override any definitions in other CONFIG* files by placing override definitions at the end of this file.
Specifies the location of external products such as Tornado II and external <tops> such as EPICS base.
This file just includes the appropriate rules configuration file.
Rules for building and installing database and database definition files. Databases generated from templates and/or CapFast schematics are supported.
Rules which allow building in the iocBoot/<iocname> directory of a makeBaseApp created ioc application.
Definitions and rules which allow building the make target for each target architecture.
Build rules for the Makefiles
Definitions and rules which allow building the make targets in each subdirectory. This file is included by Makefiles in directories with subdirectories to be built.
Definitions and rules to use expandVars.pl to expand @[email protected] variables in a file.
Definitions and rules to allow user created CONFIG* and RULES* files and rules to allow user created file types.
Makefile code to create target specific dependency lines for libraries and product targets.
Rules specific to a <top> level directory e.g. uninstall and tar. It also includes the RULES_DIRS file.
The configure/os directory contains os specific make definitions. The naming convention for the files in this directory is CONFIG.<host>.<target> where <host> is either the arch for a specific host system or Common for all supported host systems and <target> is either the arch for a specific target system or Common for all supported target systems.
For example, the file CONFIG.Common.vxWorks-pentium will contain make definitions to be used for builds on all host systems when building for a vxWorks-pentium target system.
Also, if a group of host or target files have the same make definitions these common definitions can be moved to a new file which is then included in each host or target file. An example of this is all Unix hosts which have common definitions in a CONFIG.UnixCommon.Common file and all vxWorks targets with definitions in CONFIG.Common.vxWorksCommon.
The base/configure/os directory contains the following os-arch specific definitions
Specific host-target build definitions
Specific target definitions for all hosts
Specific host definitions for all targets
Definitions for Unix hosts and all targets
Specific host definitions for all vx targets
R3.13 arch compatibility definitions
Site specific host-target definitions
Site specific target definitions for all hosts
Site specific host definitions for all targets
The src/tools directory contains Perl script tools used for the build. The are installed by the build into
$(INSTALL_LOCATION)/bin/$(T_A) for Host type target archs. The tools currently in this directory
are:
This Perl script does consistency checks for the external <top> definitions in the RELEASE file. This script also creates envPaths, cdCommands, and dllPath.bat files for vxWorks and other IOCs.
This perl script finds and deletes cvs .#* files in all directories of the directory tree.
This perl script converts text file in DOS CR/LF format to unix ISO format.
This perl tool expands @[email protected] variables while copying a file.
This is a perl script that filters compiler warning output (for HP-UX).
This perl script returns the fullpathname of a file.
This is a Perl script that installs build created files into the install directories.
This perl script searches .substitutions and .template files for entries to create a DEPENDS file.
This perl script creates an include dbd file from file names
This is a perl script that creates a Makefile in the created O.<arch> directories.
This perl script generates a file $target.t which executes a real test program in the same directory.
This perl script generates include file dependencies for targets from source file include statements.
This is a perl script that creates a ctdt.c file for vxWorks target arch builds which lists the c++ static constructors and destructors. See munching in the vxWorks documentation for more information.
This is a perl script that changes VAR(xxx) style macros in CapFast generated databases into the $(xxx) notation used in EPICS databases.
This tools uses MS Visual C++ compiler version number to determine if we want to use the Manifest Tool (status=1) or not (status=0).
The base/documentation directory contains README files to help users setup and build epics/base.
The files currently in the base/documentation directory are:
Instructions for setup and building epics base
html version of README.1st
Microsoft WIN32 specific instructions
NI cpu030 specific instructions
HPUX 11 (hpux-parisc) specific instructions
Cris architecture specific instructions
Tru64Unix/Alpha specific instructions
Installation notes for Mac OS X (Darwin)
Describes how to modify a R3.13 vxWorks application so that it builds with release R3.14.1.
Describes how to convert a R3.13 vxWorks application so that it contains a R3.14 configure directory and R3.14 Makefiles and builds with R3.14.1.
Describes how to modify a R3.14.0alpha1 application so that it builds with release R3.14.0beta1.
Describes how to modify a R3.14.0beta1 application so that it builds with release R3.14.0beta2.
Describes how to modify a R3.14.0beta2 application so that it builds with release R3.14.1.
Describes how to modify a R3.14.* application so that it builds with next release after R3.14.*.
Describes how to modify a R3.13 extension so that it builds with release R3.14.1.
Describes changes in the R3.14.1 release
List of known problems in EPICS base R3.14.1.
Checklist of things that must be done when creating a new release of EPICS Base.
The base/startup directory contains scripts to help users set the required environment variables and path. The appropriate startup files should be executed before any EPICS builds.
The scripts currently in the base/startup directory are:
c shell script to set EPICS_HOST_ARCH environment variable
perl script to set EPICS_HOST_ARCH environment variable
Unix bourne shell script to set path and environment variables
Unix c shell script to set path and environment variables
WIN32 bat file to set path and environment variables for building with cygwin gcc/g++ compilers
WIN32 bat file to set path and environment variables for building with MS Visual C++ compilers