# 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_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_ARM_CPU_HAS_ARM || BR2_x86_64)

config BR2_PACKAGE_LIBUNWIND
	bool "libunwind"
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
	# forcefully links against libgcc_s, only available in dynamic
	# linking configurations
	depends on !BR2_STATIC_LIBS
	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"
	depends on BR2_PACKAGE_LIBUNWIND_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS
