Build and install the environment
Build the vendor libraries, then run the EPICS-env target sequence to clone, patch, configure, build, and install Experimental Physics and Industrial Control System (EPICS) base and every module into the installed tree.
Prerequisites
- The install location is set; see Choose the install location and release.
- The host packages that EPICS base and the modules need are installed. The continuous integration (CI) workflows install them with https://github.com/jeonghanlee/pkg_automation; see Supported platforms and CI.
python3is onPATH;makestops while reading its configuration when it is missing.- The host can clone from GitHub.
- Every command runs from the top of the EPICS-env clone, in one shell, so the
VENDOR_PATHvariable of step 1 stays set.
When the uldaq and open62541 libraries are installed under /usr/local, the
default of VENDOR_ULDAQ_PATH and OPEN62541_PATH, skip steps 1 through 4.
-
To place the vendor libraries inside the installed tree, set a shell variable to its
vendordirectory:VENDOR_PATH="$(make print-INSTALL_LOCATION_EPICS)/vendor" -
In
configure/RELEASE.local, point themeasCompandopcuamodules at that directory:echo "VENDOR_ULDAQ_PATH=${VENDOR_PATH}" > configure/RELEASE.local echo 'OPEN62541_PATH=\$$\$$\(\_OPEN62541_CONFIG_OPCUA\)/../../../vendor' >> configure/RELEASE.localconf.measCompwritesVENDOR_ULDAQ_PATHinto themeasCompconfiguration as the uldaq library and header directories. The escapedOPEN62541_PATHvalue reaches the installedopcuaconfiguration filecfg/CONFIG_OPCUAas$(_OPEN62541_CONFIG_OPCUA)/../../../vendor, a path relative to that file’s own directory, so it keeps pointing at thevendordirectory of the same installed tree. -
Build the uldaq library into the
vendordirectory:git clone https://github.com/jeonghanlee/uldaq-env ../uldaq-env echo "INSTALL_LOCATION=${VENDOR_PATH}" > ../uldaq-env/configure/CONFIG_SITE.local make -C ../uldaq-env init conf build install -
Build the open62541 library into the
vendordirectory:git clone https://github.com/jeonghanlee/open62541-env ../open62541-env echo "INSTALL_LOCATION=${VENDOR_PATH}" > ../open62541-env/configure/CONFIG_SITE.local make -C ../open62541-env init conf build installBoth libraries are in the
vendordirectory:ls "${VENDOR_PATH}/lib"The output lists the libraries of both packages:
cmake libopen62541.so libopen62541.so.1 libopen62541.so.1.3.15 libuldaq.a libuldaq.la libuldaq.so libuldaq.so.1 libuldaq.so.1.2.1 pkgconfig -
Clone EPICS base and every module at its pinned tag or commit:
make initEach source tree lands in a
<name>-srcdirectory at the repository top. Module pins and dependencies lists the pins. -
Apply the carried upstream patches:
make patchThe output prints one
Patchingline per patch file. -
Write the site configuration of base and every module:
make confThe output is one empty line.
-
Build base and every module:
make buildBase installs into the installed tree as it builds, and each module installs after its build completes.
-
Complete the install of base and the modules, and add the
commonIocshfragments,setEpicsEnv.bash,resetEpicsEnv.bash, and the.versionsfile:make install -
Create the unversioned module links, such as
asynforasyn-4.46.0:make symlinkssetEpicsEnv.bashfinds thepvxsandpmactools through these links.
The Debian 12, Debian 13, and Rocky 8 CI workflows run make github.check
and then make install. github.check runs steps 5 through 8, step 10, and
the vars listing, with the module dependency gate between make conf and
make build.
Verification
-
List the top level of the installed tree:
LC_ALL=C make exist LEVEL=1With the vendor libraries of steps 1 through 4, the tree holds base, the modules, the vendor libraries, both environment scripts, and the version file:
<install_location>/1.4.0/debian-13/7.0.10 |-- .versions |-- base |-- modules |-- resetEpicsEnv.bash |-- setEpicsEnv.bash `-- vendor 4 directories, 3 files<install_location>is the value ofINSTALL_LOCATION. When you skip steps 1 through 4 because the vendor libraries are under/usr/local, the tree has novendordirectory, and the listing has novendorline.This listing shows a first install. Replacing existing setup or reset scripts also leaves backup files, which add entries to the listing.
LC_ALL=Cmakestreedraw its lines with American Standard Code for Information Interchange (ASCII) characters.make existusestreewhen it is installed andfindotherwise, so the drawing differs on a host withouttree. -
Run the runpath and environment gates:
make check.deps check.env > /dev/null 2>&1; echo $?The output is:
0Run the verification gates explains each gate and its report.