Skip to content

ch32v: framework field is ignored — noneos-sdk envs silently build the OpenWCH Arduino core (4 of 9 CI envs affected) #1108

Description

@zackees

Part of the CH32V pipeline audit (#1102).

What happens

The CH32V orchestrator never looks at the env's framework value — it unconditionally installs the OpenWCH Arduino core and compiles its cores/arduino sources (Ch32vCores in crates/fbuild-library/src/library/ch32v_core.rs, wired in crates/fbuild-build-mcu/src/ch32v/orchestrator.rs). grep -r noneos crates/ has zero hits.

Four of the nine CH32V CI test envs declare a non-Arduino framework:

env framework in platformio.ini what actually builds
tests/platform/ch32v103 noneos-sdk Arduino core
tests/platform/ch32v208 noneos-sdk Arduino core
tests/platform/ch32v303 noneos-sdk Arduino core
tests/platform/ch32x035 noneos-sdk Arduino core

Consistently, genericCH32V208WBU6.json and genericCH32V303VCT6.json don't even list arduino in their frameworks arrays — yet an Arduino-core firmware is what the CH32V208/CH32V303 badges are actually certifying.

Why it matters

  • A user porting a bare-metal noneos-sdk project from PlatformIO gets an Arduino build (different startup, main() owned by the core, setup()/loop() expected) with no warning — or a confusing wall of Arduino-core compile errors.
  • The A/B contract with PlatformIO diverges silently: PlatformIO's ch32v platform honors framework = noneos-sdk with a bare vendor-SDK build.

Suggested fix

Pick one and make it explicit:

  1. Validate: reject framework values the CH32V orchestrator doesn't implement with a clear error ("only framework = arduino is supported for ch32v today"), and change the four test envs (+ CI) to framework = arduino so the badges say what they test; or
  2. Implement a noneos-sdk build mode (compile system/<series>/SRC + user code only, no Arduino core).

Option 1 is the honest minimum. Also reconcile the frameworks arrays in the V208/V303 board JSONs with whatever is chosen.

Severity: MEDIUM (silent behavioral mismatch with the declared config and with PlatformIO parity; no data loss).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status
    Triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions