Updates to the Build system from seL4 10.1.x to 11.0.x

seL4_tools/cmake-tool

  • 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.