121 lines
3.7 KiB
Plaintext
121 lines
3.7 KiB
Plaintext
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
|