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 "a1".

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 find explanations of the most common qualifiers used by UPS packages built for use by and with art, and their meanings:

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.
e2 Built with GCC 4.7.1, -std=c++11.
e4 Built with GCC 4.8.1, -std=c++11, -std=gnu (gfortran).
e5 Built with GCC 4.8.2, -std=c++11, -std=gnu (gfortran).
e6 Built with GCC 4.9.1, -std=c++1y, -std=gnu (gfortran).
e7 Built with GCC 4.9.2, -std=c++1y, -std=gnu (gfortran). Problems have been reported using e7 with XCode 7.x
e8 Built with GCC 5.2.0, -std=c++14, -std=gnu (gfortran).
e9 Built with GCC 4.9.3, -std=c++14, -std=gnu (gfortran). Please use e9 with XCode 7.x
e10 Built with GCC 4.9.3a, -std=c++14, -std=gnu (gfortran). GCC built with --enable-libstdcxx-time=rt instead of --enable-libstdcxx-time=yes
e11 Built with GCC v5.4.0, -std=c++14, -std=gnu (gfortran).
e12 Built with GCC v6.2.0, -std=c++14, -std=gnu (gfortran). Using new C++ library ABI only.
e13 Built with Apple's native clang compiler. Using an apple_clang product stub.
e14 Built with GCC v6.3.0, -std=c++14, -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.
e16 Built with GCC v7.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.
e18 Built with GCC v8.1.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.
c1 Built with Clang v5.0.0, -std=c++17, -std=gnu (gfortran from GCC 7.2.0). Using Clang 5.0 ABI. Depends on GCC 7.2.0 for gfortran (CC=clang, CXX=clang++, FC=gfortran), do not use!
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)
c3 Built with Clang v5.0.1, -std=c++17, -std=gnu (gfortran from GCC 7.3.0). Using Clang 5.0 ABI. Products depend on GCC 7.3.0 for gfortran where appropriate (CC=clang, CXX=clang++, FC=gfortran), do not use!
c4 Built with Clang v6.0.0, -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), EXPERIMENTAL!
c5 Built with Clang v6.0.1, -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), EXPERIMENTAL!
c6 Built with Clang v7.0.0rc3, -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), EXPERIMENTAL!
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)
i1 Built with Intel Compiler Suite 14.0.2 using GCC 4.8.2, -std=c++11 Claimed by Intel to be binary-compatible with the underlying GCC compiler used.
Note that this qualifier is also applied to the icc product-stub itself, where it indicates that the compiler will be set up with a GCC 4.8.2 personality. EXPERIMENTAL!

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

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.

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.
itbb Linked against an ICC-compiled TBB product. Important for offloading to e.g. Intel Mic-architecture accelerators.
nu Is or uses ROOT compiled with "nu" configuration The nu build of root depends on a number of products that are not used in any way by art.
Mutually exclusive with mu2e (see Historical qualifiers).
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
r5/r6 Can be optionally built with either root5 (r5) or root6 (r6) The exact root release is, as always, specified in the table file.
sN Built with a particular release of art use ONLY for products where the source code does not change, such as toyExperiment, artdaq_core, and ifdh_art
us Built with USolids Used when building geant4 v4_10_2_p0X with usolids from vecgeom

The boost package build procedure defines debug, release, and profile build variants. We use those settings rather than our own.

The sN qualifiers

Qualifier Meaning Canvas & Gallery Notes
s90 Built with art_root_io art_root_io:version:1.00.08 canvas 3.07.04, canvas_root_io 1.03.05, gallery 1.12.05 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
s62 Built with art 2.09.06 canvas 3.01.03, canvas_root_io 1.00.05, gallery 1.06.04 Release Notes 2.09.06
s61 Built with art 2.09.04 canvas 3.01.03, gallery 1.06.03 Release Notes 2.09.04
s60 Built with art 2.09.03 canvas 3.01.03, gallery 1.06.03 Release Notes 2.09.03
s59 Built with art 2.05.01 canvas 1.05.02, gallery 1.03.13 Special patch release for MicroBooNE
s58 Built with art 2.09.02 canvas 3.01.01, gallery 1.06.02 Release Notes 2.09.02
s57 Built with art 2.09.01 canvas 3.01.00, gallery 1.06.01 Release Notes 2.09.01
s56 Built with art 2.08.04 canvas 3.00.03, gallery 1.05.03 Release Notes 2.08.04
s55 Built with art 2.09.00 canvas 3.01.00, gallery 1.06.00 Release Notes 2.09.00
s54 Built with art 2.08.03 canvas 3.00.02, gallery 1.05.02 Release Notes 2.08.03
s53 Built with art 2.08.02 canvas 3.00.01, gallery 1.05.01 Release Notes 2.08.02
s52 Built with art 2.08.01 canvas 3.00.00, gallery 1.05.00 Release Notes 2.08.01
s51 Built with art 2.08.00 canvas 3.00.00, gallery 1.05.00 Release Notes 2.08.00
s50 Built with art 2.07.03 canvas 2.00.02, gallery 1.04.03 Release Notes 2.07.03
s49 Built with art 2.07.02 canvas 2.00.01, gallery 1.04.02 Release Notes 2.07.02
s48 Built with art 2.06.03 canvas 1.06.04, gallery 1.03.12 Release Notes 2.06.03
s47 Built with art 2.06.02 1.06.03 Release Notes 2.06.02
s46 Built with art 2.06.01 1.06.02 Release Notes 2.06.01
s45 Built with art 2.06.00 1.06.01 Release Notes 2.06.00
s44 Built with art 2.04.01 1.05.00 Release Notes 2.04.01
s43 Built with art 2.05.00 1.05.01 Release Notes 2.05.00
s42 Built with art 2.04.00 1.05.00 Release Notes 2.04.00
s41 Built with art 2.03.00 1.04.06 Release Notes 2.03.00
s40 Built with art 2.02.02a Special non-production build for Mu2e
s39 Built with art 2.02.02 1.04.05 Release Notes 2.02.02
s38 Built with art 2.02.01 1.04.04 Release Notes 2.02.01
s37 Built with art 2.02.00 1.04.03 Release Notes 2.02.00
s36 Built with art 2.00.03 1.03.03 Release Notes 2.00.03
s35 Built with art 2.01.02 1.04.02 Release Notes 2.01.02
s34 Built with art 1.17.08 Release Notes 1.17.08
s33 Built with art 2.00.02 1.03.02 Release Notes 2.00.02
s32 Built with art 2.00.01 1.03.01 Release Notes 2.00.01
s31 Built with art 1.18.05 Release Notes 1.18.05
s30 Built with art 1.17.07 Release Notes 1.17.07
s29 Built with art 1.18.04 Release Notes 1.18.04
s28 Built with art 1.17.06 Release Notes 1.17.06
s27 Built with art 1.18.03 Release Notes 1.18.03
s26 Built with art 1.17.05 Release Notes 1.17.05
s25 Built with art 1.18.02 Release Notes 1.18.02
s24 Built with art 1.17.04 Release Notes 1.17.04
s23 Built with art 1.18.01 Release Notes 1.18.01
s22 Built with art 1.18.00 Release Notes 1.18.00
s21 Built with art 1.17.03 Release Notes 1.17.03
s20 Built with art 1.17.02 Release Notes 1.17.02
s18 Built with art 1.16.02 Release Notes 1.16.02
s17 Built with art 1.16.01 Release Notes 1.16.01
s16 Built with art 1.16.00 Release Notes 1.16.00
s15 Built with art 1.15.02 Release Notes 1.15.02
s14 Built with art 1.15.01 Release Notes 1.15.01
s13 Built with art 1.15.00 Release Notes 1.15.00
s12 Built with art 1.14.03 Release Notes 1.14.03
s11 Built with art 1.14.02
s10 Built with art 1.14.01
s8 Built with art 1.13.02
s7 Built with art 1.13.01
s6 Built with art 1.12.05
s5 Built with art 1.12.04
s4 Built with art 1.11.03
s3 Built with art 1.10.00b
s2 Built with art 1.09.04
s1 Built with art 1.09.03

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.