Building Offline with cmake

From Mu2eWiki
Jump to navigation Jump to search

Introduction

Use of CMake to build Offline in the DAQ environment.

Building Offline with CMake

Using UPS

The UPS-based build of Offline is supported in SL7 environments, in two distinct flavors:

Package-based build

Deprecated: these instructions worked in January/February 2024 and only on SL7 machines. They may not work with never versions of Offline and the will not work on AL9 machines. There is still access to SL7 via containers, see Legacy Access to SL7. As of August 2024, only the #Using Spack instructions are supported.

The Offline CMake uses the cetmodules package for several CMake convenience functions, and can be built using the standard cetmodules invocation:

source /cvmfs/mu2e.opensciencegrid.org/setupmu2e-art.sh
git clone https://github.com/Mu2e/Offline.git
mkdir build_Offline && cd build_Offline
source ../Offline/ups/setup_for_development -p e28:s126:trig # -d or -p are supported, see Offline/ups/product_deps for supported qualifier combinations
export CETPKG_J=$((`cat /proc/cpuinfo|grep processor|tail -1|awk '{print $3}'` + 1)) # Set build parallelism to number of CPUs on host
buildtool # -p to create a UPS-redistributable package, -i to install in a UPS area (-I to specify which)

MRB-based build

Deprecated: these instructions worked in January/February 2024 and only on SL7 machines. They may not work with never versions of Offline and the will not work on AL9 machines. There is still access to SL7 via containers, see Legacy Access to SL7. As of August 2024, only the #Using Spack instructions are supported.

Offline is also compatible with MRB-based development:

source /cvmfs/mu2e.opensciencegrid.org/setupmu2e-art.sh
setup mrb
mkdir my_mrb_working_area
export CETPKG_J=$((`cat /proc/cpuinfo|grep processor|tail -1|awk '{print $3}'` + 1)) # Set build parallelism to number of CPUs on host
export MRB_PROJECT=Mu2e
mrb newDev -v v1_00_00 -q e28:s126:trig:prof # Version here is mostly meaningless, but required to silence certain CMake warnings
cd srcs
mrb gitCheckout https://github.com/Mu2e/Offline.git
mrb uc
mrb z
mrbsetenv
mrb b

Using Spack

An "Offline" Spack recipe has been created and added to https://github.com/Mu2e/mu2e-spack. To build and install Offline in a Spack area, use the following commands:

git clone https://github.com/FNALssi/spack.git -b fnal-develop

echo 'export SPACK_DISABLE_LOCAL_CONFIG=true
source spack/share/spack/setup-env.sh' >setup-env.sh

source setup-env.sh

git clone https://github.com/fnalssi/fermi-spack-tools.git
./fermi-spack-tools/bin/make_packages_yaml spack # Examine output, several system packages are required to be installed for the spack concretize/install steps to work properly

mkdir repos && cd repos
git clone https://github.com/FNALssi/fnal_art.git && spack repo add fnal_art
git clone https://github.com/art-daq/artdaq-spack.git && spack repo add artdaq-spack
git clone https://github.com/Mu2e/mu2e-spack.git && spack repo add mu2e-spack
cd ..

spack compiler find
spack env create offline
spack env activate offline

spack add art-suite@s126
spack add Offline
spack develop Offline@main

spack concretize
spack install

To use this area in future sessions:

source setup-env.sh
spack env activate offline
mu2e -c ... # Offline is now setup in your PATH

When to Update CMakeLists.txt

In general, CMakeLists.txt in affected packages should be updated when:

  1. Files are added, removed, or renamed
  2. Library dependencies for a package change (e.g. a #include referring to another package is added or removed)
  3. Data files are added to a package and should be installed when Offline is built