Overview of (package-level) requirements to a build tool on example of CMT

Projects involved: tdaq, dqm-common, tdaq-common and LCGCMT, used in the listed order. TDAQ projects are located (along with many other projects used at P1) in /afs/cern.ch/atlas/project/tdaq/inst.

Policy packages

The most low-level package, adding some TDAQ-specific value to default CMT policy is


and a number of Make fragments in cmt/fragments/

In short, this policy allows for a developer to

> source setup.sh

> gmake && gmake inst && gmake check && gmake rpm

and get the build in the installed area (see different install_ patterns), execute unit check (including compilation against freshly built libraries) and build exportable RPMs (latter is used for the global release build, not from user's areas). Note that installation policy and patterns differ from the CMT ones. A local shell environment is also cooked here, allowing run apps from command line (but this is not used in runtime), favoring the local working area for the release.

Another package used by all other packages is TDAQCExternal which interfaces to LCG externals:


A simplest CMT package using these policies is


Other use cases to be covered later:

generation of C++ and java from IDL and use in libraries and apps

Provider package (also includes example of a specific configuration for ppc-rtems-rce405 platform):



Client package (it also includes example of a configuration specific to :


java build & install

generation of C++ and Java from custom schema (XML)

Another client package:


  • declares some macro sw.repository.* variables which are used by "release" package to build a release description.
  • defines what to be built depending on platform (CMTCONFIG)
  • calls tools provided by other packages:
    • as direct "action" is_generator.sh
    • as a document "generate-config"
    • includes ../src/mrs.idl as part of c++ and java libraries, using "language" provided by omni package (above)

The generated code is used later in java and c++ targets.

The package providing generate-config fragment used here to other packages:


Integration with Qt and ROOT

This package defines code generation from Qt (ui, moc files) and from ROOT header by running cint, then all code is used in the libraries:


build of third-party libraries coming with Makefile

This package is taken as is from Intel and it is built using original Makefile (with some tuning from CMTCONFIG) and then integrated into tdaq installation:

action build { cd ..; gmake DEBUG_SUFFIX= target= runtime=${runtime} arch=${build_arch} ${build_target}; }


cross-compilation for PowerPC

build of kernel drivers

Just calls a standard Makefile with some options


generation of s/w description in top-level package
Each package provides some meta-information about components it exposes. This information is gathered at the end of the build by DAQRelease package, and XML description of the whole s/w is generated.


This package also defines additional pattern (macros) which is used by RPM builder fragment when relocatable RPM package is built.

Edit | Attach | Watch | Print version | History: r5 < r4 < r3 < r2 < r1 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r5 - 2013-06-13 - AndreiKazarov
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    Sandbox All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2023 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
or Ideas, requests, problems regarding TWiki? use Discourse or Send feedback