* gnu/packages/compression.scm (snappy): Update to 1.1.9. [source]: Add another patch. [arguments]: Add new #:configure-flags and an 'unpack-third_party-subprojects phase. [native-inputs]: Add the sources for benchmark and googletests. * gnu/packages/patches/snappy-add-inline-for-GCC.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it.
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 0c716d435abe65250100c2caea0e5126ac4e14bd Mon Sep 17 00:00:00 2001
 | 
						|
From: "Georgi D. Sotirov" <gdsotirov@gmail.com>
 | 
						|
Date: Wed, 5 May 2021 14:16:46 +0300
 | 
						|
Subject: [PATCH] Add inline with SNAPPY_ATTRIBUTE_ALWAYS_INLINE
 | 
						|
 | 
						|
Add inline with SNAPPY_ATTRIBUTE_ALWAYS_INLINE on AdvanceToNextTag to
 | 
						|
fix the following compilation errors and a warning with GCC:
 | 
						|
 | 
						|
[  2%] Building CXX object CMakeFiles/snappy.dir/snappy.cc.o
 | 
						|
/usr/bin/c++   -DHAVE_CONFIG_H -Dsnappy_EXPORTS
 | 
						|
-I/tmp/snappy-1.1.9/build -I/tmp/snappy-1.1.9  -O3
 | 
						|
-march=i586 -mtune=i686 -Wall -Wextra -fno-exceptions -fno-rtti -O3
 | 
						|
-DNDEBUG -fPIC   -std=c++11 -o CMakeFiles/snappy.dir/snappy.cc.o -c
 | 
						|
/tmp/snappy-1.1.9/snappy.cc
 | 
						|
/tmp/snappy-1.1.9/snappy.cc:1017:8: warning: always_inline
 | 
						|
function might not be inlinable [-Wattributes]
 | 
						|
 size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) {
 | 
						|
        ^
 | 
						|
/tmp/snappy-1.1.9/snappy.cc: In function 'std::pair<const
 | 
						|
unsigned char*, int> snappy::DecompressBranchless(const uint8_t*, const
 | 
						|
uint8_t*, ptrdiff_t, T, ptrdiff_t) [with T = char*; uint8_t = unsigned
 | 
						|
char; ptrdiff_t = int]':
 | 
						|
/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in
 | 
						|
call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**,
 | 
						|
size_t*)': function body can be overwritten at link time
 | 
						|
/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here
 | 
						|
         size_t tag_type = AdvanceToNextTag(&ip, &tag);
 | 
						|
                                                     ^
 | 
						|
/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in
 | 
						|
call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**,
 | 
						|
size_t*)': function body can be overwritten at link time
 | 
						|
 size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) {
 | 
						|
        ^
 | 
						|
/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here
 | 
						|
         size_t tag_type = AdvanceToNextTag(&ip, &tag);
 | 
						|
                                                     ^
 | 
						|
/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in
 | 
						|
call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**,
 | 
						|
size_t*)': function body can be overwritten at link time
 | 
						|
 size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) {
 | 
						|
        ^
 | 
						|
/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here
 | 
						|
         size_t tag_type = AdvanceToNextTag(&ip, &tag);
 | 
						|
                                                     ^
 | 
						|
CMakeFiles/snappy.dir/build.make:137: recipe for target
 | 
						|
'CMakeFiles/snappy.dir/snappy.cc.o' failed
 | 
						|
 | 
						|
Just like with other functions using SNAPPY_ATTRIBUTE_ALWAYS_INLINE
 | 
						|
macro (i.e. __attribute__((always_inline)) ) it is necessary to use C++
 | 
						|
inline specifier.
 | 
						|
---
 | 
						|
 snappy.cc | 2 +-
 | 
						|
 1 file changed, 1 insertion(+), 1 deletion(-)
 | 
						|
 | 
						|
diff --git a/snappy.cc b/snappy.cc
 | 
						|
index 79dc0e8..51157be 100644
 | 
						|
--- a/snappy.cc
 | 
						|
+++ b/snappy.cc
 | 
						|
@@ -1014,7 +1014,7 @@ void MemMove(ptrdiff_t dst, const void* src, size_t size) {
 | 
						|
 }
 | 
						|
 
 | 
						|
 SNAPPY_ATTRIBUTE_ALWAYS_INLINE
 | 
						|
-size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) {
 | 
						|
+inline size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) {
 | 
						|
   const uint8_t*& ip = *ip_p;
 | 
						|
   // This section is crucial for the throughput of the decompression loop.
 | 
						|
   // The latency of an iteration is fundamentally constrained by the
 |