Build System

Comprehensive guide to the Nexus build system based on CMake, covering configuration, building, and customization.

Overview

The Nexus build system uses:

  • CMake: Cross-platform build system generator

  • Python Scripts: Build automation and tooling

  • Kconfig: Configuration management

  • Ninja/Make: Build backends

Key features:

  • Multi-platform support (native, STM32, NRF52, etc.)

  • Multiple build types (debug, release, minsizerel)

  • Modular architecture

  • Dependency management

  • Testing integration

  • Code coverage support

Quick Start

Basic Build

# Build for native platform (default)
python scripts/building/build.py

# Build for specific platform
python scripts/building/build.py --platform stm32f4

# Build with specific type
python scripts/building/build.py --build-type release

# Clean build
python scripts/building/build.py --clean

Build Options

# Enable verbose output
python scripts/building/build.py --verbose

# Parallel build (4 jobs)
python scripts/building/build.py --jobs 4

# Build specific target
python scripts/building/build.py --target hal_gpio

# Generate compile_commands.json
python scripts/building/build.py --export-compile-commands

CMake Structure

Project Layout

nexus/
├── CMakeLists.txt              # Root CMake file
├── cmake/
│   ├── platforms/              # Platform configurations
│   │   ├── native.cmake
│   │   ├── stm32f4.cmake
│   │   └── nrf52.cmake
│   ├── toolchains/             # Toolchain files
│   │   ├── gcc-arm-none-eabi.cmake
│   │   └── clang.cmake
│   ├── modules/                # CMake modules
│   │   ├── Coverage.cmake
│   │   ├── Testing.cmake
│   │   └── Documentation.cmake
│   └── utils.cmake             # Utility functions
├── hal/
│   └── CMakeLists.txt          # HAL build configuration
├── osal/
│   └── CMakeLists.txt          # OSAL build configuration
├── framework/
│   └── CMakeLists.txt          # Framework build configuration
└── applications/
    └── CMakeLists.txt          # Applications build configuration

Root CMakeLists.txt

cmake_minimum_required(VERSION 3.20)

project(Nexus
    VERSION 1.0.0
    LANGUAGES C CXX
    DESCRIPTION "Nexus Embedded Platform"
)

# Set C standard
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)

# Include CMake modules
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(utils)

# Platform configuration
if(NOT DEFINED PLATFORM)
    set(PLATFORM "native" CACHE STRING "Target platform")
endif()

include(platforms/${PLATFORM})

# Build configuration
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type" FORCE)
endif()

# Add subdirectories
add_subdirectory(hal)
add_subdirectory(osal)
add_subdirectory(framework)
add_subdirectory(applications)

# Testing
if(BUILD_TESTING)
    enable_testing()
    add_subdirectory(tests)
endif()