Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Make targets by purpose

The top-level Makefile exposes every EPICS-env action as a make target. EPICS-env builds the Experimental Physics and Industrial Control System (EPICS) base and modules. Run each target from the repository top as make <target>. A run with no target prints the configuration variables, because vars is the default goal.

Targets that name a module use one of three spellings. The Module and Key columns of Module pins and dependencies list every module name and key:

  • <MODULE_KEY> is the upper-case key from configure/RELEASE, such as ASYN or SNCSEQ.
  • <module> is the source directory name without its -src suffix, such as asyn, sequencer, or recsync.
  • conf.<module> targets use the names listed in Source configuration targets; a few differ from the source directory name, such as conf.sncseq for sequencer.

Some targets read a variable that you pass on the make command line. This command audits only the asyn module:

make audit.module-deps MODULE=asyn

Variables set on the command line lists every such variable and its default.

Pipeline aggregate targets

TargetRuns
initinit.base and init.modules: clones EPICS base and every module at its pinned tag or commit
patchEvery patch.*.apply target, in a fixed order
patch.revertEvery patch.*.revert target, in the exact reverse order of patch
confconf.base and conf.modules: writes the site files that point each source tree at its install location and dependencies
buildconf.base, build.base, conf.modules, and build.modules: builds base and every module; module builds install as they complete
installinstall.base, install.modules, install.commoniocsh, and src_version
symlinkssymlinks.modules: creates an unversioned link for each installed module
distcleandistclean.base, distclean.modules, and distclean.modulesgen: removes the cloned source trees and configure/MODULESGEN.mk

Source checkout targets

TargetEffect
init.base, clone.baseClones EPICS base into epics-base-src, checks out its pinned tag, and initializes its submodules; skips an existing directory
init.modules, clone.modulesRuns the clone target of every module
<MODULE_KEY>Clones one module and checks out its pinned tag or commit; skips an existing directory
reconf.modulesRemoves and regenerates configure/MODULESGEN.mk
remove.genmk, clean.genmkRemoves every configure/*.mk file
show.genmkPrints every existing configure/*.mk file; if MODULESGEN.mk is absent, also prints its current derived configuration without creating it

Upstream patch targets

TargetEffect
patch.base.pr.apply, patch.base.pr.revertApplies the EPICS base patches patch/<base_version>-*.p0.patch in sorted order, or reverts them in the reverse order
patch.pvxs.commit.apply, patch.pvxs.commit.revertApplies the pvxs patches patch/<pvxs_version>-*.p0.patch in sorted order, or reverts them in the reverse order
patch.base.apply, patch.base.revertApplies or reverts patch/<base_version>.base.p0.patch when that file exists
patch.<name>.apply, patch.<name>.revertApplies or reverts one fixed module patch; <name> is mca, measComp, measComp.tc32, opcua, opcua.export, feed-core, QPC, or StreamDevice. The mca targets act only on macOS and do nothing on Linux
patch.<name>.make, patch.base.makeWrites the current source changes of that module, or of EPICS base, as its patch file; patch.mca.make acts only on macOS

Revert targets skip only confirmed unapplied patches and stop on conflicts, partial application, missing required inputs, or unresolved states. Completed reversals remain in effect after a later error. Optional empty patch sets and platform-inactive targets succeed without changes.

Source configuration targets

TargetEffect
conf.baseconf.base.site and conf.base.env
conf.base.siteRemoves epics-base-src/configure/CONFIG_SITE_ENV, which conf.base.env writes again, adds two linker lines to configure/os/CONFIG_SITE.linux-x86_64.linux-x86_64 when absent, and writes epics-base-src/configure/CONFIG_SITE.local: install location, linking with a run-time library search path (RUNPATH) relative to $ORIGIN, site version, and PYTHON = python3
conf.base.envWrites epics-base-src/configure/CONFIG_SITE_ENV: time zone, Network Time Protocol (NTP) server, iocsh prompt and history, and input/output controller (IOC) log settings
conf.modulesconf.release.modules, conf.modules.zero, and conf.modules.one
conf.release.modulesWrites the RELEASE.local and CONFIG_SITE.local files that every module reads from the repository top
conf.modules.zeroRuns the configuration targets of MCoreUtils, autosave, caPutLog, ether_ip, iocStats, pcas, pscdrv, retools, snmp, recsync, sncseq, sscan, opcua, pvxs, linStat, feed-core, QPC, and pyDevSup
conf.modules.oneRuns the configuration targets of calc, asyn, modbus, lua, std, StreamDevice, busy, scaler, mca, measComp, motor, motorMotorSim, pmac, and rgamv2
conf.<module>Configures one module; <module> is one of MCoreUtils, autosave, caPutLog, ether_ip, iocStats, pcas, pscdrv, retools, snmp, recsync, sncseq, sscan, opcua, pvxs, linStat, feed-core, QPC, pyDevSup, calc, asyn, modbus, lua, std, StreamDevice, busy, scaler, mca, measComp, motor, motorMotorSim, pmac, or rgamv2
conf.show, conf.base.show, conf.modules.show, conf.<module>.showPrints the files the matching configuration target writes
conf.gz.base, conf.gz.modulesSame as conf.base and conf.modules, and appends -g0 -gz=zlib to USR_CFLAGS, USR_CXXFLAGS, and USR_LDFLAGS
user.confCopies configure_user/CONFIG_USER and configure_user/RULES_USER into ${HOME}/configure

On Ubuntu 26, the individual configuration targets for sncseq, iocStats, sscan, calc, busy, StreamDevice, lua, std, scaler, and mca write USR_CFLAGS += -std=gnu17 in the module’s configure/CONFIG_SITE.local. The same targets run under conf.modules and conf.gz.modules. Repeating a configuration target rewrites the file with one copy of the flag; other operating systems do not receive it.

conf.std also writes the installed base path into the std child IOC iocs/stdTestIOC/configure/RELEASE.local. It replaces only EPICS_BASE assignments in that file, preserves other settings, comments, and includes, and avoids duplicate assignments on repetition or installation-root changes.

Build and install targets

TargetEffect
build.baseBuilds EPICS base with four parallel jobs
build.modulesBuilds every module in dependency order, then runs install.modules
build.<module>Builds one module after the modules it depends on
build.gzSame as build, with the conf.gz.* configuration
install.baseInstalls EPICS base and copies scripts/setEpicsEnv.bash and scripts/resetEpicsEnv.bash to the top of the installed tree with mode 0644, backing up existing files
install.modules, install.<module>Installs every module, or one module
install.commoniocshCopies commonIocsh/iocsh/*.iocsh to modules/commonIocsh/iocsh in the installed tree
src_versionWrites the time it runs and the EPICS-env commit to .versions and installs that file at the top of the installed tree
symlinks.modulesCreates every module link, then deletes dangling links under modules on Linux
symlink.<module>, cleansymlink.<module>Creates or removes the unversioned link of one module

Verification and inspection targets

TargetEffect
audit.module-depsReports differences between each module’s declared and observed dependencies; reads MODULE, FORMAT, and PLATFORM
check.module-depsSame audit, and fails when an undeclared or unknown dependency exists
audit.depsReports runpath defects in the installed executables and shared libraries without failing
check.depsSame scan, and fails on any finding
audit.envReports each LD_LIBRARY_PATH entry under pvxs/bundle that the installed setEpicsEnv.bash adds
check.envSame check, and fails on a finding or when it cannot inspect the installed tree
readelf.base, ldd.base, chrpath.base, readelf.runpath.basePrints the dynamic section, resolved libraries, or runpath of the installed EPICS base files
readelf.modules, ldd.modules, chrpath.modulesSame inspection for every installed module
readelf.<module>, ldd.<module>, chrpath.<module>Same inspection for one installed module
existPrints the installed tree to depth LEVEL, default 2
exist.modulesPrints the installed modules directory to depth LEVEL plus 1

Clean and uninstall targets

TargetEffect
clean.baseRuns make clean in the EPICS base source tree
clean.modulesRuns make distclean in every module source tree, which also empties each installed module directory; preserves sources and user local settings, except the upstream motor-generated host RELEASE file
distclean.baseRemoves the EPICS base source tree
distclean.modulesRemoves every module source tree
distclean.modulesgenRemoves configure/MODULESGEN.mk
uninstallRemoves the whole installed tree for the current release, operating system, and base version
uninstall.modulesRuns make uninstall in every module, then removes every module install directory; preserves source trees and the installed base
uninstall.<module>Runs make uninstall in one module
src_cleanRemoves site-template/.versions

Variable printing targets

An invocation is query-only when every selected goal is print-%, PRINT.%, vars, env, default, ls.%, tree.%, cat.%, exist, exist.modules, show.genmk, or a declared conf.*.show target, including conf.show. Pattern query names require a nonempty variable name. These invocations create no installation directory or generated file, including with -n. File-display targets read their actual files and can fail when those files are missing.

With no explicit goals, make classifies the effective .DEFAULT_GOAL; the shipped value is vars. Command-line default overrides retain their target behavior, and explicit goals take precedence. A mixed query/action list or an unknown goal takes the action path, which probes the installation root and can regenerate the cache. -n does not suppress those action-path effects.

TargetEffect
vars, env, defaultPrints the configuration variables; FILTER=<prefix> limits the list to names that start with <prefix>
print-<VARIABLE>Prints the value of one variable
PRINT.<VARIABLE>Prints the value and the origin of one variable
ls.<VARIABLE>, tree.<VARIABLE>, cat.<VARIABLE>Runs ls, tree, or cat on the path a variable holds

Continuous integration (CI) targets

TargetRuns
githubinit, patch, vars, conf, build, and symlinks
github.checkinit, patch, vars, conf, check.module-deps, build, and symlinks