Skip to content

Ironclad-Project/Ironclad

Repository files navigation

Ironclad is a partially formally verified real-time kernel, with a small
footprint, for general-purpose and embedded OSes, written in SPARK and Ada.

Some of the supported features are:

- A familiar POSIX-compatible interface.
- True simultaneous multitasking.
- Resiliency and small footprint.
- Partial gold-level formal verification.
- Advanced cryptography and a security-centered architecture, including MAC.
- Hard real-time scheduling and real-time oriented features.
- Support for severals architectures and boards.

For more information about the project, some autogenerated documentation, bug
reporting, and development guides, check https://ironclad.nongnu.org

-- Building and testing --

The tools needed are:

- standard *nix tools including `find` and GNU make.
- autoconf and automake when not using a tarball (for `./bootstrap`).
- gprbuild for compilation, along with a compatible Ada compiler and assembler.
- GNU Info for building the documentation.
- highlight for syntax highlighting when building the HTML documentation.
- gnatprove for formal verification, if desired.

If checking out Git sources instead of building from a tarball, run
`./bootstrap` first.

For building the project's binaries, a standard configure-make-make install is
enough, like the following:

./configure
make
make check # If desired, will need gnatprove and perl.
make install

(Replace `make` with `gmake` or similar if necessary, on systems where GNU make
is not the default `make`).

Several flags are provided in configure for customizing kernel settings, one
can check them with ./configure --help.

The above would build Ironclad for the architecture of the host system; so for
example it would be built for x86_64 on an x86_64 host.
In order to cross compile Ironclad for a different architecture, one can use
the standard autoconf option `--host=` for `./configure`. For example:
`./configure --host=riscv64-linux-gnu` would build Ironclad for RISC-V 64-bit,
using the `riscv64-linux-gnu` toolchain.

Additionally, the optional `PLATFORM=...` variable can be passed to
`./configure` to tell the build system which platform/board to build Ironclad
for. So far, the only supported value for `PLATFORM` is `limine`, which is the
default.

Documentation will be generated and installed with the main executable in the
info format, additional formats can be built with `make html` or `make dvi`.

-- Contributing --

Thanks for considering contributing to Ironclad, it means a lot.

Please check <https://ironclad.nongnu.org/development.html> for information
on how to get started, and how to submit patches to the project.
========================================================================

Copyright (C) 2023-2024 streaksu

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts.  A copy of the license is included in the "GNU Free
Documentation License" file as part of this distribution.