New comment by newbluemoon on void-packages repository https://github.com/void-linux/void-packages/pull/16128#issuecomment-549960367 Comment: The failure on musl targets is because the musl libc doesn’t have `ucontext.h`. See e.g. [here](https://www.openwall.com/lists/musl/2018/01/29/2) why. In `include/ma_context.h` there is ``` #ifdef _WIN32 #define MY_CONTEXT_USE_WIN32_FIBERS 1 #elif defined(__GNUC__) && __GNUC__ >= 3 && defined(__x86_64__) && !defined(__ILP32__) #define MY_CONTEXT_USE_X86_64_GCC_ASM #elif defined(__GNUC__) && __GNUC__ >= 3 && defined(__i386__) #define MY_CONTEXT_USE_I386_GCC_ASM #elif defined(HAVE_UCONTEXT_H) #define MY_CONTEXT_USE_UCONTEXT #else #define MY_CONTEXT_DISABLE #endif ``` So `mariadb-connector-c` uses its own asm code for x86_64. That’s why this target works. For ARM (and other targets) it falls back to the libc’s `ucontext.h`. The check for `ucontext.h` doesn’t fail because it is part of the cross-compiler packages (I don’t have enough insight to know why). But you just have to patch out that check so that the code follows the branch without ucontext, like e.g.: ``` pre_configure() { case "$XBPS_TARGET_MACHINE" in *-musl) vsed -i -e "/CHECK_INCLUDE_FILES (ucontext.h HAVE_UCONTEXT_H)/d" \ cmake/CheckIncludeFiles.cmake esac } ``` and remove the line `archs="x86_64 i686 x86_64-musl"` Now it should be fine. :)