Files
foc/kernel/fiasco/src
..
2018-06-25 15:44:17 +02:00
2013-01-11 17:00:47 +01:00
2019-08-23 16:28:44 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2013-01-11 17:00:47 +01:00
2013-01-11 17:00:47 +01:00
2017-05-02 15:25:27 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2017-05-02 15:25:27 +02:00
2017-05-02 15:25:27 +02:00
2017-05-02 15:25:27 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2017-05-02 15:25:27 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2013-01-11 17:00:47 +01:00
2013-01-11 17:00:47 +01:00
2013-01-11 17:00:47 +01:00
2013-01-11 17:00:47 +01:00
2017-05-02 15:25:27 +02:00
2013-01-11 17:00:47 +01:00
2013-01-11 17:00:47 +01:00
2018-06-25 15:44:17 +02:00
2017-05-02 15:25:27 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00
2018-06-25 15:44:17 +02:00

 Fiasco's build system

 Michael Hohmuth

Motivation
##########

My main goal when I designed Fiasco's build system was to allow for
multiple configurations of the kernel, based on different
implementations of the same interface, to coexist in multiple object
directories.


Configuration
#############

Fiasco's build system consists of a number of configuration files. All
configuration files are written in Makefile language.

:src/Makefile:
  ``Fiasco's build system'' rules

:src/Modules.in:
  Standard configuration for Fiasco

:src/Makerules.*:
  Make rules for each subsystem defined in Modules

:src/Makerules.local':
  (Optional) User-specific configuration files

In the remainder of this section, I describe by example the language
used in Modules file and the contents of the Makerules.* files.

!SUBSYSTEMS = FOO BAR
!       # Defines two subsystems, FOO and BAR.  This means that there
!       # exist two files, Makerules.FOO and Makerules.BAR, that
!       # contain rules on how to build the targets of these
!       # subsystems.  These targets are defined later.
!
!### Definitions for subsystem FOO follow
!
!FOO = foo
!       # Defines the main target of subsystem FOO: a file named
!       # "foo".
!
!FOO_EXTRA = foo.man
!       # (Optional) Defines more targets that should be built for
!       # subsystem FOO.
!
!INTERFACES_FOO = foo1 foo2 foo3
!       # (Optional) C++ modules for subsystem FOO (written in
!       # `preprocess' format; see
!       # <URL:http://os.inf.tu-dresden.de/~hohmuth/prj/preprocess/>)
!       # Each module normally consists of one implementation file
!       # such as foo1.cpp -- unless IMPL definitions such as the
!       # following ones are given:
!
!foo2_IMPL = foo2 foo2-more
!       # (Optional) C++ module foo2 is implemented in two files
!       # foo2.cpp and foo2-more.cpp (instead of just foo2.cpp).  The
!       # public header file generated from these implementation files
!       # will be called foo2.h.
!
!foo3_IMPL = foo3-debug
!       # (Optional) C++ module foo3 is implemented in foo3-debug.cpp,
!       # not foo3.cpp.  The public header file generated from this
!       # implementation file will be called foo3.h.
!
!CXXSRC_FOO = frob1.cc frob2.cc
!       # (Optional) Additional C++ sources for subsystem FOO (not in
!       # `preprocess' format)
!
!CSRC_FOO = frob3.c frob4.c
!       # (Optional) Additional C sources for subsystem FOO
!
!ASSRC_FOO = frob5.S
!       # (Optional) Additional assembly-language sources for
!       # subsystem FOO
!
!OBJ_FOO = frob6.o
!       # (Optional) Additional objects for subsystem FOO.  These
!       # objects can be precompiled or generated using custom rules
!       # in Makerules.FOO.
!
!NOPROFILE += frob2
!       # (Optional) Basenames of objects that should not be compiled
!       # with profiling options in profiling builds.
!
!NOOPT += frob3
!       # (Optional) Basenames of objects that should not be compiled
!       # with optimization options.
!
!PRIVATE_INCDIR += incdir
!       # (Optional) Add incdir to the include path for all source
!       # files.  (This feature is implemented by l4/Makeconf.)
!
!VPATH += foodir
!       # (Optional) Add foodir to Make's source-file search
!       # path.  (This feature is implemented internally by Make.)
!
!### Definitions for subsystem BAR follow
!### (similar to FOO's definitions)


The Makerules.FOO file usually contains just rules for linking the
subsystem's targets.  Additionally, it must contain a rule
"clean-FOO:" that cleans the object directory from files created by
this configuration file.

It can access the following Make variables:

:'FOO', 'FOO_EXTRA':  
  names of targets

:'OBJ_FOO':
  expanded to contain _all_ objects that will be created for subsystem FOO

:'BAR':
  targets of other subsystems