Add an OpenWrt package for udpspeeder-simd
- Status: planned
- Persona: Ingrid (OpenWrt feed maintainer)
- Serves: https://github.com/openwrt/packages/issues/28562
- Scope: the
packagesandudpspeeder-simdcomponents - Package maintainer: David Connolly david@connol.ly
- Target: OpenWrt master for the first pull request; a release-branch backport is constrained by policy (see the rules below)
- Decisions:
call/0004(coexist, dynamic linking),call/0005(build adjustments in the fork)
Why
The issue at https://github.com/openwrt/packages/issues/28562 asks for the
performance-optimised UDPspeeder on low-end devices; the reporter's target is
ath79/generic, a MIPS 24Kc core. UDPspeeder-simd is that optimised fork. Rather
than repoint the existing net/udpspeeder package at a fork, this milestone adds a
separate net/udpspeeder-simd package that coexists with udpspeeder.
On ath79 the gain comes from the portable word-width XOR and the portable
Reed-Solomon speedups, not from SIMD. The source carries no MIPS SIMD path, and
none is worthwhile on the 24Kc core (MSA is absent on that core, and its optional
DSP ASE targets fixed-point math rather than vector XOR).
OpenWrt maintainer rules this milestone follows
From the feed's CONTRIBUTING.md (pinned in the packages worktree) and
https://openwrt.org/docs/guide-developer/packages :
- Pin the source to a fixed commit or tag with a
PKG_MIRROR_HASH, never a branch head or a "latest" archive. This is also what the issue requests. PKG_MAINTAINERis a real name and a real, public email (David Connolly david@connol.ly). A GitHub noreply address is rejected.PKG_LICENSEis the SPDX identifierMIT, withPKG_LICENSE_FILESnaming the license file (LICENSE.md) in the fork.PKG_RELEASEstarts at 1.- No dependencies outside the OpenWrt core packages or this feed.
- Each pull-request commit subject is prefixed with the package name
(
udpspeeder-simd: add package) and carries aSigned-off-bythat matches the author (a real name and a public email), with no automated co-author trailer (the packages rule incall/0003). The sign-off is the DCO, which is separate from the co-author trailer. - A
test.shbeside the Makefile lets the OpenWrt CI runtime-test the package on its supported architectures. - Release branches (
openwrt-XX.YY) take only security and bug fixes. Adding a new package to a release branch is against policy, so a backport is not a routine cherry-pick (see#backports).
Design decisions
- Interop (
call/0004): a distinct packageudpspeeder-simdwith distinct paths (/usr/bin/udpspeeder-simd,/etc/config/udpspeeder-simd,/etc/init.d/udpspeeder-simd), no file clash withudpspeeder, noCONFLICTS. - Linking (
call/0004): dynamic, withDEPENDSon the shared libraries the binary needs, like the existingudpspeeder. No static build. A static C++ binary is larger on flash, which works against the low-end devices this issue targets, and static linking runs against OpenWrt's shared-library model. - Build adjustments (
call/0005): they live in the fork's makefile, after which the.host-softwarepin is updated. The fork commits keep the normal sign-off and co-author trailer; only the packages repo drops the trailer. In practice no fork change was needed: the feed'scc_crossand gitversion Build/Prepare sufficed. - SDK for local validation: the public prebuilt x86_64 snapshot SDK (the one OpenWrt
CI uses), not a from-source build (
make worldproved excessive for this). The embeddedopenwrtcomponent stays but is not required for this path. Local validation covers x86_64; multi-architecture, includingath79/generic, runs in the CI lane. Snapshot OpenWrt packages are.apk, not.ipk. - CI validation (
#ci-sdk-lane): lives in the host repo (.github/workflows/udpspeeder-simd-sdk.yml), never in the openwrt PR, so the PR stays a discrete package addition. It builds the fork's package branch against the current snapshot SDK forx86/64andath79/generic. - Release users (
#backports): OpenWrt policy blocks a new package on release branches, so there is no backport.docs/udpspeeder-simd-on-openwrt-releases.mdshows a developer or power user how to self-apply it with a release SDK or buildroot.
Build sequence
Make the fork build cleanly across architectures
- verify: attested operator
Author the udpspeeder-simd feed package Makefile
- depends: #fork-build
- verify: attested operator
Author the service integration
- depends: #feed-package
- verify: attested operator
Add the runtime test script
- depends: #feed-package
- verify: attested operator
Add the OpenWrt SDK build lane to CI
- depends: #feed-package
- verify: attested operator
Confirm polite interop with the udpspeeder package
- depends: #service-integration
- verify: attested operator
Open the pull request to OpenWrt master
- depends: #interop, #test-script
- verify: attested operator
Evaluate a release-branch backport under policy
- depends: #pr
- verify: attested operator
Take upstream's cross_cxx merge into both packages
- depends: #pr
- verify: attested operator