# 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 || BR2_armeb || BR2_mips || BR2_mipsel || BR2_mips64 || \
		 BR2_mips64el || BR2_powerpc || BR2_sh || BR2_sh64 || BR2_i386 || BR2_x86_64)
	default y if BR2_TOOLCHAIN_USES_UCLIBC && \
		(BR2_arm || BR2_armeb || BR2_i386 || BR2_mips || BR2_mipsel || \
		 BR2_mips64 || BR2_mips64el || BR2_x86_64)
	default y if BR2_TOOLCHAIN_USES_MUSL && \
		(BR2_arm || BR2_armeb || BR2_i386 || BR2_x86_64)

config BR2_PACKAGE_LIBUNWIND
	bool "libunwind"
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
	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"
	depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_HAS_THREADS
