Qualifiers¶
- Table of contents
- 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 referenceMPICH
ethernet implementation of the MPI standard, or theMVAPICH
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 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.
Qualifier | Meaning | Canvas & Gallery | Notes |
s105 | Built with art_root_io 1.05.01 | canvas 3.09.02, canvas_root_io 1.07.01, gallery 1.16.01 | Release Notes 3.06.03 |
s104 | Built with art_root_io 1.05.00 | canvas 3.09.02, canvas_root_io 1.07.00, gallery 1.16.00 | Release Notes 3.06.03 |
s103 | Built with art_root_io 1.03.02 | canvas 3.09.02, canvas_root_io 1.05.03, gallery 1.14.04 | Release Notes 3.05.02 |
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.03 |
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 withgcc47
ande4
is compatible withgcc48
. - 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
andi1
).
- The dependency contains FORTRAN 77 but no C++ or more modern Fortran, in which case (e.g.)
- 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