This chapter describes how to build a ChorusOS system image from source code.
This section describes how to generate ChorusOS systems from unmodified source code. It is assumed here that you have already installed the source code version of the ChorusOS operating system.
The following procedure outlines the stages of the build process.
Create a build directory
Create a build (working) directory where ChorusOS binaries are built
Create the Makefile
Use the configure build tool in build_dir to create the build Makefile and supporting files.
See "Component Configuration" for information about configure and "Makefile" for an example of a Makefile.
Make the Makefile target
Make the default Makefile target defined in the build directory Makefile, using the make command. This creates configuration files for building the system image and associated executables.
Make other Makefile targets as necessary
Use make to make any other Makefile targets required; for example, the ChorusOS system image or the target board root file system.
Configuration
Configure the system image features, tunables and initialization files.
For full details of how to install a ChorusOS operating system, see the ChorusOS 5.0 Installation Guide. This section only addresses the build process after installation.
Depending on your target family, you will use different source code products. Each product has different installation directories. See the ChorusOS 5.0 Installation Guide for further details. The default path for a source package is source_dir.
For your convenience, create an environment variable to shorten your source path.
host% setenv SOURCE = /opt/SUNWconn/SEW/5.0-processor_family/chorus-family/src/ host% |
You receive source packages in read-only mode. Keeping source files in source_dir, separate from your work directory, has the following advantages:
It prevents the source code from being corrupted during a build.
It allows you to generate configurations for different target machines.
It permits several users to use the same source code simultaneously.
If you need to modify the source code, use your own copy of the initial source package.
Table 3-1 gives the profile and board-dependent components (such as BSP and boot) to be used with the configure command. The paths are given relative to source_dir.
Table 3-1 Board-dependent Components
Path |
Component |
---|---|
MCP7xx board | |
nucleus/sys/ppc60x/ppc60x | profile |
nucleus/bsp/powerpc/mcp7xx | bsp |
SBC8260 board | |
nucleus/sys/mpc8260/mpc8260 | profile |
nucleus/bsp/powerpc/sbc8260 | bsp |
MPC860 board | |
nucleus/sys/mpc860/mpc860 | profile |
nucleus/bsp/powerpc/mpc8xxADS | bsp |
CPxxx board | |
nucleus/sys/usparc/usparc | profile |
nucleus/bsp/usparc/cpxxx | bsp |
i386AT board | |
nucleus/sys/x86/x86 | profile |
nucleus/bsp/x86/i386at | bsp |
Table 3-2 lists the main source components in a ChorusOS source delivery and the associated directories which are created in your source directory during the installation process.
Table 3-2 Source Components and Associated Files
Component |
Directory |
Description |
---|---|---|
NUCLEUS |
source_dir/nucleus |
Generic microkernel code + family profiles |
DRV |
source_dir/nucleus/bsp/ |
Drivers |
BSP | source_dir/nucleus/bsp/family /target | Board specific boot code (BSP) |
OS |
source_dir/os |
Operating System (network, POSIX) |
This section describes how to generate a standard ChorusOS system image. Standard system generation builds a non-customized version of the operating system.
During the build you use the following commands:
Creates the build-tree Makefiles.
See the configure(1CC) man page for more information.
Makes the source, object and binary files.
See the make(1S) man page for more information.
Configures features
Configures features
Components are configured using rhe configure command. The configure command features three options:
Chooses the predefined profile for the PowerPC, ppc60x family, for example:
configure -f source_dir/mkernel/sys/ppc60x/ppc60xThis selects the
NUCLEUS
source component, containing a definition
of the variables for the build.
Selects the ChorusOS source components to be included in the build of your system image, for example:
configure -s source_dir/nucleus/bsp/powerpc/mcp7xx \ source_dir/nucleus/bspThe components included determine the identity of the image. In this case, you have included the boot and DRV components in source.
Includes binary components in your system image.
The configure command searches the directories specified by the -s and -b options for the Makefile.src and Makefile.bin files and any file corresponding to Makefile.*.src or Makefile.*.bin. The command displays each component as it adds it to the configuration. The configure command creates two files in build_dir, Makefile and Paths.
A system image is created from components you have configured using the configure command. The system image is created automatically, in four stages:
Selecting the System Image: Choose which of the configured components to include in your system. The system images are defined in:
The Makefile.bin file of the NUCLEUS
component:
source_dir/nucleus/sys/common/Makefile.bin
The conf directory:
build_dir/conf/mkimage/mkimage.xml
Once you have selected your system image, you can use the make command in two ways to build your system image:
Referencing the system image name:
host% make system_image_name
Building all configured components in your work directory:
host% make
The make command automatically performs steps 2, 3 and 4.
Compilation: The default action of make is to compile everything in your work directory, but not to produce a bootable system image. This is because configure might be used to build components which are not directly related to ChorusOS systems.
Compilation can last from 5 minutes to more than an hour, depending on the host you are using and the amount of new files being built. For the chorus system image, the make is as follows:
host% make chorus
Rebuilding the configurable components: If the configuration of the system has changed since the last make, some actors might need to be re-linked. The make command checks if any configurable actors require re-linking.
Running obj/act/pmm/Makefile build_dir/build-DEVTOOLS/host/bin/configurator -c build_dir/conf/ ChorusOS.xml -action configure Running obj/act/sysdump/Makefile Running obj/dbg/Makefile Running obj/kern/Makefile Running obj/chorus.sbin/cinit/hrCtrl/Makefile Running obj/chorus.sbin/cinit/rshd/Makefile Running obj/sys/Makefile
Building the System Image: Once the necessary actors have been re-linked, the make command calls mkimage. This generates the system image.
Start mkdrv Finish mkdrv Start mkimage Brief log file: build_dir/image/RAM/chorus/log.brief Verbose log file: build_dir/image/RAM/chorus/log.verbose Layout file: build_dir/image/RAM/chorus/layout.xml Image file: build_dir/chorus.RAM Finish mkimage
Once you have built your system image, build_dir contains a build directory for each source component included in the build.
The table below covers the standard build makefile targets you can make without altering the source code, from the top level Makefile in the work directory.
Table 3-3 Standard make Targets
Makefile Target |
Description |
|
---|---|---|
all (default ) |
Creates Embedded Component Markup Language configuration files in the conf subdirectory of the build directory |
|
build |
Rebuilds required object files according to the current build directory configuration |
|
chorus |
Compiles the required object files and then generates a system image file called chorus |
|
clean |
Removes object files and subdirectories from the build directory. This target is defined in the top level Makefile |
|
dist |
Produces a binary distribution |
|
kernonly |
Compiles the required object files and then generates a system image file called kernonly, containing no POSIX file system or networking layers |
|
root |
Builds the target root file system under the root subdirectory of the build directory, populating root with relocatable executable files that the target system can download and run |
|
reconfigure |
Extends the build directory configuration to include new components. This makefile target can be used after setting the options in the NEWCONF environment variable which are required for configuring the component into the system. For example, to add a component called my_app:
|
|
xml |
Rebuilds configuration files located in the conf subdirectory of the build directory |
Here are two examples of how to create a system image using the steps outlined above. It is presumed that you have already installed the binary and source components for your chosen family.
Create a work directory:
host% mkdir build_dir
Change to the work directory:
host% cd build_dir
Use the configure command with a build profile and a selection of components:
host% source_dir/dev_tools/configure \ -f source_dir/nucleus/sys/ppc60x/ppc60x \ -s source_dir/nucleus/bsp/powerpc/mcp7xx \ -s source_dir/nucleus/bsp \ -s source_dir/os \ -b DIST-CDS-powerpc-SOLARIS
Create a bootable system image:
host% make [...] host% make chorus
It is possible to generate a system containing only the generic microkernel code, board--specific drivers, and the generic microkernel driver component for a specific board. This system is called a kernonly System.
Create a work directory:
host% mkdir build_dir
Change to the work directory:
host% cd build_dir
Run the configure command:
host% sh source_dir/dev_tools/configure \ -f source_dir/nucleus/sys/ppc60x/ppc60x \ -s source_dir/nucleus/bsp/powerpc/mcp7xx \ -s source_dir/nucleus/bsp \ -b DIST-CDS-powerpc-SOLARIS
Create a bootable system image:
host% make [...] host% make kernonly
The following table describes the build directory layout resulting after a build of both a standard system image and a target root file system in the build_dir directory.
Table 3-4 Top Level Build Directory Layout
File or directory |
Description |
---|---|
build-BSP/ |
Build directory for the boot code |
build-DRV/ |
Build directory for drivers |
build-NUCLEUS/ |
Build directory for the microkernel |
build-OS/ |
Build directory for the POSIX system |
chorus.obp |
Executable system image file (.obp image files run on UltraSPARCTM family targets -- other file extensions exist for other targets) |
conf/ |
Contains configuration files, expressed in the Embedded Component Markup Language, for building system images and associated executables; also contains standard system profile files and a standard sysadm.ini system image initialization file |
Ident |
Uniquely identifies the components that put together the contents of the build directory |
image/ |
Contains files used during the creation of a system image, including temporary files, logs, symbol tables and relocated binaries |
Makefile |
Top level rules for generating build targets; includes Makefiles for each of the components used to generate build targets |
obj/ |
Contains configurable actors and make rules used to build system images and associated executables |
Paths |
Defines installation-dependent paths to components used to build system images and associated executables |
root/ |
Contains a complete file system for use on the target running the system image built in the same build directory; typically, root on the host is mounted at the root (/) on the target after the system is booted |
The make command creates a build directory, in build_dir, for each component included in the system image created. For example, build-BSP, build-NUCLEUS, and so on. Each build directory contains the binary code for the corresponding component.
The configure command creates the Paths file in build_dir. For each source component, the Paths file defines two subdirectories, one located in source_dir and one in build_dir.
The ChorusOS source code environment will not allow modification of any file outside your work directory. Consequently, regardless of where the source directories of a component are kept, they will be compiled in that component's subdirectory in build_dir. An example Paths file for UltraSPARC is shown in
BUILD_DIR=build_dir NUCLEUS=/install_dir/chorus-usparc/kernel NUCLEUS_DIR=/install_dir/chorus-usparc/kernel BSP=/source_dir/nucleus/bsp/usparc/cpxxxx BSP_DIR=build_dir/build-BSP DRV=/source_dir/nucleus/bsp DRV_DIR=build_dir/build-DRV OS=/install_dir/chorus-usparc/os OS_DIR=/install_dir/chorus-usparc/os FLITE=/install_dir/chorus-usparc/opt/Flite FLITE_DIR=/install_dir/chorus-usparc/opt/Flite DEVTOOLS=/install_dir/chorus-usparc/tools DEVTOOLS_DIR=/install_dir/chorus-usparc/tools CDS=/install_dir/chorus-usparc/tools CDS_DIR=/install_dir/chorus-usparc/tools CDS60=/install_dir/chorus-usparc/tools CDS60_DIR=/install_dir/chorus-usparc/tools CHSERVER=/install_dir/chorus-usparc/tools CHSERVER_DIR=/install_dir/chorus-usparc/tools CHTOOLS=/install_dir/chorus-usparc/tools CHTOOLS_DIR=/install_dir/chorus-usparc/tools EWS=/install_dir/chorus-usparc/tools EWS_DIR=/install_dir/chorus-usparc/tools
The Makefile produced using the configure command includes all the Makefiles for each component. An example of a Makefile for UltraSPARC is shown below:
all:: DEVTOOLS.all make = $(MAKE) ROOT = include Paths include /install_dir/chorus-usparc/kernel/Makefile.bin include /source_dir/nucleus/bsp/usparc/cpxxxx/Makefile.bin include /source_dir/nucleus/bsp/usparc/cpxxxx/Makefile.src include /source_dir/nucleus/bsp/Makefile.bin include /source_dir/nucleus/bsp/Makefile.src include /install_dir/chorus-usparc/os/Makefile.bin include /install_dir/chorus-usparc/opt/Flite/Makefile.bin include /install_dir/chorus-usparc/tools/Makefile.bin include /install_dir/chorus-usparc/tools/Makefile.CDS.bin include /install_dir/chorus-usparc/tools/Makefile.CHSERVER.bin include /install_dir/chorus-usparc/tools/Makefile.CHTOOLS.bin include /install_dir/chorus-usparc/tools/Makefile.EWS.bin COMPONENTS = NUCLEUS BSP DRV OS FLITE DEVTOOLS CDS CDS60 CHSERVER CHTOOLS EWS CLEAN = $(BSP_DIR) $(DRV_DIR) clean:; rm -rf $(CLEAN) DISTCLEAN = $(BSP_DIST) $(DRV_DIST) dist: BSP.dist DRV.dist distclean:; rm -rf $(DISTCLEAN) veryclean: clean distclean reconfigure: ; cd /build_dir; sh ../install/5.0-UltraSPARC/chorus-usparc/tools/configure -s ../install/5.0-UltraSPARC/chorus-usparc/kernel ../install/5.0-UltraSPARC/chorus-usparc/src/nucleus/bsp/usparc/cpxxxx ../install/5.0-UltraSPARC/chorus-usparc/src/nucleus/bsp -b ../install/5.0-UltraSPARC/chorus-usparc/os ../install/5.0-UltraSPARC/ chorus-usparc/opt/Flite ../install/5.0-UltraSPARC/chorus-usparc/tools $(NEWCONF)
The clean, dist, reconfigure, all and root makefile targets can be present in makefiles.
In the Makefile shown above, the all makefile target is followed by ::, meaning you can have multiple update rules. You must use :: if the make command is to work.
The top level Makefile in build_dir includes a Makefile.bin and a Makefile.src for each source component. You receive these files with your source delivery. This ensures the compatibility of components even if they are built using different development tools.
Below is an example of a Makefile.bin file, in
this case for the KTS
, or microkernel tests, component.
The Makefile.bin file identifies the component, and provides a list of components it requires to work.
The following example shows a Makefile.bin file for the C_OS, created using mkmerge. This is used to build the root tree.
#**************************************************************** # # Component = os # # Synopsis = # # Copyright 1999,2001 Sun Microsystems, Inc. All rights reserved. # #**************************************************************** # # #ident "@(#)Makefile.bin 1.16 01/10/03 SMI" # #**************************************************************** COMPONENT += OS ROOT += $(OS_DIR)/root $(BUILD_DIR)/obj/prebuild/os/root PREBUILD += $(OS_DIR)/prebuild OS.all:: NUCLEUS.all OS_XML = os.xml sys_rule.xml sys_action.xml cinit.xml cinit_action.xml hrCtrl.xml hrCtrl_action.xml OS_SYSADM = sysadm.ini xml:: DEVTOOLS.all $(OS_DIR)/exports.lst @sh $(DEVTOOLS_DIR)/cpxml $(BUILD_DIR)/conf/mkconfig $(OS_DIR)/conf/mkconfig $(OS_XML) @sh $(DEVTOOLS_DIR)/cpxml $(BUILD_DIR)/conf $(OS_DIR)/conf $(OS_SYSADM) @sh $(DEVTOOLS_DIR)/cpxml $(OS_DIR) $(OS) Makefile.bin root:: $(BUILD_DIR)/root/etc/resolv.conf $(BUILD_DIR)/root/etc/resolv.conf: @mkdir -p $(BUILD_DIR)/root/tmp @chmod ugo+rwx $(BUILD_DIR)/root/tmp @mkdir -p $(BUILD_DIR)/root/dev @mkdir -p $(BUILD_DIR)/root/image @mkdir -p $(BUILD_DIR)/root/etc @mkdir -p $(BUILD_DIR)/root/proc @mkdir -p $(BUILD_DIR)/root/var/run @mkdir -p $(BUILD_DIR)/root/var/log @mkdir -p $(BUILD_DIR)/root/var/db @chmod ugo+rwx $(BUILD_DIR)/root/var/run @chmod ugo+rwx $(BUILD_DIR)/root/var/log @touch $(BUILD_DIR)/root/var/log/messages @chmod ugo+rw $(BUILD_DIR)/root/var/log/messages @[ -f /etc/resolv.conf ] && cp /etc/resolv.conf $@ || touch $@ XML2 += mkconfig/os.xml
The following example shows a Makefile.bin file for the EXAMPLES component.
#**************************************************************** # # Component = examples # # Synopsis = # # Copyright 1999 Sun Microsystems, Inc. All rights reserved. # #**************************************************************** # # #ident "@(#)Makefile.bin 1.4 01/10/03 SMI" # #**************************************************************** COMPONENT += EXAMPLES ROOT += $(EXAMPLES_DIR)/root EXAMPLES.all::
The Makefile.src file is more complex than the Makefile.bin file, as it describes how the component is compiled using the mkmk tool.
The Makefile.src file for the KTS
component is shown below, as an example. The KTS
Makefile.src file provides following information:
It identifies the component
It identifies the dependency of KTS.all on the NUCLEUS component and on the DONE file. The DONE file is explained further in "DONE".
It provides information regarding compilation
The following example shows a Makefile.src for Flite, created using mkmerge.
#**************************************************************** # # Component = flite # # Synopsis = # # Copyright 1999,2001 Sun Microsystems, Inc. All rights reserved. # #**************************************************************** # # #ident "@(#)Makefile.src 1.9 01/10/03 SMI" # #**************************************************************** all:: FLITE.all FLITE.all:: $(OS_DIR)/exports.lst FLITE.all:: $(FLITE_DIR)/DONE $(FLITE_DIR)/exports.lst: rm -rf $(FLITE_DIR) $(DEVTOOLS_DIR)/host/bin/mkmerge -s $(FLITE) -t $(FLITE_DIR) $(FLITE_DIR)/Makefile: $(FLITE_DIR)/exports.lst rm -f $(FLITE_DIR)/Makefile cd $(FLITE_DIR); $(DEVTOOLS_DIR)/host/bin/mkmk -t $(NUCLEUS_DIR) $(FLITE_DIR)/DONE: $(FLITE_DIR)/Makefile sh $(DEVTOOLS_DIR)/resync FLITE -f $(FLITE) -s $(FLITE_DIR) cd $(FLITE_DIR); $(make) touch $(FLITE_DIR)/DONE FLITE_DIST = $(BUILD_DIR)/dist-FLITE FLITECP = lib FLITE.dist: FLITE.all rm -rf $(FLITE_DIST) mkdir -p $(FLITE_DIST) cp $(FLITE)/Makefile.bin $(FLITE_DIST) cd $(FLITE_DIR); cp -pr $(FLITECP) $(FLITE_DIST) ## $(OS_DIR)/DONE: $(FLITE_DIR)/DONE
The following example shows a Makefile.src for the drivers, created with Imake.
#**************************************************************** # # Component = drivers # # Synopsis = # # Copyright 1998,2001 Sun Microsystems, Inc. All rights reserved. # # #**************************************************************** # # #ident "@(#)Makefile.src 1.3 01/10/03 SMI" # #**************************************************************** MYDRV_SRC = $(MYDRV)/src all:: MYDRV.all MYDRV.all:: NUCLEUS.all MYDRV.all:: $(MYDRV_DIR)/DONE $(MYDRV_DIR)/DONE : $(MYDRV_DIR)/Makefile cd $(MYDRV_DIR); $(make) touch $(MYDRV_DIR)/DONE $(MYDRV_DIR)/Makefile: $(MYDRV_SRC)/Imakefile sh $(DEVTOOLS_DIR)/ChorusOSMkMf $(BUILD_DIR) -s $(MYDRV_SRC) -b $(MYDRV_DIR) -d $(MYDRV_DIR) cd $(MYDRV_DIR); $(make) Makefiles
Each component implements the component.all rule, which is defined in the component's Makefile.src file. This rule tells you what other components this component is dependent upon. The component.all rule in the Makefile.src implements the rule, building the component in its own build directory. If this first component depends on a second component, the dependency rule is expressed in the Makefile.src file of the first component, as shown below:
component1.all :: component2.all
If the dependency is valid only for the build process, the dependency rule is expressed in the Makefile.src file.
When a component is compiled correctly, its Makefile.src file creates a file called DONE in the build--COMPONENT directory. The DONE file prevents make from entering a component's build directory when there is nothing else to compile. If you run the make command, and the Makefile.src file has already created the DONE file, nothing will happen. These DONE files must be removed if a component has been modified, and the dependent components need to be re-linked.
For example, to remove the DONE file for the NUCLEUS
component:
host% rm -f build-NUCLEUS/DONE
Run make now and it will enter the NUCLEUS
component. Run the make command a second
time and you will get no output, as the DONE file is
now present.
The conf directory contains ECML files which describe the current ChorusOS configuration.
The ChorusOS.xml file is the top-level configuration file. It contains references to all other configuration files in the conf directory. When building the ChorusOS operating system from the source code, XML configuration files are copied from the various component source files into the conf directory.
The obj directory contains all necessary configurable actors. For example, the PMM component is compiled in build_dir/build-NUCLEUS. Its object files are copied into build_dir/build-NUCLEUS/obj and then linked in the build_dir/obj directory.
The image directory is used during the creation of a system image. The information contained within this directory includes temporary files, log files, symbol tables, and relocated binary files.
This section demonstrates the use of some optional build features.
You can delete any of the directories in build_dir during the generation process. If the directory is necessary, the make command will rebuild it. For example, you can remove the boot component and then run make, which will regenerate the component, if necessary.
host% rm -rf build-BSP/ host% make build
To return to a previous configuration, remove the conf directory, or some files from the conf directory. This returns the system to the default configuration or to the configuration you updated in the source configuration files. Even if you have not altered the configuration you can rebuild the conf files as follows:
host% rm -rf conf/ host% make xml
Binary distributions are prebuilt components that speed the compilation process. To build a binary distribution of the EXAMPLES component, make the EXAMPLES.dist makefile target.
host% make EXAMPLES.dist |
The EXAMPLES.dist makefile target creates an independent distribution of examples as a subdirectory, dist-EXAMPLES, of the build directory. This examples directory can be displaced and handled as a single entity, and used as directory of binaries with the -b option of the configure(1CC) build tool.
The reconfigure makefile target adds components to
an existing configuration. For example, you add the EXAMPLES
component to an existing system in build_dir, as
follows:
host% make reconfigure NEWCONF='-s source_dir/opt/examples' host% make
The root makefile target lets you copy files from components into the build_dir/root directory.
For example, as the EXAMPLES
component contains
binary files that the target machine must see, use the make root command to copy the binary files of the EXAMPLES
component into the build_dir/root
directory as follows:
host% make root
The build_dir/root directory
now contains the binary files of the EXAMPLES
component.
You can run this component on a target machine where build_dir/root can be NFS mounted.
Taking the EXAMPLES
component as an example,
to use the EXAMPLES
component's binary files, you
must remove the current configuration of that component. There is no specific
command to achieve this. Follow these four steps:
Edit the reconfigure rule at the end of the top-level Makefile by removing the following line in the source file:
-s source_dir/opt/examples
Remove the component's build directory and run make reconfigure:
host% rm -rf build-EXAMPLES/ host% make reconfigure
Add the application's binary files:
host% make reconfigure NEWCONF='-b dist-EXAMPLES'
Run the make command
host% make
To make all component builds in a build directory generate more messages, define a null macro, SILENT=, in the Paths file.
host% grep -i SILENT Paths host% echo 'SILENT=' >> Paths host% grep -i SILENT Paths SILENT= hosthost% make |
Once you have defined the null macro, SILENT=, builds generate status messages for every action taken.
To enable debugging for a component, you must build it with the FREMOTEDEB macro set to ON. When this macro is set in the paths file, it enables debugging information to be generated for all components.
host% grep -i FREMOTEDEB Paths host% echo 'FREMOTEDEB=ON' >> Paths host% grep -i FREMOTEDEB Paths FREMOTEDEB=ON host% make make-target host% make |
Components built with FREMOTEDEB=ON include debugging information and are therefore larger than components with FREMOTEDEB=OFF.
To force an unchanged component to be rebuilt, remove the DONE file created during the previous build. For example, to force re-compilation of all components previously built in the build directory:
host% cd build_dir host% find build_dir -name DONE -exec rm -f {} \; host% make |
The following table provides a quick reference for the tools used when managing ChorusOS system builds.
Table 3-5 Quick Reference to Host Development Tools
Tool |
Description |
---|---|
chgetlayout |
Extracts image layout, for DebugServer |
ChorusOSMkMf |
Creates Makefiles for target binaries using imake |
concat |
Concatenates files |
configure |
Configures a build directory |
configurator |
Handles configuration of features and tunables |
cpxml | Wrapper around cp, used to copy XML files |
cproot |
Copies files to the target file system |
ews |
JavaTM based, graphical system image configuration tool |
gcc |
The GNU cross compiler for building executables to be run on the target system |
genEnv |
Reads Makefiles and gives output with their variables |
getExport |
Computes the list of object files to use when creating a link |
getLayoutFile |
ghs compiler only |
HostMkMf |
Creates Makefiles for host development environment binaries using imake |
imake |
Standard project management tool for generating Makefiles based on rule specifications |
m4 |
The GNU macro preprocessor for C, assembler and other programming languages |
make |
Standard project management tool |
makedepend |
Generates dependencies |
mkctors |
Handles native ELF sections .ctors and .dtors when linking actors |
mkimage |
Creates a system image |
mkmake |
Provides a wrapper for make |
mkmerge |
Creates a merged directory tree from a split directory tree |
mkmk |
Native project management tool for generating Makefiles based on mkmk rule specifications |
mkstubs |
Produces system call stubs |
mksymfiles |
ghs compiler only |
rpcgen |
Serves as a remote procedure call protocol compiler |
Further descriptions of most tools described in the table are available in the ChorusOS man pages. Precompiled binary ChorusOS operating system tools are located in the tools/host/bin subdirectory of the installation directory.