The ChorusOS imake environment extends the make environment by providing template rules for common ChorusOS
build operations through generic names. When using those predefined imake rules, you do not need to know which libraries, crt
files, or entry points you should use to build an application,
as they are automatically selected for you.
Instead of creating Makefiles you must create Imakefiles, as imake will generate Makefiles from them.
The imake environment is defined by four files containing sets of variables and rules, located in the tools/imake directory. The rules are independent of the compiler you use.
Imake.tmpl contains definitions of variables.
Imake.rules contains build rules. See "imake Build Rules".
Package.rules contains the rules used to build a binary distribution.
The file Imake.tmpl contains the following definitions:
FAMILY, indicating the target family (x86, usparc, ppc60x, mpc860, mpc8260).
COMPILER, indicating the compiler to be used (gcc, for example).
REL_DIR, indicating the path of the current directory. This variable is automatically set in subdirectories by imake.
HOSTOS, indicating the host operating system (solaris, win32).
DEVTOOLS_DIR, indicating the path of the ChorusOS tools.
The file Imake.rules contains macros known as Imake build rules. Their name and function are described in Table 4-2.
Table 4-2 Imake build rulesMacro name | Function |
---|---|
MakeDir(dir) | Creates the directory named dir. |
LibraryTarget(lib, objs) | Adds the objects indicated by objs into the library lib. |
Depend(srcs) | Computes the dependencies of srcs and adds them to the dependency list in the Makefile (using makedepend). |
ActorTarget(prog, objs, options, crt0, libs) | Uses objs to create a C actor called prog, and passes options, crt0 and libs to the linker. |
UserActorTarget(prog, objs, libs) | Creates a user C actor. |
SupActorTarget(prog, objs, libs) | Creates a supervisor C actor. |
EmbeddedUserActorTarget(prog, objs, libs) | Creates an embedded user C actor. |
EmbeddedSupActorTarget(prog, objs, libs) | Creates an embedded supervisor C actor. |
BuiltinDriver(prog, objs, libs) | Creates a ChorusOS operating system driver. |
BspProgtarget(prog, entry, objs, libs) | Creates a BSP program. |
CXXActorTarget(prog, objs, options, crt0, libs) | Uses objs to create a C++ actor called prog, and passes options, crt0 and libs to the linker. |
CXXUserActorTarget(prog, objs, libs) | Creates a user C++ actor. |
CXXSupActorTarget(prog, objs, libs) | Creates a supervisor C++ actor. |
CXXEmbeddedUserActorTarget(prog, objs, libs) | Creates an embedded user C++ actor. |
CXXEmbeddedSupActorTarget(prog, objs, libs) | Creates an embedded supervisor C++ actor. |
DynamicUserTarget(prog, objs, libs, dynamicLibs, dlDeps, options) | Creates a dynamic user C actor. |
DynamicSupTarget(prog, objs, libs, dynamicLibs, dlDeps, options) | Creates a dynamic user C actor. |
DynamicCXXUserTarget(prog, objs, libs, dynamicLibs, dlDeps, options) | Creates a dynamic user C actor. |
DynamicCXXSupTarget(prog, objs, libs, dynamicLibs, dlDeps, options) | Creates a dynamic user C actor. |
DynamicLibraryTarget(dlib, objs, staticLibs, dynamicLibs, dlDeps, options) | Creates a dynamic library. |
Rules used to build actors use the following common arguments:
obj is the list of binary objects included in the actor.
prog is the name of the actor.
libs is the list of additional libraries used to build the actor. The actor is linked by default with the library to provide either the basic or extended environment.
The rules used to build dynamic actors are described in more detail in "Building a Dynamic Program".
The file Package.rules contains macros known as Imake packaging rules for building a binary distribution. Their name and function are described in Table 4-3.
Table 4-3 Imake packaging rulesMacro name | Function |
---|---|
DistLibrary(lib, dir) | Creates the directory dir and copies the library lib into it. |
DistActor(actor, dir) | Creates the directory dir and copies the actor actor into it. |
DistFile(file, dir) | Creates the directory dir and copies the file file into it. |
DistRenFile(file, nFile, dir) | Creates the directory dir, copies file into it, changing the name of file to nFile. |
DistProgram(program, dir) | Creates the directory dir and copies program into it. |