Co-authored-by: Taldariner <71024372+Taldariner@users.noreply.github.com> Reviewed-on: KolibriOS/cmm_apps#10
Continuous integration
Build C-- programs (workflows/build.yaml)
Runs on every push to main and on every pull request. It compiles
every C-- program in the repository and fails if any target stops
building, so a change that breaks compilation is caught before merge.
The compiler is not committed here. The job clones KolibriOS/cmm, builds
it with Makefile.lin32 and puts the result on PATH together with its
c--.ini, which is where the compiler looks for it. Building the tip of
the compiler on every run is deliberate: a compiler change that breaks a
program is caught here, before it is bumped into the OS tree.
The heavy lifting is in build.sh:
- it walks every
Tupfile.luaand reads the declared c-- rule, so the set of built programs stays in sync with the realtupbuild — add a program with aTupfile.luaand CI picks it up automatically; tup.foreach_rule("*.c", …)directories (examples/,misc/) build every source file, single-tup.ruledirectories build their one target;/D=AUTOBUILDand the/D=LANG_*define are applied exactly as theTupfile.luarequests;- a target is considered built only if c-- exits 0 and produced a
non-empty
.com; a crash or hang (the known heap-layout-dependent c-- flakiness) is caught by a per-compile timeout and retried up to 4 times before being reported as a failure.
Language variants LANG_ENG, LANG_RUS and LANG_SPA build in parallel.
Built programs are collected under dist/ named as KolibriOS ships them —
lowercase and without the .com extension — and published per language
(cmm-programs-LANG_ENG / cmm-programs-LANG_RUS), downloadable from the
run's Summary page for 14 days. They are not packed with kpack; the
OS build does that itself when it assembles an image.
Running it locally
# c-- on PATH:
./build.sh LANG_ENG
# or point CMM at a compiler built from KolibriOS/cmm:
CMM=/path/to/c--.exe sh build.sh LANG_ENG
Runner
The job uses the kolibri-toolchain runner, the same self-hosted runner
label as the main kolibrios build. It needs a working g++ and make
to build the compiler, and must be able to run the resulting 32-bit i386
binary (any x86-64 Linux with IA32 support).