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/