asdf:make-build
— Block-build an ASDF system definition
(asdf:make-build
system-name) ⇒ &key) ⇒ type) ⇒ monolithic) ⇒ ld-flags) ⇒ prologue-code) ⇒ epilogue-code) ⇒ &allow-other-keys)
| A symbol naming the system to be built. Only the symbol name is considered. |
| One of :FASL, :DLL, :LIB or :PROGRAM |
| A boolean value. |
| A list of strings. |
| A string. |
| A string or a lisp form. |
This function takes a system definition which is known to ASDF and
builds one or more binary files, depending on the arguments. The possible
output files depend on the value of type
and are
summarized in Table 1.1.
Internally the function works similary to the
ASDF function asdf:oos
with the
asdf:load-op
operator. It finds out the requested
system definition, either by searching in a set of predefined locations or
because the system has been already loaded into memory, computes all
libraries and components this system depends on, builds them and then
produces the desired output.
If the value of :monolithic
is
NIL
the output binary will contain just the desired
system, while in other cases the output will be linked together with all
libraries your system depends on. Standalone executables, given by
type = :program
, must, by definition, be monolithic. All other
systems need not, but in that case you will have to manually satisfy the
required dependencies when using those files.
This function takes additional values which are related to the low
level details of the produced binaries. First of all we find
ld-flags
, a list of strings with arguments for the
object linker. You will only need this argument if you have to link your
programs with foreign libraries.
The next two arguments represent two pieces of code which are
executed before (prologue-code
) and after
(epilogue-code
) running your lisp code. The prologue
code is a string with C code which you will typically use to initialize
foreign libraries. It can only be C code because this code may be executed
even before ECL itself is initialized.
The epilogue code, on the other hand, can be either a string with C
statements or a lisp form represented as a list. In the case of executables
it conveniently defaults to a call to the toplevel
(SI::TOP-LEVEL)
, while in the case of libraries and FASL
files it is left empty.