mirror of
https://git.FreeBSD.org/ports.git
synced 2024-12-12 03:00:28 +00:00
devel/crc32c: fix build on big-endian architectures
C++11 compiler is needed: Target "crc32c" requires the language dialect "CXX11" , but CMake does not know the compile flags to use to enable it. Additionally, big-endian code in src/crc32c_read_le.h needs fixing - the value is 64 bits wide, not 32 bits. PR: 239420 Approved by: amzo1337@gmail.com (maintainer), tcberner (mentor) Differential Revision: https://reviews.freebsd.org/D21054
This commit is contained in:
parent
1cb5fc573d
commit
7babc4e7e4
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=507823
@ -11,7 +11,7 @@ COMMENT= CRC32C implementation supporting CPU-specific acceleration
|
||||
LICENSE= BSD3CLAUSE
|
||||
LICENSE_FILE= ${WRKSRC}/LICENSE
|
||||
|
||||
USES= cmake
|
||||
USES= cmake compiler:c++11-lang
|
||||
USE_GITHUB= yes
|
||||
GH_ACCOUNT= google
|
||||
USE_LDCONFIG= yes
|
||||
|
25
devel/crc32c/files/patch-src_crc32c__read__le.h
Normal file
25
devel/crc32c/files/patch-src_crc32c__read__le.h
Normal file
@ -0,0 +1,25 @@
|
||||
--- src/crc32c_read_le.h.orig 2019-07-24 07:21:23 UTC
|
||||
+++ src/crc32c_read_le.h
|
||||
@@ -30,14 +30,14 @@ inline uint32_t ReadUint32LE(const uint8_t* buffer) {
|
||||
// Reads a little-endian 64-bit integer from a 64-bit-aligned buffer.
|
||||
inline uint64_t ReadUint64LE(const uint8_t* buffer) {
|
||||
#if BYTE_ORDER_BIG_ENDIAN
|
||||
- return ((static_cast<uint32_t>(static_cast<uint8_t>(buffer[0]))) |
|
||||
- (static_cast<uint32_t>(static_cast<uint8_t>(buffer[1])) << 8) |
|
||||
- (static_cast<uint32_t>(static_cast<uint8_t>(buffer[2])) << 16) |
|
||||
- (static_cast<uint32_t>(static_cast<uint8_t>(buffer[3])) << 24) |
|
||||
- (static_cast<uint32_t>(static_cast<uint8_t>(buffer[4])) << 32) |
|
||||
- (static_cast<uint32_t>(static_cast<uint8_t>(buffer[5])) << 40) |
|
||||
- (static_cast<uint32_t>(static_cast<uint8_t>(buffer[6])) << 48) |
|
||||
- (static_cast<uint32_t>(static_cast<uint8_t>(buffer[7])) << 56));
|
||||
+ return ((static_cast<uint64_t>(static_cast<uint8_t>(buffer[0]))) |
|
||||
+ (static_cast<uint64_t>(static_cast<uint8_t>(buffer[1])) << 8) |
|
||||
+ (static_cast<uint64_t>(static_cast<uint8_t>(buffer[2])) << 16) |
|
||||
+ (static_cast<uint64_t>(static_cast<uint8_t>(buffer[3])) << 24) |
|
||||
+ (static_cast<uint64_t>(static_cast<uint8_t>(buffer[4])) << 32) |
|
||||
+ (static_cast<uint64_t>(static_cast<uint8_t>(buffer[5])) << 40) |
|
||||
+ (static_cast<uint64_t>(static_cast<uint8_t>(buffer[6])) << 48) |
|
||||
+ (static_cast<uint64_t>(static_cast<uint8_t>(buffer[7])) << 56));
|
||||
#else // !BYTE_ORDER_BIG_ENDIAN
|
||||
uint64_t result;
|
||||
// This should be optimized to a single instruction.
|
Loading…
Reference in New Issue
Block a user