Project

General

Profile

Qualifiers

Overview

Qualifiers are useful shorthand for indicating a whole host of things about a ups product. It is possible to use a descriptive qualifier, but these get long and unwieldy in short order. Therefore products we build are generally labeled with short qualifiers, such as "e19".

This "whole host of things" may include:
  • The particular compiler, compiler version and major options such as the C++ standard which affect binary link compatibility. This is important for packages containing C++ and Fortran code.
  • A particular set of package dependencies which are a function of how the package is compiled. For example, the ds50daq package can be compiled against the reference MPICH ethernet implementation of the MPI standard, or the MVAPICH implementation which requires the presence of InfiniBand drivers and libraries on the system.

See Defining products in the CET build environment for use of product_deps. It is the product_deps file in which relationships are defined between different products with possibly different qualifiers.

Specific qualifiers and their meanings.

Note that, for the purposes of binary compatibility, we expect that any particular patch level of GCC will be compatible with any other of the same major and minor version. Particular exceptions are: GCC 4.7.0 and 4.7.1 are compatible with each other, as are 4.7.2 and 4.7.3, but the two pairs are mutually incompatible. Note however that due to the constraint that a given UPS product must specify a particular version of (e.g.) the gcc product to use, one cannot have a dependency chain with a mixed gcc dependency even if those version of GCC produce binary-compatible code.

Below, we describe the qualifiers used by UPS packages built for use by and with art, and their meanings. Now-disused qualifiers are described elsewhere: Historical qualifiers.

Primary qualifiers.

These qualifiers are mutually exclusive:

Qualifier Meaning Notes
none Compiled with the native compiler (no C++ or Fortran) or not a package with linkable libraries.
gccXYZ Built with gcc X.Y.Z This package may contain compiled C++ or FORTRAN 77, but not C++2011 or more modern Fortran.
e21 Built with GCC v10.1.0, -std=c++2a, -std=gnu (gfortran). Using new C++ library ABI only. EXPERIMENTAL
e20 Built with GCC v9.3.0, -std=c++17, -std=gnu (gfortran). Using new C++ library ABI only.
e19 Built with GCC v8.2.0, -std=c++17, -std=gnu (gfortran). Using new C++ library ABI only.
e17 Built with GCC v7.3.0, -std=c++17, -std=gnu (gfortran). Using new C++ library ABI only.
e15 Built with GCC v6.4.0, -std=c++14, -std=gnu (gfortran). Using new C++ library ABI only.
e14 Built with GCC v6.3.0, -std=c++14, -std=gnu (gfortran). Using new C++ library ABI only.
c7 Built with Clang v7.0.0, -std=c++17, -std=gnu (gfortran from GCC 8.2.0). Using Clang 5.0 ABI. Products depend on GCC 8.2.0 for gfortran where appropriate (CC=clang, CXX=clang++, FC=gfortran)
c2 Built with Clang v5.0.1, -std=c++17, -std=gnu (gfortran from GCC 6.4.0). Using Clang 5.0 ABI. Products depend on GCC 6.4.0 for gfortran where appropriate (CC=clang, CXX=clang++, FC=gfortran)

If no primary qualifier is specified, the package uses the product's default build options and the native compiler.

See Historical qualifiers for older or non-functional primary qualifiers not mentioned here.

Secondary qualifiers: a gazetteer.

These qualifiers may be used in conjunction with a primary qualifier (above) and are not necessarily mutually exclusive. Some qualifiers (e.g. debug, opt and prof) may be applicable to a large number of products; others just a few or even only one. In general, secondary qualifiers are only mutually exclusive with related secondary qualifiers.

Qualifier Meaning Notes
debug Compiled with -g -O0 Mutually exclusive with opt and prof.
eth Linked against the MPICH implementation of the MPI standard. Uses standard ethernet for IPC.
Mutually exclusive with ib.
ib Linked against the MVAPICH implementation of the MPI standard. Uses InfiniBand drivers for high-speed, low-latency IPC; usually a product-stub to a local install.
Mutually exclusive with eth.
opt Compiled with -g -O3 -DNDEBUG Rarely needed: use prof instead.
Mutually exclusive with debug and prof.
prof Compiled with -g -O3 -DNDEBUG -fno-omit-frame-pointer Retaining the frame pointer gives debuggers and profilers more to work with, producing code that is more easily debugged and more accurately profiled. We have never observed a measurable performance difference between using or omitting the -fno-omit-frame-pointer option.
Mutually exclusive with debug and opt.
pXYZ Built against python vX_Y_Z For certain python packages which may be used in multiple distributions
us Built with USolids Used when building geant4 v4_10_2_p0X with usolids from vecgeom

See Historical qualifiers for older or non-functional secondary qualifiers.

The "s" series.

An s-series secondary qualifier indicates that a given version of a package was uilt with a particular release of art. se ONLY for products where the source code does not change, such as toyExperiment, artdaq_core, and ifdh_art.

Qualifier Meaning Canvas & Gallery Notes
s102 Built with art_root_io 1.03.01 canvas 3.09.01, canvas_root_io 1.05.02, gallery 1.14.03 Release Notes 3.05.01
s101 Built with art_root_io 1.04.03 canvas 3.10.02, canvas_root_io 1.06.02, gallery 1.15.02 Release Notes 3.06.02
s100 Built with art_root_io 1.04.02 canvas 3.10.01, canvas_root_io 1.06.01, gallery 1.15.01 Release Notes 3.06.02
s99 Built with art_root_io 1.04.01 canvas 3.10.00, canvas_root_io 1.06.00, gallery 1.15.00 Release Notes 3.06.01
s98 Built with art_root_io 1.04.00 canvas 3.10.00, canvas_root_io 1.06.00, gallery 1.15.00 Release Notes 3.06.00
s97 Built with art_root_io 1.03.01 canvas 3.09.01, canvas_root_io 1.05.02, gallery 1.14.02 Release Notes 3.05.01
s96 Built with art_root_io 1.03.00 canvas 3.09.01, canvas_root_io 1.05.02, gallery 1.14.02 Release Notes 3.05.00
s95 Built with art_root_io 1.02.01 canvas 3.09.00, canvas_root_io 1.05.01, gallery 1.14.01 Release Notes 3.04.00
s94 Built with art_root_io 1.02.00 canvas 3.09.00, canvas_root_io 1.05.00, gallery 1.14.00 Release Notes 3.04.00
s93 Built with art_root_io 1.01.04 canvas 3.08.00, canvas_root_io 1.04.01, gallery 1.13.01 Release Notes 3.03.01
s92 Built with art_root_io 1.00.10 canvas 3.07.04, canvas_root_io 1.03.07, gallery 1.12.07 Release Notes 3.02.06
s91 Built with art_root_io 1.00.09 canvas 3.07.04, canvas_root_io 1.03.06, gallery 1.12.06 Release Notes 3.02.06
s89 Built with art 3.03.01 canvas 3.08.00, canvas_root_io 1.04.00, gallery 1.13.00 Release Notes 3.03.01
s88 Built with art_root_io 1.01.02 Same art, canvas, and gallery versions as s87.
s87 Built with art 3.03.00 canvas 3.08.00, canvas_root_io 1.04.00, gallery 1.13.00 Release Notes 3.03.00
s86 Built with art_root_io 1.00.07 Same art, canvas, and gallery versions as s85.
s85 Built with art 2.13.00 canvas 3.06.01, canvas_root_io 1.01.11, gallery 1.08.06 Release Notes 2.13.00
s84 Built with art 3.02.06 canvas 3.07.03, canvas_root_io 1.03.03, gallery 1.12.03 Release Notes 3.02.06
s83 Built with art 3.02.05 canvas 3.07.03, canvas_root_io 1.03.03, gallery 1.12.03 Release Notes 3.02.05
s82 Built with art 3.02.04 canvas 3.07.03, canvas_root_io 1.03.03, gallery 1.12.03 Release Notes 3.02.04
s81 Built with art 3.02.03 canvas 3.07.03, canvas_root_io 1.03.03, gallery 1.12.03 Release Notes 3.02.03
s80 Built with art 3.02.02 canvas 3.07.02, canvas_root_io 1.03.02, gallery 1.12.02 Release Notes 3.02.02
s79 Built with art 2.12.01 canvas 3.06.00, canvas_root_io 1.01.10, gallery 1.08.05 Release Notes 2.12.01
s78 Built with art 3.01.02 canvas 3.05.01, canvas_root_io 1.02.02, gallery 1.11.02 Release Notes 3.01.02
s77 Built with art 3.02.01 canvas 3.07.01, canvas_root_io 1.03.01, gallery 1.12.01 Release Notes 3.02.01
s76 Built with art 3.02.00 canvas 3.07.00, canvas_root_io 1.03.00, gallery 1.12.00 Release Notes 3.02.00
s75 Built with art 3.01.01 canvas 3.05.01, canvas_root_io 1.02.01, gallery 1.11.01 Release Notes 3.01.01
s74 Built with art 2.12.00 canvas 3.06.00, canvas_root_io 1.01.10, gallery 1.08.05 Release Notes 2.12.00
s73 Built with art 2.11.05 canvas 3.03.04, canvas_root_io 1.01.09, gallery 1.08.04 Release Notes 2.11.05
s72 Built with art 2.11.04 canvas 3.03.03, canvas_root_io 1.01.08, gallery 1.08.03 Release Notes 2.11.04
s71 Built with art 3.01.00 canvas 3.05.00, canvas_root_io 1.02.00, gallery 1.11.00 Release Notes 3.01.00
s70 Built with art 2.11.03 canvas 3.03.03, canvas_root_io 1.01.08, gallery 1.08.03 Release Notes 2.11.03
s69 Built with art 3.00.00 canvas 3.04.00, canvas_root_io 1.01.07, gallery 1.09.00 Release Notes 3.00.00
s68 Built with art 2.11.02 canvas 3.03.02, canvas_root_io 1.01.06, gallery 1.08.02 Release Notes 2.11.02
s67 Built with art 2.11.01 canvas 3.03.01, canvas_root_io 1.01.05, gallery 1.08.01 Release Notes 2.11.01
s66 Built with art 2.10.04 canvas 3.02.03, canvas_root_io 1.01.03, gallery 1.07.03 Release Notes 2.10.04
s65 Built with art 2.10.03 canvas 3.02.02, canvas_root_io 1.01.02, gallery 1.07.02 Release Notes 2.10.03
s64 Built with art 2.10.02 canvas 3.02.02, canvas_root_io 1.01.02, gallery 1.07.02 Release Notes 2.10.02
s63 Built with art 2.10.01 canvas 3.02.01, canvas_root_io 1.01.01, gallery 1.07.01 Release Notes 2.10.01

See Historical qualifiers for older or non-functional members of this series.

Notes on inter-dependencies between packages with different qualifiers.

The following rules are born of the constraints placed by the compiler and linker on binary compatibility between separately compiled code.

  • A package containing C++ or modern (>77) Fortran must be matched by primary qualifier with its dependencies if there is a code link dependency between them unless:
    • The dependency contains FORTRAN 77 but no C++ or more modern Fortran, in which case (e.g.) e2 is compatible with gcc47 and e4 is compatible with gcc48.
    • The dependency contains no Fortran or C++, in which case it should have no primary qualifier and the packages are compatible.
    • The two primary qualifiers are known to be binary-compatible (e.g. e5 and i1).
  • Packages containing C++ with a code link dependency between them must be matched by debug|opt|prof qualifiers (code inlining).

Looking at the dependency list.

To see the full list of products used when building a particular package, use the ups depend command. Note that to ensure that the ups depend command examines the dependencies of the desired product, we use the + prefix in the example command lines below, otherwise another flavor might be substituted by the UPS tool instead. This has the effect of enforcing the rules described in the previous section, assuming the qualifiers have been assigned to each product consistently.

For instance:

% ups depend root v5_34_09b -q+e4:+prof
root v5_34_09b -f Linux64bit+2.6-2.12 -z /products -q e4:prof
|__fftw v3_3_3 -f Linux64bit+2.6-2.12 -z /products -q prof
|__libxml2 v2_9_1 -f Linux64bit+2.6-2.12 -z /products -q prof
|__xrootd v3_3_3 -f Linux64bit+2.6-2.12 -z /products -q e4:prof
|  |__gcc v4_8_1 -f Linux64bit+2.6-2.12 -z /products
|__python v2_7_5b -f Linux64bit+2.6-2.12 -z /products
   |__sqlite v3_08_00_02 -f Linux64bit+2.6-2.12 -z /products

% ups depend root v5_34_09b -q+e4:+prof:+nu
root v5_34_09b -f Linux64bit+2.6-2.12 -z /products -q e4:nu:prof
|__geant4 v4_9_6_p02 -f Linux64bit+2.6-2.12 -z /products -q e4:prof
|  |__clhep v2_1_3_1 -f Linux64bit+2.6-2.12 -z /products -q e4:prof
|  |  |__gcc v4_8_1 -f Linux64bit+2.6-2.12 -z /products
|  |__xerces_c v3_1_1 -f Linux64bit+2.6-2.12 -z /products -q e4:prof
|  |__g4emlow v6_32 -f NULL -z /products
|  |__g4neutron v4_2 -f NULL -z /products
|  |__g4neutronxs v1_2 -f NULL -z /products
|  |__g4nucleonxs v1_1 -f NULL -z /products
|  |__g4photon v2_3 -f NULL -z /products
|  |__g4pii v1_3 -f NULL -z /products
|  |__g4radiative v3_6 -f NULL -z /products
|  |__g4surface v1_0 -f NULL -z /products
|__fftw v3_3_3 -f Linux64bit+2.6-2.12 -z /products -q prof
|__pythia v6_4_28 -f Linux64bit+2.6-2.12 -z /products -q gcc48:prof
|__postgresql v9_1_5a -f Linux64bit+2.6-2.12 -z /products
|  |__python v2_7_5b -f Linux64bit+2.6-2.12 -z /products
|     |__sqlite v3_08_00_02 -f Linux64bit+2.6-2.12 -z /products
|__mysql_client v5_5_27 -f Linux64bit+2.6-2.12 -z /products -q e4
|__libxml2 v2_9_1 -f Linux64bit+2.6-2.12 -z /products -q prof
|__xrootd v3_3_3 -f Linux64bit+2.6-2.12 -z /products -q e4:prof

Historical qualifiers.