protobuf: fix detection of __atomic_*() built-ins
authorCarlos Santos <casantos@datacom.ind.br>
Wed, 17 Feb 2016 17:43:01 +0000 (15:43 -0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sun, 20 Mar 2016 22:43:31 +0000 (23:43 +0100)
commit1f80ca33904e86cf4dc517c3e8e7316d659a1271
treea336f4d0bc119321b5be45782a781a67eff97265
parent6619c67a74e788e39cc6ee3ccb4b20562afde986
protobuf: fix detection of __atomic_*() built-ins

- Use the recently introduced BR2_TOOLCHAIN_HAS_ATOMIC boolean.

- Import an upstream patch to fix error handling when atomic operations
  are not detected. Without this patch the build fails due to a syntax
  error instead of showing the proper message.

- Add a patch to configure.ac to check if libatomic is needed and force
  linking to it (we will attempt to submit this upstream).

- Disable build for SPARC64 because it fails due to a missing definition
  of Atomic64.

On PowerPC, the __atomic_*() built-ins for 1-byte, 2-byte and 4-byte
types are available built-in. The corresponding built-ins for 8-byte
types, however, are implemented via libatomic, so requiring gcc >= 4.8.

In Buildroot, to simplify things, it was decided to 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. The
same restriction applies to SPARC.

The build for SPARC64 breaks even using the master branch of protobuf
due to undefined references to some NoBarrier_Atomic*() functions.

Signed-off-by: Henrique Marks <henrique.marks@datacom.ind.br>
Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/protobuf/0001-Fix-GOOGLE_PROTOBUF_ATOMICOPS_ERROR-syntax-error.patch [new file with mode: 0644]
package/protobuf/0002-configure.ac-check-if-libatomic-is-needed.patch [new file with mode: 0644]
package/protobuf/Config.in