Updates to the Build system from seL4 10.1.x to 11.0.x
dts.cmake
: Suppress output from dtc
unless it doesn’t produce an output file.
application_settings.cmake
: Disable kernel printing in release builds.
dts.cmake
: Use dts files from the kernel repository.
rootserver.cmake
: Support building RISC-V with gcc-8
.
- Split
common.cmake
into simulation.cmake
, cpio.cmake
and rootserver.cmake
.
- Remove
AddLegacyLibrary
function. This was used to wrap old build system libraries and is no longer used.
cpio.cmake
: Support constructing multiple CPIO archives within the same build directory.
- Style all CMake files and python scripts.
- Add
make.cpio
module with MakefileDepsToList
, create_depfile_by_find
and execute_process_with_stale_check
helpers.
These helpers add mechanisms for not re-running expensive execute_process
commands during build
configurations if inputs to the command are not stale.
- Add
cmakerepl
script for inline debugging of CMake scripts.
- Add
debug.cmake
that adds set_break()
CMake function for limited CMake variable inspection.
- Add
griddle
tool to enable easy build scenarios:
- Automatically add additional CMake initialization flags on first init.
- Present project build configuration options based on an
easy-settings.cmake
file.
- Detect when
CMakeCache.txt
file is unstable and re-run cmake until it stabalizes.
- Inform user about config stability.
- Provide a
--platform-hel
option for listing all kernel supported platforms.
- Handle platform toolchain configuration requirements.
init-build.sh
: tidy script and remove bash-isms to make POSIX-compliant.
rootserver.cmake
: Support uimage
format for ArmV7 platforms.
- Add scripts in
helpers/
to CMAKE_MODULE_PATH
and support importing on demand.
cakeml.cmake
: Add support for multiple CakeML libraries within a project.
Holmake
doesn’t support concurrent builds of different projects, so multiple builds need to be serialized.
- Add
platform_sift.py
script for extracting platform memory region descriptions from a YAML file outputted by kernel build.
init-build.sh
: Remove multiple CMake invocations and only call CMake once.
application_settings.cmake
: Add correct_platform_strings
for converting conventional -DPLATFORM
values to
valid KernelPlatform
and KernelSel4Arch
settings.
flags.cmake
: Use the runtime objects from sel4runtime
rather than musl
.
flags.cmake
: Always use __aeabi_read_tp
for aarch32 by setting -mtp=soft
.
- Require
-C settings.cmake
for initializing CMake projects.
This supports the new build structure where instead of blindly including
every settings.cmake
file in every projects/
folder, we instead require a single settings.cmake
file to be passed in.
- Add
check_arch_compiler.cmake
. This triggers errors if the incorrect compiler is selected.
- Add
nanopb.cmake
for nanopb support.
rust_targets
: Update x86_64-target.json
to new format.
application_settings.cmake
: ApplyData61ElfLoaderSettings
RISCV support.
- Add
elf_sift.py
script for computing ELF image loadable segment sizes.
- Add
shoehorn.py
script for computing load addresses of Elfloader, Kernel and User images in memory.
- Add
make-uimage
script to extract the entry point (start symbol) of an ELF executable and wrap the object in a
chain-loadable payload for use by the U-Boot boot loader.
Holmakefile.in
, buildScript.sml.in
, cakeml.cmake
: Update CakeML build scripts for newer CakeML version.
simulate.py
: Add tput reset
to end of Qemu command for when Qemu leaves the terminal in an inconsistent state.
- Remove global
Configuration
CMake library. Each build artifact should instead control its own configuration dependencies.
- Add
environment_flags.cmake
module for use in modules that are used for defining system environment build flags.
- Move
musllibc
rules from flags.cmake
to Findmusllibc.cmake
CMake module and merge remainder of flags.cmake
with base.cmake
.
- Mark CMake cache variables advanced by default and allow final project configuration to explicitly show options in the
ccmake
GUI.
init-build.sh
: Support alternative build structure where the top-level CMakeLists.txt
project file is not located in the top level directory.
- Move
ccache
settings to compiler toolchain files.
cpio.cmake
: Change strategy for constructing cpio archive object file to use linker instead of objcopy.
simulation.cmake
: Add new qemu-arm-virt
platform simulator options with hyp support.
rust_targets
: add aarch64-sel4-none.json
target file for Aarch64 rust targets.
kernel
- Add functions for querying all kernel platform names and architectures.
- Add
check_outfile_stale
macro.
This checks if a file is older than other files during CMake configure
phase. This is to prevent unnecessary long running execute_process
calls.
- Style all CMake and python files.
- Add
FORCE
to all INTERNAL
sets.
INTERNAL
implies FORCE
but in some versions of CMake if a config option
has been passed in via a -D option the INTERNAL
set doesn’t override the
value when it should.
See: https://gitlab.kitware.com/cmake/cmake/issues/19015 -
INTERNAL
does not imply FORCE
for CACHE
.
- Update
python2
–> python3
in build scripts.
- Invoke verified configuration files to build kernel with verified configurations.
- Add
SEL4_CONFIG_DEFAULT_ADVANCED
CMake variable. If set then all cache variable
declarations get marked as advanced by default.
- Add device trees for every Arm and RISC-V platform.
- Use per-config device tree overlays to customize platform layouts for different build configurations.
- Auto-generate hardware headers describing Arm and RISC-V platforms. Use these headers
for creating Untyped objects and Kernel device binding and export YAML memory region
file for use by other projects in build system.
sel4_deps
: Add pyfdt
, cmake-format
, guardonce
, pyelftools
, autopep8
, jsonschema
and libarchive-c
to seL4 python package. Change pyaml
to pyyaml
.
- Automatically select serial and timer drivers based on device trees.
- Remove
kernel_astyle.sh
in favour of using style scripts in sel4_tools
.
- Use device tree
chosen
node to specify kernel devices with seL4,kernel-devices
property.
- Add
reciprocal.py
for calculating constants for reciprocal division used in MCS kernel.
- Add
seL4Config.cmake
module to kernel configurations folder for use in CMake -C
configuration scripts.
This enables picking kernel platform settings before any projects are configured and also allows
automatically picking the right toolchain files.