1 ****************************************************
3 * Flat makefile for AliRoot *
5 * This README describes how to use the *
6 * Makefile.flat for AliRoot *
8 * Author: Jan-Erik Revsbech <revsbech@fys.ku.dk> *
9 *****************************************************
13 Use these makefile with
20 As the name suggests this is a flat makefile structure for
21 Aliroot. That means that there is only one makefile for aliroot and
22 not as before on makefile for every package. This way the
23 Makefile.flat knows about all dependencies and does not have to
24 recursively go through all directories several time.
26 Instead of having a makefile for each package, all the packages have
27 one module.mk file. This file contains information about the package.
28 Each package can contain several libraries
29 and binaries to be made. The module.mk file is automatically created
30 by a script, by using a template. The script must know about what
31 files each desired library or binary consists of. This is specified
32 in .pkg files. For example a module in directory STEER could make two
33 libraries libSTEER and libSTEERDummy.so and one binary called
34 STEERTest. In this example the directory STEER would contain three
35 files: libSTEER.pkg, libSTEERDummy.pkg and binSTEERTest.pkg. These
36 files will contain information about which source and header files the
37 library or binary consists of and specific options. See the section package file for
38 further information about what the pkg files contains.
39 The libraries are put in the directory LIBPATH, set in Makefile.flat
40 and binaries in BINPATH. These directories are set to
41 bin/tgt_$ALICE_TARGET and lib/tgt_$ALICE_TARGET respectively.
42 In this example we would produce three outoutfiles called libSTEER.so,
43 libSTEERDummy.so and STEERTest. These names are created from the name
46 The module.mk files will be automatically generated by Makefile.flat
47 if they do not exist. Also the build/moudle.dep contains a list of
48 dependencies for the module.mk files. This means that for the above
49 example the build/module.dep would contain a line like this:
51 STEER/module.mk: libSTEER.pkg libSTEERDummy.pkg binSTEERTest.pkg
53 In this way if a change is made to one of the package-files (a
54 source-file is added or something), the module.mk file will be re-generated.
56 The Makefile.flat has in the start a variable called MODULES, this
57 variables lists all the subdirectories to look for module.mk files.
61 The .pkg files uses make syntax, so be careful with tabs!!!
63 As a minimum all package files must specify which source-code files and
64 headers it consist of. This is done with the variables
65 HDRS,SRCS,FSRCS,CSRCS which is Heades, C++ sources, Fortran sources
68 For example the Package libSTEERDummy.pkg could consist of
70 SRCS:= AliSTEERDummy.cxx
72 FSRCS:= AliSTEERFortranRoutines.f
74 HDRS:= AliSTEERDummy.cxx
76 Since the pkg files use make syntax HDRS can also be specified as
80 which is useful if there is a lot of files.
82 If the library (or binary) uses include files in other directories
83 than its own it should be specified in the variable EHDRS (for
84 External headers). By default the Makefile.flat will look in
85 $ALICE_ROOT, $ALICE_ROOT/MODULE (in this case $ALICE_ROOT/STEER),
86 $ROOTSYS/include and in $ALICE_ROOT/include. If more include
87 directories is needed it can be specified with the variable
88 EINCLUDE. *DO NOT* put the -I flag it will be put automatically, just
89 write the name of the directory. To have extra parameters passed to
90 the compiler (like macro defines) use the variable EDEFINE (see
91 libAliGeant4 for an example).
93 If the package exports any header files fo use by other libraries it can be put
94 in the variable EXPORT. These files will be copied to
95 $ALICE_ROOT/include and can be used by other libraries without directly
96 including this module.
98 If a root dictionary file is used it can be specified with
100 DHDR:= STEERLinkdef.h
102 This will be processed with rootcint with all the header-files
103 (specified in HDRS), and default cint includedir (set in CINTFLAGS)
104 plus the directories specified in EINCLUDE
106 By default all libraries are linked against libraries specified in
107 SHLIB and binaries against LIBS. If desired extra libraries can be
108 specified with the ELIBS variable. *DO NOT* specify the -l flag, just
109 write the library like
113 this will be translated into -lTPC
115 Extra library directories can be specified with ELIBSDIR
117 If very special compilation flags is needed it can be specified with
124 *WARNING* if these flags are set, the default FFLAGS,CXXFLAGS and CFLAGS
125 will be overwritten. Normally they will be used like this:
127 PACKCXXFLAGS:= $(filter-out -O%,CXXFLAGS)
129 This will set the C++ compiler-flags to the default ones, but without
132 ** LIST OF Variables in .pkg files **
151 ** ADDING NEW DIRECTORIES **
153 When adding a new direcotry you must make a new .pkg file. If your
154 library is going to be libEXAMPLE.so then make a new file called
155 libEXAMPLE.pkg in the new direcotry. Now you need to add this
156 direcotry to the Makefile.flat. Add it to the MODULES variable.
157 A last step is to edit the build/module.dep file. Add a line like
160 NEWDIR/module.mk: libEXAMPLE.pkg
162 Please let the module.mk file depend on all .pkg files in the new
163 directory. If you want aliroot to be linked against it, then edit
164 ALIROOT/binaliroot.pkg and add you new lirbrary to the ELIBS variable.