Build Configuration

Relevant source files

This document covers the build system configuration for the arm_vgic crate, including package metadata, dependency management, and development workflow. It explains how the crate is compiled and integrated within the ArceOS hypervisor ecosystem.

For information about runtime dependencies and system integration, see Dependency Analysis. For architectural details about the components themselves, see Core Components.

Package Configuration

The arm_vgic crate is configured as a standard Rust library package using Cargo. The package metadata defines the basic build parameters and compilation target.

ConfigurationValuePurpose
Package Namearm_vgicCrate identifier for dependency resolution
Rust Edition2021Language feature set and compatibility
Package TypeLibraryCompiled as a library crate for integration

Build Targets and Artifacts

flowchart TD
subgraph subGraph3["Integration Points"]
    HYPERVISOR["ArceOS Hypervisor"]
    DEVICE_FRAMEWORK["axdevice_base"]
end
subgraph subGraph2["Build Artifacts"]
    RLIB["libarm_vgic.rlib"]
    METADATA["Crate Metadata"]
    TARGET_DIR["target/ directory"]
end
subgraph subGraph1["Cargo Build Process"]
    CARGO_BUILD["cargo build"]
    RUSTC["rustc compiler"]
    DEP_RESOLUTION["Dependency Resolution"]
end
subgraph subGraph0["Source Files"]
    SRC_LIB["src/lib.rs"]
    SRC_VGIC["src/vgic.rs"]
    SRC_VGICC["src/vgicc.rs"]
    SRC_CONSTS["src/consts.rs"]
    SRC_DEVOPS["src/devops_impl.rs"]
end

CARGO_BUILD --> DEP_RESOLUTION
CARGO_BUILD --> RUSTC
DEP_RESOLUTION --> RUSTC
DEVICE_FRAMEWORK --> DEP_RESOLUTION
METADATA --> TARGET_DIR
RLIB --> HYPERVISOR
RLIB --> TARGET_DIR
RUSTC --> METADATA
RUSTC --> RLIB
SRC_CONSTS --> CARGO_BUILD
SRC_DEVOPS --> CARGO_BUILD
SRC_LIB --> CARGO_BUILD
SRC_VGIC --> CARGO_BUILD
SRC_VGICC --> CARGO_BUILD

Sources: Cargo.toml(L1 - L18) 

Dependency Configuration

The crate's dependencies are configured to integrate with the ArceOS ecosystem and provide ARM virtualization capabilities. Dependencies are sourced from both Git repositories and crates.io.

Git Repository Dependencies

DependencySource RepositoryPurpose
axdevice_basegithub.com/arceos-hypervisor/axdevice_crates.gitDevice framework integration
axaddrspacegithub.com/arceos-hypervisor/axaddrspace.gitMemory management interface
arm_gicv2github.com/luodeb/arm_gicv2.git (rev: 2289063)Physical GIC hardware driver

Crates.io Dependencies

DependencyVersionPurpose
memory_addr0.3Memory address abstractions
axerrno0.1.0Error handling types
log0.4.21Logging infrastructure
spin0.9Synchronization primitives
flowchart TD
subgraph subGraph4["arm_vgic Build Dependencies"]
    VGIC["arm_vgic crate"]
    subgraph subGraph3["Source Locations"]
        GIT_REPOS["Git Repositories"]
        CRATES_IO["crates.io"]
    end
    subgraph subGraph2["System Utilities"]
        LOG["log"]
        SPIN["spin"]
    end
    subgraph subGraph1["Hardware Abstraction"]
        ARM_GIC["arm_gicv2"]
        MEMORY_ADDR["memory_addr"]
    end
    subgraph subGraph0["ArceOS Framework"]
        AXDEVICE["axdevice_base"]
        AXADDR["axaddrspace"]
        AXERRNO["axerrno"]
    end
end

ARM_GIC --> GIT_REPOS
AXADDR --> GIT_REPOS
AXDEVICE --> GIT_REPOS
AXERRNO --> CRATES_IO
LOG --> CRATES_IO
MEMORY_ADDR --> CRATES_IO
SPIN --> CRATES_IO
VGIC --> ARM_GIC
VGIC --> AXADDR
VGIC --> AXDEVICE
VGIC --> AXERRNO
VGIC --> LOG
VGIC --> MEMORY_ADDR
VGIC --> SPIN

Sources: Cargo.toml(L7 - L17) 

Development Dependencies and Optional Features

The configuration includes commented-out dependencies that indicate potential future integrations or alternative development paths.

Commented Dependencies

// vcpu_if = { path = "../vcpu_if" }
// crate_interface = "0.1.3"

These suggest:

  • Local development with a vcpu_if crate for CPU virtualization interfaces
  • Potential use of crate_interface for dynamic plugin systems

The current build configuration prioritizes direct integration with ArceOS framework components rather than abstract interface layers.

Sources: Cargo.toml(L14 - L15) 

Build Workflow

The standard development workflow follows Cargo conventions with specific considerations for the hypervisor development environment.

Development Commands

flowchart TD
subgraph subGraph3["Development Workflow"]
    DEV_START["Development Start"]
    subgraph Artifacts["Artifacts"]
        DEBUG_BUILD["Debug Build"]
        RELEASE_BUILD["Release Build"]
        DOCUMENTATION["Generated Docs"]
    end
    subgraph subGraph1["Integration Steps"]
        CLONE_DEPS["Clone Git Dependencies"]
        RESOLVE_VERSIONS["Resolve Version Constraints"]
        COMPILE_DEPS["Compile Dependencies"]
        LINK_ARTIFACTS["Link Final Artifacts"]
    end
    subgraph subGraph0["Build Commands"]
        CARGO_CHECK["cargo check"]
        CARGO_BUILD["cargo build"]
        CARGO_TEST["cargo test"]
        CARGO_DOC["cargo doc"]
    end
end

CARGO_BUILD --> CARGO_TEST
CARGO_BUILD --> CLONE_DEPS
CARGO_CHECK --> CARGO_BUILD
CARGO_DOC --> DOCUMENTATION
CARGO_TEST --> CARGO_DOC
CLONE_DEPS --> RESOLVE_VERSIONS
COMPILE_DEPS --> LINK_ARTIFACTS
DEV_START --> CARGO_CHECK
LINK_ARTIFACTS --> DEBUG_BUILD
LINK_ARTIFACTS --> RELEASE_BUILD
RESOLVE_VERSIONS --> COMPILE_DEPS

Build Environment Requirements

RequirementPurpose
Rust toolchainCompilation and dependency management
Git accessFetching Git-based dependencies
Network connectivityDownloading crates.io dependencies
ARM target supportCross-compilation for ARM platforms

Sources: Cargo.toml(L1 - L18)  .gitignore(L1) 

Git Configuration

The project includes basic Git configuration to exclude build artifacts from version control.

Ignored Paths

  • /target - Cargo build output directory containing compiled artifacts

This ensures that only source code and configuration files are tracked, while build outputs are regenerated locally.

Sources: .gitignore(L1)