# See src/google/protobuf/stubs/platform_macros.h for supported archs.
#
# On PowerPC, the __atomic_*() built-ins for 1-byte, 2-byte and 4-byte
# types are available built-in. However, the __atomic_*() built-ins for
# 8-byte types is implemented via libatomic, so only available since gcc
# 4.8.
#
# In Buildroot, to simplify things, we've decided to simply require gcc
# 4.8 as soon as the architectures has at least one __atomic_*() built-in
# variant that requires libatomic.
#
# Since protobuf most likely only uses the 1, 2 and 4-byte variants, it
# *could* technically build with gcc 4.7. This is probably not a big deal,
# and we can live with requiring gcc 4.8 on PowerPC to build protobuf.
#
# host-protobuf only builds on certain architectures
config BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
	bool
	default y if BR2_arm
	default y if BR2_i386
	default y if BR2_mipsel
	default y if BR2_x86_64
	default y if BR2_sparc64
	default y if BR2_TOOLCHAIN_HAS_ATOMIC
	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
	depends on BR2_USE_MMU # fork()

config BR2_PACKAGE_PROTOBUF
	bool "protobuf"
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11
	depends on !BR2_STATIC_LIBS
	help
	  Protocol buffers are Google's language-neutral,
	  platform-neutral, extensible mechanism for serializing
	  structured data.

	  https://developers.google.com/protocol-buffers

comment "protobuf needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8"
	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \
		|| BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
