blob: be2d11bd1ad2ec1697328517d48654e786e98bf6 [file] [log] [blame]
Project Structure
=================
The Hafnium repository contains Hafnium source code, along with testing code related to integration
tests, and unit tests.
To aid with the integration tests, the repository also contains a small client library
for partitions and prebuilt binaries of tools needed for the build and running the tests.
The build system is supported by `gn`_.
Each platform has a single associated architecture.
The source tree is organised as follows:
::
├── build
├── docs
├── inc
│   ├── hf
│   │   ├── arch
│   │   ├── plat
└── ffa
│   └── vmapi
│   └── hf
├── kokoro
├── prebuilts
├── project
├── src
│   ├── arch
└── ffa
├── test
│   ├── arch
│   ├── hftest
│   ├── inc
│   ├── linux
│   └── vmapi
├── third_party
├── tools
├── vmlib
└── out
- `build`: Common GN configuration, build scripts, and linker script.
- `docs`: Documentation.
- `driver/linux`: Linux kernel driver for Hafnium as the hypervisor, in the primary VM (More
details see legacy :ref:`Hypervisor` documentation).
- `inc`: Header files.
- `hf`: internal to Hafnium.
- `arch`: Architecture-dependent modules, which have a common interface
but separate implementations per architecture. This includes details
of CPU initialisation, exception handling, timers, page table management,
and other system registers.
- `plat`: Platform-dependent modules, which have a common interface but
separate implementations per platform. This includes details of the boot
flow, and a UART driver for the debug log console.
- `ffa`: Interface for FF-A features.
- `vmapi/hf`: for the interface exposed to partitions.
- `kokoro`: Scripts and configuration for continuous integration and presubmit checks.
- `prebuilts`: Prebuilt binaries needed for building Hafnium or running tests.
- `project`: Configuration and extra code for each project.
A project is a set of one or more platforms (see above) that are built
together. Hafnium comes with the `reference` project
for running it on some common emulators and development boards. To port
Hafnium to a new board, you can create a new project under this directory
with the platform or platforms you want to add, without affecting the core
Hafnium code.
- `src`: Source code for Hafnium itself in C and assembly, and unit tests in C++.
- `arch`: Implementation of architecture-dependent modules.
- `ffa`: Abstraction over SPMC/hypervisor specific implementation details of FF-A features.
- `test`: Integration tests
- `arch`: Tests for components of Hafnium that need to be run on a real architecture.
- `hftest`: A simple test framework that supports running tests standalone on bare
metal, in partitions under Hafnium. Also as user-space binaries under Linux, but these are
not yet integrated with system where Hafnium is the SPMC.
- `vmapi`: Tests which are run in minimal test partitions under Hafnium.
- `arch`: Tests which are rely on specific architectural details such as the GIC version.
- `primary_only`: Tests which run only a single (primary) partition.
- `primary_with_secondaries`: Test which run with a primary partition and one
or more secondary partitions to test how they interact.
- `third_party`: Third party code needed for building Hafnium.
- `vmlib`: A small client library for partitions running under Hafnium.
- `out`: Output directory for the build artifacts.
--------------
*Copyright (c) 2023, Arm Limited. All rights reserved.*
.. _gn: https://gn.googlesource.com/gn/