lacc-git
Build times (auto-updated)
- x86_64: 46s (2026-10-05 18:45 UTC, MAKEFLAGS=-j6)
- i486: 1m39s (2026-09-28 17:37 UTC, MAKEFLAGS=-j6)
- i686: 1m22s (2026-09-28 17:38 UTC, MAKEFLAGS=-j6)
- pentium4: 1m39s (2026-09-28 17:40 UTC, MAKEFLAGS=-j6)
Category: local-install (rebuilt only so archlinuxaba/the cluster gets it too;
not maintained/adapted/owned by us — see arch/scripts/install_only_packages).
User (Andreas Baumann) is the upstream AUR maintainer.
A simple, self-hosting C compiler.
Build notes (2026-08-19)
- Stale unpublished build artifacts from an earlier session left in the checkout
(already current,
r1023.3083984-1, matches AUR) – cleaned up before proceeding. arch=(x86_64)only, and NOT extended:build()hardcodes./configure --build=x86_64-linux, which is deliberate (this package’s own Maintainer wrote it) –laccis a small/hobby C compiler that only targets x86_64 machine code, so a 32-bit build of the compiler binary itself wouldn’t be semantically meaningful even if it compiled. Left as x86_64-only, nopkgrelbump (no local deviation).
2026-09-28: arch extended to i486/i686/pentium4, rebuilt+published
Found PKGBUILD already carrying an uncommitted local edit when asked to
“rebuild and publish”: pkgrel 1 -> 2, arch=(x86_64) ->
arch=(x86_64 i486 i686 pentium4) – the user’s own staged change (they’re
lacc-git’s actual upstream AUR maintainer), so built as-is rather than
questioning it.
The 2026-08-19 worry above (that --build=x86_64-linux being hardcoded would
make 32-bit builds meaningless) was initially assumed not to apply, based on the
i486/i686/pentium4 build logs showing compiler warnings with size_t resolving
to unsigned int (i.e. lacc’s own build genuinely produced 32-bit
executables). That check was insufficient and the 2026-08-19 note was right
all along – see the correction below. All four archs built, check() “passed”
(it’s a no-op: make: Nothing to be done for 'test'), and all four published,
r1023.3083984-2, debug packages included.
2026-09-28 (same day, follow-up): i486/i686/pentium4 packages were functionally broken – reverted + unpublished
User reported a real failure using the published package: lacc -c ... test1.c
failed with Unable to resolve include file 'gnu/stubs-64.h' – i.e. the
32-bit-*compiled* lacc binary was still trying to target x86_64 when
compiling other code.
Root-caused in upstream’s own configure script: host (used to pick the
codegen backend) is set from --build= when --host= isn’t given, and the
case "$host" only branches on arm64-*/aarch64-* vs. everything else
(default -> #define x86_64 1, backend=src/backend/x86_64). There is no
32-bit x86 backend in this project at all – only src/backend/x86_64 and
src/backend/arm64 exist (src/lacc.c’s #ifdef x86_64 / #ifdef ARM64
amalgamation guards confirm it). So this PKGBUILD’s hardcoded
./configure --build=x86_64-linux was never the actual bug – even a correct
per-arch --build=i686-linux etc. would still fall into the default case and
select the x86_64 backend, because lacc genuinely has no other x86 target. The
resulting 32-bit ELF binary internally still emits x86_64 codegen and
unconditionally registers __LP64__/__x86_64__ macros
(src/preprocessor/macro.c) for anything it compiles – hence gnu/stubs.h
picking the (nonexistent, on a real 32-bit system) stubs-64.h.
Fix: reverted arch=() back to (x86_64) (matching the 2026-08-19 guidance),
pkgrel left at 2, .SRCINFO regenerated. Also removed the already-published
i486/i686/pentium4 lacc-git + lacc-git-debug packages from the live repo
(repo-remove on each arch’s db, then deleted the .pkg.tar.zst/.sig files)
– confirmed clean afterward (x86_64 untouched, other three archs empty of
lacc-git*). User explicitly approved the removal (a “keep the broken packages
live” option was also offered and declined).
Lesson: a passing check() is not proof a cross-compiled build is
functionally correct – this package’s check() was a no-op, and even a real
one would only exercise lacc’s own self-build, not what it does when used to
compile arbitrary other code. Verifying “did it build as a native N-bit ELF” is
not the same question as “does its codegen target N-bit” for a compiler.