1f80ca3390
- 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>
62 lines
2.0 KiB
Diff
62 lines
2.0 KiB
Diff
From 50982f711de6ad58f6e0bef01a75d2b9cf35f5dc Mon Sep 17 00:00:00 2001
|
||
From: George Redivo <george.redivo@datacom.ind.br>
|
||
Date: Mon, 6 Jul 2015 16:56:41 -0300
|
||
Subject: [PATCH 1/2] Fix GOOGLE_PROTOBUF_ATOMICOPS_ERROR syntax error
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
It's not possible to define "#error" inside a define.
|
||
It causes 'error: stray ‘#’ in program' compilation error.
|
||
|
||
Now the define GOOGLE_PROTOBUF_ATOMICOPS_ERROR is the error message
|
||
and it's used along the code together "#error".
|
||
---
|
||
src/google/protobuf/stubs/atomicops.h | 10 +++++-----
|
||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||
|
||
diff --git a/src/google/protobuf/stubs/atomicops.h b/src/google/protobuf/stubs/atomicops.h
|
||
index b1336e3..a130b38 100644
|
||
--- a/src/google/protobuf/stubs/atomicops.h
|
||
+++ b/src/google/protobuf/stubs/atomicops.h
|
||
@@ -162,7 +162,7 @@ Atomic64 Release_Load(volatile const Atomic64* ptr);
|
||
|
||
// Include our platform specific implementation.
|
||
#define GOOGLE_PROTOBUF_ATOMICOPS_ERROR \
|
||
-#error "Atomic operations are not supported on your platform"
|
||
+"Atomic operations are not supported on your platform"
|
||
|
||
// ThreadSanitizer, http://clang.llvm.org/docs/ThreadSanitizer.html.
|
||
#if defined(THREAD_SANITIZER)
|
||
@@ -172,7 +172,7 @@ Atomic64 Release_Load(volatile const Atomic64* ptr);
|
||
#if defined(GOOGLE_PROTOBUF_ARCH_IA32) || defined(GOOGLE_PROTOBUF_ARCH_X64)
|
||
#include <google/protobuf/stubs/atomicops_internals_x86_msvc.h>
|
||
#else
|
||
-GOOGLE_PROTOBUF_ATOMICOPS_ERROR
|
||
+#error GOOGLE_PROTOBUF_ATOMICOPS_ERROR
|
||
#endif
|
||
|
||
// Solaris
|
||
@@ -203,15 +203,15 @@ GOOGLE_PROTOBUF_ATOMICOPS_ERROR
|
||
#if __has_extension(c_atomic)
|
||
#include <google/protobuf/stubs/atomicops_internals_generic_gcc.h>
|
||
#else
|
||
-GOOGLE_PROTOBUF_ATOMICOPS_ERROR
|
||
+#error GOOGLE_PROTOBUF_ATOMICOPS_ERROR
|
||
#endif
|
||
#else
|
||
-GOOGLE_PROTOBUF_ATOMICOPS_ERROR
|
||
+#error GOOGLE_PROTOBUF_ATOMICOPS_ERROR
|
||
#endif
|
||
|
||
// Unknown.
|
||
#else
|
||
-GOOGLE_PROTOBUF_ATOMICOPS_ERROR
|
||
+#error GOOGLE_PROTOBUF_ATOMICOPS_ERROR
|
||
#endif
|
||
|
||
// On some platforms we need additional declarations to make AtomicWord
|
||
--
|
||
2.5.0
|
||
|