"SfR Fresh" - the SfR Freeware/Shareware Archive

Member "root/README/BUILDSYSTEM" of archive root_v5.20.00.win32gcc.tar.gz:


As a special service "SfR Fresh" has tried to format the requested source page into HTML format using source code syntax highlighting with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
    1 THE ROOT BUILD SYSTEM
    2 =====================
    3 
    4 The new ROOT development system is based on Open Source tools like
    5 Subversion, configure and make.
    6 
    7 
    8 The Makefile
    9 ------------
   10 
   11 The ROOT Makefile has been structured as described in the paper:
   12 "Recursive Make Considered Harmful" [1]. The main philosophy is that
   13 it is better to have a single large Makefile describing the entire
   14 project than many small Makefiles, one for each sub-project, that are
   15 recursively called from the main Makefile. By cleverly using the include
   16 mechanism the single Makefile solution is as modular as the recursive
   17 approach without the problems of incomplete dependency graphs.
   18 
   19 The main Makefile includes for each sub-project a Module.mk file
   20 that provides definitions, rules and dependencies for the specific module.
   21 Adding a new module to the ROOT system involves creating a directory in
   22 the main ROOT directory for the module. The module directory, in turn,
   23 should have inc and src directories and a Module.mk file. To include the
   24 new module in the main Makefile you only have to add the line:
   25    MODULES += <new mod dir>
   26 
   27 The build configuration (controlling which optional modules will be
   28 build) is managed via the config/Makefile.config file, which is generated
   29 by the configure script. The platform specifics are described in the
   30 config/Makefile.<arch> file (the architecture is specified once via the
   31 configure script). Both these files are included by the main Makefile.
   32 
   33 The user can customize and override make definitions by providing his
   34 own MyConfig.mk file and add custom or modified rules via a MyRules.mk
   35 file. Some options in the config/Makefile.<arch> can be controled via
   36 the ROOTBUILD environment variable. Typically they all support the debug
   37 option:
   38    ROOTBUILD=debug
   39 Some others support additional options. For more see the makefiles.
   40 
   41 
   42 Targets
   43 -------
   44 
   45 The Makefile supports the following main targets:
   46 
   47 all:                             build complete system (default)
   48 
   49 fast:                            build complete system without creating
   50                                  the .d dependency files (good for just
   51                                  building the system with no further
   52                                  development)
   53 
   54 rootcint:                        build all CINT related components
   55 
   56 rootlibs:                        build all ROOT libraries (includes rootcint)
   57 
   58 rootexecs:                       build all ROOT executables (includes rootlibs)
   59 
   60 dist:                            make binary distribution .tar.gz file
   61 
   62 distsrc:                         make source distribution .tar.gz file
   63 
   64 clean:                           deletes all .o files
   65 
   66 distclean:                       deletes all files produced in the build
   67                                  (cleans and in addition removes all
   68                                  dictionaries, dependency files, etc.),
   69                                  leaves the files produced by configure
   70 
   71 maintainer-clean:                distclean + remove files produced by configure
   72 
   73 version:                         after manual update of the file
   74                                  build/version_number this will recreate the
   75                                  file base/inc/RVersion.h and recompile only
   76                                  base/src/TROOT.cxx
   77 
   78 importcint:                      import a new version of CINT into the cint
   79                                  directory. The new CINT tar file must be
   80                                  available as $HOME/cint. Any new or removed
   81                                  files are listed. Use this information to
   82                                  manually update the Subversion repository
   83 
   84 cintdlls:                        build all CINT add-on shared libs (dll's)
   85 
   86 html:                            generate the complete html documentation of
   87                                  the full ROOT system. Also hyperizes the
   88                                  README/ChangeLog file
   89 
   90 changelog:                       generate the README/ChangeLog file from
   91                                  information obtained by the "svn log" command
   92 
   93 install:                         install the root binary distribution to the
   94                                  locations specified via configure. Does
   95                                  nothing if $ROOTSYS is set to the build
   96                                  directory
   97 
   98 showbuild:                       show all macro definitions used during the
   99                                  build: compilers, compiler flags, optional
  100                                  modules, libraries, etc.
  101 
  102 redhat:                          build binary RedHat (rpm) packages
  103 
  104 debian:                          build binary Debian (pkg) packages
  105 
  106 
  107 For developers only:
  108 
  109 skip <obj or dictionary>:        skip all dependency checking and just
  110                                  generate the specified obj or dictionary file
  111 
  112 
  113 In addition each module has the following module specific targets:
  114 
  115 all-<module>                     builds all components specified in the
  116                                  Module.mk (library, executable, etc.)
  117 
  118 clean-<module>                   deletes all .o files produced in the module
  119 
  120 distclean-<module>               deletes all in addition to the .o files also
  121                                  all dictionary and dependency files
  122 
  123 
  124 Porting to a new platform
  125 -------------------------
  126 
  127 - add <platform> option to config/ARCHS
  128 - make a new config/Makefile.<platform>
  129 - add platform case to the file config/root-config.in
  130 - add platform case to the file test/Makefile
  131 - add platform case to base/inc/RConfig.h
  132 - add platform case to cint/inc/G__ci.h
  133 - add platform case to utils/src/rootcint.cxx
  134 
  135 
  136 Adding a new module
  137 -------------------
  138 
  139 - make a new module directory containing an inc and src directory
  140 - make a new Module.mk (use one of the existing Module.mk's as template)
  141 - add module name to the MODULES macro in the main Makefile
  142 - if optional module add option to configure script (with test for possible
  143   third party libraries)
  144 
  145 
  146 
  147 
  148 
  149 
  150 
  151 
  152 
  153 
  154 [1] http://www.tip.net.au/~millerp/rmch/recu-make-cons-harm.html