Skip to content

Releases

v0.0.57

Choose a tag to compare

@siracozmen01 siracozmen01 released this 05 Nov 15:50
374693e
  • cmake/CompilerFlags.cmake turns the unsafe floating-point optimizations off one by one, -fno-associative-math -fno-reciprocal-math -fsigned-zeros, in place of -fno-unsafe-math-optimizations (#129). In Clang 19 and later that flag also turned trapping math on, which put every Clang build in strict floating-point exception mode, against the file's own comment, and stopped every file on 32-bit ARM under warnings as errors. GCC's options are unchanged.

A library syncing takes this tag. Measured before release: maul-rhi's objects are byte-identical on linux-clang-20 and it now builds for armeabi-v7a; maul-audio's goldens, bake, voice and EQ figures and the objects of its two files with libm on constants are identical. A library with src/fpenv.c still refuses 32-bit ARM by design, since its float environment is known only on x86, AArch64 and WebAssembly.

v0.0.56

Choose a tag to compare

@siracozmen01 siracozmen01 released this 05 Nov 12:26
b25a960
  • cpp.yml takes a new input, download-keys: a glob of the files that pin what the build downloads by version and SHA-256 (#127). When it is set, the job tells the build where to keep its downloads (MAUL_DOWNLOAD_DIR), restores that folder from a cache keyed by the runner, the preset and those files, and saves it on main pushes when the restore missed. A glob that matches no file fails the job. Empty by default, so every current caller runs as before.

A caller passes the folder to FetchContent's DOWNLOAD_DIR after converting it with cmake_path(SET ...), since GitHub gives a Windows path with backslashes. The build still checks each kept file against its pinned hash.

v0.0.55

Choose a tag to compare

@siracozmen01 siracozmen01 released this 05 Nov 12:24
b0d09a4
  • tools/fuzz_target.sh keeps up to five FILE:LINE: expectation failed: ... lines in a finding's report, read from the same part of the log above libFuzzer's first input dump as the sanitizer lines (#128). A harness whose check prints in that form now shows in CI which promise broke and with what values; a harness that prints nothing reports as before.
  • docs/internals/maul-conventions.md names that form: a harness's failure message names the broken promise and the values that broke it, never the input's bytes.

A library syncing takes this tag. Nothing changes for a library until its harness prints in that form.

v0.0.54

Choose a tag to compare

@siracozmen01 siracozmen01 released this 05 Nov 02:04
b52e9f7
  • src/cpu.h (renamed file) includes @LIB@/base.h and marks @P@IsCpuBackendSupported and @P@CheckCpu with @PP@_NODISCARD (#126), so a library carrying it passes tools/check_nodiscard.py from v0.0.53. maul2d, maul3d and maul-anim carry it.

A library syncing for the nodiscard check takes this tag rather than v0.0.53. A shared build of a library whose public base.h declares the two functions now compiles cpu.c with that declaration in view; its exports test shows any change.

v0.0.53

Choose a tag to compare

@siracozmen01 siracozmen01 released this 05 Nov 01:59
49775fd
  • tools/check_nodiscard.py, new (#124): every internal function returning bool carries the library's <PP>_NODISCARD, every one in a src/ header and every static one in a source file, parts in tools/source-dirs.txt included. It reads the library's macro from base.h, takes standard attributes and the two-line bool / name( shape clang-format writes, and fails on a bool declaration in any other shape. Run it with --self-test and without in check.sh's rules step.
  • maul-conventions.md states the rule and lists the check.
  • src/inflate.c, src/elementary.c and src/elementary_float.c (renamed files) mark their static bool functions; the two elementary files include @LIB@/base.h.

Each library takes these by syncing to this tag, wires the check into check.sh, and marks its own bool functions in the same pull request, with (void) where a drop is deliberate.

v0.0.52

Choose a tag to compare

@siracozmen01 siracozmen01 released this 05 Nov 00:35
c7b0f19
  • cmake/Testing.cmake: maul_add_header_tests also checks, in C23, that the library's <PP>_NODISCARD is not empty (#122). GCC 14 reports its C23 as __STDC_VERSION__ 202000L, so a macro that waited for 202311L was empty there and a dropped status went unwarned. Every library's main already passes; a library that went back to the old test now fails its header tests.
  • maul-conventions.md says how the nodiscard macro reads C dialects and that the header tests check it in C23 and C++17.

Each library takes both files by syncing to this tag.

v0.0.51

Choose a tag to compare

@siracozmen01 siracozmen01 released this 04 Nov 01:37
972ea41
  • maul-conventions.md: the rule on state a caller holds (v0.0.50) gains one exception (#120). A struct the header also documents as caller-built input may point into the library's data, provided the call that takes it reads through it as through any buffer argument: only within the ranges its own pointers and counts state, checking every value it reads there as untrusted, and relying on nothing the library validated earlier. A header line alone exempts nothing.

Each library takes the page by syncing to this tag. No script or workflow changed since v0.0.49.

v0.0.50

Choose a tag to compare

@siracozmen01 siracozmen01 released this 04 Nov 01:33
07ad642
  • maul-conventions.md: one rule for state a caller holds (#119). Opaque state the library alone writes is checked by its cookie, its ABI version where it records one, and every index, slot and length being in bounds; a forged one is outside the contract. A value struct with documented fields that a call takes back from the caller carries no raw pointer and size into the library's data, but names what it came from and an index, checked on each call. Caller memory a call keeps "as checked" is read only within the extents recorded. A library's value struct that breaks this is a bug for it to fix, with ! before 1.0.

Each library takes the page by syncing to this tag. No script or workflow changed since v0.0.49.

v0.0.49

Choose a tag to compare

@siracozmen01 siracozmen01 released this 04 Nov 01:09
2a7c1b2
  • maul/renamed/src/cpu.h: @P@CheckCpu carries NOLINTNEXTLINE(readability-redundant-declaration), like the other two declarations since v0.0.46, so a library whose public header declares its CPU check (maul-anim's maniCheckCpu) passes a header-filter tidy pass. The header comment says a library may declare any of the three publicly (#118).

maul2d, maul3d and maul-anim render this file and take it by syncing to this tag; everything else is as in v0.0.48. No workflow changed since v0.0.47.

v0.0.48

Choose a tag to compare

@siracozmen01 siracozmen01 released this 04 Nov 00:58
7eeaaa4
  • maul/files/tools/tidy_filter.sh (new family file): tidy_filter.sh <build tree> [subdirectory ...] prints clang-tidy's --header-filter for a tree, ^<CMAKE_HOME_DIRECTORY>/(src|include)/ with the directory regex-escaped, and ((rhi|window)/)? before it when subdirectories are named. It exits 1 when the cache has no CMAKE_HOME_DIRECTORY (#117).
  • maul-conventions.md: every clang-tidy call passes the filter from this script, and a changed header tidies every source.

Each library takes it by syncing its family files to this tag (family_sync.py --write) and switching every clang-tidy call to filter=$(tools/tidy_filter.sh <tree> [subdirectories]) in the same pull request, assigned on its own line so a failure stops the step. Until then the nightly family check reports the file missing. No workflow changed since v0.0.47.