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