Name

asdf:make-build — Block-build an ASDF system definition

Function

(asdf:make-build system-name &key type monolithic ld-flags prologue-code epilogue-code &allow-other-keys)

system-name

A symbol naming the system to be built. Only the symbol name is considered.

type

One of :FASL, :DLL, :LIB or :PROGRAM

monolithic

A boolean value.

ld-flags

A list of strings.

prologue-code

A string.

epilogue-code

A string or a lisp form.

Description

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.

Examples

See Section 1.3.