mirror of
https://github.com/ARMSX2/ARMSX3.git
synced 2026-08-24 16:58:52 -07:00
Splits the Android release into legacy / a11 / a13 / a15 so a device can take a build matched to its CPU and OS instead of one binary suiting everything. android/build-variants.sh drives all four from a single table of (ndk, api, -march, apk suffix), and ConfigureCompiler.cmake takes -march per variant rather than hardcoding one. The legacy variant had never been compiled before: every release up to 0.7.2 was built at the gradle default of minSdk 33, so nothing had ever targeted a lower API. Doing so turned up std::aligned_alloc, which is API 28+ -- below that <cstdlib> does not declare it at all and the using-declaration fails to resolve. posix_memalign is the older spelling and its result frees with plain free(), so the rest of the header is unaffected. Kept even though legacy now targets API 30, because it costs nothing and the next person to try a lower floor should not rediscover it. legacy targets armv8.1-a, which is the floor this codebase compiles at rather than a preference: util/simd.hpp uses SQRDMLAH (v8.1 RDMA) and util/asm.hpp has inline LSE atomics, so armv8-a does not build. Its value is cores that are ARMv8.2 without the OPTIONAL fp16 and dotprod extensions the other three variants require. Cortex-A53/A72/A73 class parts stay out of reach until those two paths gain fallbacks.