Build Framework
===============

The perf build framework was adopted from the kernel build system, hence the
idea and the way how objects are built is the same.

Basically the user provides set of 'Build' files that list objects and
directories to nest for specific target to be build.

Unlike the kernel we don't have a single build object 'obj-y' list that where
we setup source objects, but we support more. This allows one 'Build' file to
carry a sources list for multiple build objects.

a) Build framework makefiles
----------------------------

The build framework consists of 2 Makefiles:

  Build.include
  Makefile.build

While the 'Build.include' file contains just some generic definitions, the
'Makefile.build' file is the makefile used from the outside. It's
interface/usage is following:

  $ make -f tools/build/Makefile srctree=$(KSRC) dir=$(DIR) obj=$(OBJECT)

where:

  KSRC   - is the path to kernel sources
  DIR    - is the path to the project to be built
  OBJECT - is the name of the build object

When succefully finished the $(DIR) directory contains the final object file
called $(OBJECT)-in.o:

  $ ls $(DIR)/$(OBJECT)-in.o

which includes all compiled sources described in 'Build' makefiles.

a) Build makefiles
------------------

The user supplies 'Build' makefiles that contains a objects list, and connects
the build to nested directories.

Assume we have the following project structure:

  ex/a.c
    /b.c
    /c.c
    /d.c
    /arch/e.c
    /arch/f.c

Out of which you build the 'ex' binary ' and the 'libex.a' library:

  'ex'      - consists of 'a.o', 'b.o' and libex.a
  'libex.a' - consists of 'c.o', 'd.o', 'e.o' and 'f.o'

The build framework does not create the 'ex' and 'libex.a' binaries for you, it
only prepares proper objects to be compiled and grouped together.

To follow the above example, the user provides following 'Build' files:

  ex/Build:
    ex-y += a.o
    ex-y += b.o

    libex-y += c.o
    libex-y += d.o
    libex-y += arch/

  ex/arch/Build:
    libex-y += e.o
    libex-y += f.o

and runs:

  $ make -f tools/build/Makefile.build dir=. obj=ex
  $ make -f tools/build/Makefile.build dir=. obj=libex

which creates the following objects:

  ex/ex-in.o
  ex/libex-in.o

that contain request objects names in Build files.

It's only a matter of 2 single commands to create the final binaries:

  $ ar  rcs libex.a libex-in.o
  $ gcc -o ex ex-in.o libex.a

You can check the 'ex' example in 'tools/build/tests/ex' for more details.

b) Rules
--------

The build framework provides standard compilation rules to handle .S and .c
compilation.

It's possible to include special rule if needed (like we do for flex or bison
code generation).

c) CFLAGS
---------

It's possible to alter the standard object C flags in the following way:

  CFLAGS_perf.o += '...' - alters CFLAGS for perf.o object
  CFLAGS_gtk += '...'    - alters CFLAGS for gtk build object

This C flags changes has the scope of the Build makefile they are defined in.


d) Dependencies
---------------

For each built object file 'a.o' the '.a.cmd' is created and holds:

  - Command line used to built that object
    (for each object)

  - Dependency rules generated by 'gcc -Wp,-MD,...'
    (for compiled object)

All existing '.cmd' files are included in the Build process to follow properly
the dependencies and trigger a rebuild when necessary.


e) Single rules
---------------

It's possible to build single object file by choice, like:

  $ make util/map.o    # objects
  $ make util/map.i    # preprocessor
  $ make util/map.s    # assembly
