Skip to content

Add Dockerfile - #124

Merged
pingdynasty merged 25 commits into
masterfrom
develop
Oct 24, 2026
Merged

pingdynasty merged 25 commits into
masterfrom
develop

Conversation

@pingdynasty

@pingdynasty pingdynasty commented Oct 24, 2026 •

Copy link
Copy Markdown
Collaborator

Adds a Dockerfile that creates a platform-specific (OWL1, OWL2 or OWL3) container with all tools required for compiling patches.
Also brings some older commits into master branch.

ddf and others added 25 commits February 16, 2022 19:28
fix for UpSampler::process
Print error message when platform not recognized
…e base

- Dockerfile: Ubuntu 20.04 + arm-none-eabi-gcc 9-2019-q4 + emsdk 2.0.10,
  reproducing the last stable toolchain (pre-GCC-13 freestanding breakage,
  issue #120). Builds ARM/native/web patches and passes unit tests.
- kb/: KNOWLEDGE_BASE.md, ISSUES.md, README.md
- .dockerignore to keep build context lean
- faust 2.20.2 (apt focal) for FAUST= patches
- soul 1.0.82 (prebuilt ROLI x64 binary) for SOUL= patches, symlinked to Tools/soul
- FirmwareSender built from pingdynasty/FirmwareSender for sysex/load/store,
  symlinked to Tools/FirmwareSender; added JUCE X11/GL/freetype build deps
- KB updated with the three tools, verified build matrix (FAUST->patch.bin,
  SOUL->patch.bin, FirmwareSender->patch.syx) and new gotchas

All period-appropriate to the ~2019-2020 'last stable' era, consistent with the
pinned arm-none-eabi-gcc 9-2019-q4 and emsdk 2.0.10.
…olution flake

./emsdk install 2.0.10 occasionally fails with 'No tool or SDK found by name
sdk-releases-upstream-...' when the emscripten-releases-tags lookup goes stale.
Install the resolved SDK name (hash 37fc7647...) directly, falling back to the
version alias, so the (slow) web-toolchain layer builds reliably. Verified with
a clean docker build of the full v1 image.
The pinned web toolchain (emsdk 2.0.10) ships ONLY x86_64 SDK bundles, so on an
arm64 host (Apple Silicon) 'emsdk install 2.0.10' failed immediately with
'No tool or SDK found by name sdk-releases-upstream-...-64bit' — the 2.0.10 tag
has no arm64 bundle. Pinning FROM --platform=linux/amd64 makes the build run
x86_64 under Docker Desktop's emulation on any host. Reverted the earlier
SDK-hash workaround, which addressed a release-tag flake that was not the actual
cause. Verified with a clean amd64 build.

The real root cause was architecture, not release-tag resolution.
make PATCHNAME=X patch now works in one shot — the patch libraries
(libowlprg.a/libdaisysp.a) are built at image-creation time via 'make libs'
(which needs only PLATFORM, no PATCHNAME). Because those archives are
platform-specific (Cortex-M4 for OWL1/2, Cortex-M7 for OWL3) and live at fixed,
non-platform-keyed paths, each image is pinned to ONE target:

  docker build --build-arg PLATFORM=OWL2 -t owlprogram:owl2-v1 .
  docker build --build-arg PLATFORM=OWL3 -t owlprogram:owl3-v1 .

Default PLATFORM=OWL2. Verified one-shot patch builds for OWL2 (6604 B) and
OWL3 (6100 B) — distinct sizes confirm the baked libs are per-platform.
The --platform=linux/amd64 pin is intentional (the x86_64-only toolchain can't
build native arm64), so hardcoding it is correct here. Add the BuildKit
'# check=skip=FromPlatformFlagConstDisallowed' directive (line 1) to suppress
the advisory warning rather than contorting FROM into a build-arg that would
make a bare 'docker build .' build native arm64 and fail on Apple Silicon.
Adds .github/workflows/docker-publish.yml. On a push to develop that touches
the Dockerfile (or the build makefiles/sources it bakes in), and on manual
dispatch, builds the build-environment image for each OWL platform via the
PLATFORM build-arg and pushes to ghcr.io/<owner>/owlprogram:

  :owl1 :owl2 :owl3   (per target)
  :latest             (= OWL2)

Uses the built-in GITHUB_TOKEN (no secrets to configure) and GHA layer caching
to speed up the slow FAUST/emsdk layers. amd64-only, matching the Dockerfile's
platform pin.
Replace the full-history 'git clone … && git checkout 2.0.10' with
'git clone --depth 1 --branch 2.0.10', pulling only the tagged revision's tree
(emsdk .git drops from tens of MB to ~650 KB) and dropping the separate
checkout. The heavy part — the ~930 MB SDK that ./emsdk install downloads — is
unchanged; this just trims the emsdk repo clone and speeds it up.
@pingdynasty
pingdynasty merged commit 764afb1 into master Oct 24, 2026
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants