kumquat-buildroot/package/libunwind/Config.in
James Hilliard 6ea2a27f90 package/libunwind: add libucontext support
We can expand the list of supported musl architectures by
letting libucontext provide required context API's.

Use the following table to determine which architectures require
libucontext for BR2_PACKAGE_LIBUNWIND_MUSL_CONTEXT_REQUIRED:
https://github.com/libunwind/libunwind/tree/v1.6.2#libc-requirements

Enable BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS if we have
BR2_PACKAGE_LIBUCONTEXT_ARCH_SUPPORTS or if context is not required
by checking for !BR2_PACKAGE_LIBUNWIND_MUSL_CONTEXT_REQUIRED.

Select BR2_PACKAGE_LIBUCONTEXT when selecting BR2_PACKAGE_LIBUNWIND
if we have BR2_PACKAGE_LIBUNWIND_MUSL_CONTEXT_REQUIRED.

Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2023-09-30 21:27:10 +02:00

56 lines
2.1 KiB
Plaintext

config BR2_PACKAGE_LIBUNWIND_MUSL_CONTEXT_REQUIRED
bool
default y
depends on !BR2_ARM_CPU_HAS_ARM
depends on !BR2_aarch64
depends on !BR2_aarch64_be
depends on !BR2_mips
depends on !BR2_mipsel
depends on !BR2_mips64
depends on !BR2_mips64el
depends on !BR2_riscv
depends on !BR2_x86_64
depends on BR2_TOOLCHAIN_USES_MUSL
# libunwind is only available for a certain subset of the
# architectures (as visible in the list of architectures supported
# with the glibc C library below).
#
# In addition to this, on some architectures libunwind requires the
# *context() function from the C library, which are only available on
# certain architectures in uClibc, and not available at all on
# musl. But on some other architectures, libunwind works without using
# the *context() functions, which allows it to be built with musl.
config BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
bool
default y if BR2_TOOLCHAIN_USES_GLIBC && \
(BR2_ARM_CPU_HAS_ARM || BR2_aarch64 || BR2_mips || BR2_mipsel || \
BR2_mips64 || BR2_mips64el || BR2_powerpc || BR2_sh || \
BR2_i386 || BR2_x86_64)
default y if BR2_TOOLCHAIN_USES_UCLIBC && \
(BR2_ARM_CPU_HAS_ARM || BR2_mips || BR2_mipsel || \
BR2_mips64 || BR2_mips64el || BR2_x86_64)
default y if BR2_TOOLCHAIN_USES_MUSL && \
(!BR2_PACKAGE_LIBUNWIND_MUSL_CONTEXT_REQUIRED || \
BR2_PACKAGE_LIBUCONTEXT_ARCH_SUPPORTS)
config BR2_PACKAGE_LIBUNWIND
bool "libunwind"
depends on BR2_TOOLCHAIN_HAS_THREADS
depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C11 atomics
# forcefully links against libgcc_s, only available in dynamic
# linking configurations
depends on !BR2_STATIC_LIBS
select BR2_PACKAGE_LIBUCONTEXT if BR2_TOOLCHAIN_USES_MUSL && \
BR2_PACKAGE_LIBUNWIND_MUSL_CONTEXT_REQUIRED
help
C API to determine the call-chain of a program.
http://www.nongnu.org/libunwind/index.html
comment "libunwind needs a toolchain w/ threads, dynamic library, gcc >= 4.9"
depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || \
!BR2_TOOLCHAIN_GCC_AT_LEAST_4_9