Skip to content

Commit 6bcfe8e

Browse files
committed
crnlib: make CRNLIB_FORCE_INLINE functions extern because the compiler will override anyway
Avoids errors on macOS like: duplicate symbol __ZN6crnlib5utils10write_le64EPvy in: crn_arealist.o crn_assert.o Setting static instead of extern would also workaround the error but it's wrong and would raise warnings on other systems like FreeBSD: In file included from crunch/crnlib/crn_core.h:174: crunch/crnlib/crn_utils.h:235:8: warning: 'gnu_inline' attribute without 'extern' in C++ treated as externally available, this changed in Clang 10 [-Wgnu-inline-cpp-without-extern] static CRNLIB_FORCE_INLINE void write_be64(void* p, uint64 x) { ^ crunch/crnlib/crn_core.h:85:70: note: expanded from macro 'CRNLIB_FORCE_INLINE' #define CRNLIB_FORCE_INLINE inline __attribute__((__always_inline__, __gnu_inline__)) ^ Setting extern fixes the duplicate symbols error on macOS without introducing warnings on FreeBSD.
1 parent 3735120 commit 6bcfe8e

File tree

1 file changed

+23
-23
lines changed

1 file changed

+23
-23
lines changed

crnlib/crn_utils.h

+23-23
Original file line numberDiff line numberDiff line change
@@ -157,82 +157,82 @@ inline bool read_obj(T& obj, const void*& pBuf, uint& buf_size, bool buffer_is_l
157157
}
158158

159159
#if defined(_MSC_VER)
160-
static CRNLIB_FORCE_INLINE uint16 swap16(uint16 x) {
160+
extern CRNLIB_FORCE_INLINE uint16 swap16(uint16 x) {
161161
return _byteswap_ushort(x);
162162
}
163-
static CRNLIB_FORCE_INLINE uint32 swap32(uint32 x) {
163+
extern CRNLIB_FORCE_INLINE uint32 swap32(uint32 x) {
164164
return _byteswap_ulong(x);
165165
}
166-
static CRNLIB_FORCE_INLINE uint64 swap64(uint64 x) {
166+
extern CRNLIB_FORCE_INLINE uint64 swap64(uint64 x) {
167167
return _byteswap_uint64(x);
168168
}
169169
#elif defined(__GNUC__)
170-
static CRNLIB_FORCE_INLINE uint16 swap16(uint16 x) {
170+
extern CRNLIB_FORCE_INLINE uint16 swap16(uint16 x) {
171171
return static_cast<uint16>((x << 8U) | (x >> 8U));
172172
}
173-
static CRNLIB_FORCE_INLINE uint32 swap32(uint32 x) {
173+
extern CRNLIB_FORCE_INLINE uint32 swap32(uint32 x) {
174174
return __builtin_bswap32(x);
175175
}
176-
static CRNLIB_FORCE_INLINE uint64 swap64(uint64 x) {
176+
extern CRNLIB_FORCE_INLINE uint64 swap64(uint64 x) {
177177
return __builtin_bswap64(x);
178178
}
179179
#else
180-
static CRNLIB_FORCE_INLINE uint16 swap16(uint16 x) {
180+
extern CRNLIB_FORCE_INLINE uint16 swap16(uint16 x) {
181181
return static_cast<uint16>((x << 8U) | (x >> 8U));
182182
}
183-
static CRNLIB_FORCE_INLINE uint32 swap32(uint32 x) {
183+
extern CRNLIB_FORCE_INLINE uint32 swap32(uint32 x) {
184184
return ((x << 24U) | ((x << 8U) & 0x00FF0000U) | ((x >> 8U) & 0x0000FF00U) | (x >> 24U));
185185
}
186-
static CRNLIB_FORCE_INLINE uint64 swap64(uint64 x) {
186+
extern CRNLIB_FORCE_INLINE uint64 swap64(uint64 x) {
187187
return (static_cast<uint64>(swap32(static_cast<uint32>(x))) << 32ULL) | swap32(static_cast<uint32>(x >> 32U));
188188
}
189189
#endif
190190

191191
// Assumes x has been read from memory as a little endian value, converts to native endianness for manipulation.
192-
CRNLIB_FORCE_INLINE uint16 swap_le16_to_native(uint16 x) {
192+
extern CRNLIB_FORCE_INLINE uint16 swap_le16_to_native(uint16 x) {
193193
return c_crnlib_little_endian_platform ? x : swap16(x);
194194
}
195-
CRNLIB_FORCE_INLINE uint32 swap_le32_to_native(uint32 x) {
195+
extern CRNLIB_FORCE_INLINE uint32 swap_le32_to_native(uint32 x) {
196196
return c_crnlib_little_endian_platform ? x : swap32(x);
197197
}
198-
CRNLIB_FORCE_INLINE uint64 swap_le64_to_native(uint64 x) {
198+
extern CRNLIB_FORCE_INLINE uint64 swap_le64_to_native(uint64 x) {
199199
return c_crnlib_little_endian_platform ? x : swap64(x);
200200
}
201201

202202
// Assumes x has been read from memory as a big endian value, converts to native endianness for manipulation.
203-
CRNLIB_FORCE_INLINE uint16 swap_be16_to_native(uint16 x) {
203+
extern CRNLIB_FORCE_INLINE uint16 swap_be16_to_native(uint16 x) {
204204
return c_crnlib_big_endian_platform ? x : swap16(x);
205205
}
206-
CRNLIB_FORCE_INLINE uint32 swap_be32_to_native(uint32 x) {
206+
extern CRNLIB_FORCE_INLINE uint32 swap_be32_to_native(uint32 x) {
207207
return c_crnlib_big_endian_platform ? x : swap32(x);
208208
}
209-
CRNLIB_FORCE_INLINE uint64 swap_be64_to_native(uint64 x) {
209+
extern CRNLIB_FORCE_INLINE uint64 swap_be64_to_native(uint64 x) {
210210
return c_crnlib_big_endian_platform ? x : swap64(x);
211211
}
212212

213-
CRNLIB_FORCE_INLINE uint32 read_le32(const void* p) {
213+
extern CRNLIB_FORCE_INLINE uint32 read_le32(const void* p) {
214214
return swap_le32_to_native(*static_cast<const uint32*>(p));
215215
}
216-
CRNLIB_FORCE_INLINE void write_le32(void* p, uint32 x) {
216+
extern CRNLIB_FORCE_INLINE void write_le32(void* p, uint32 x) {
217217
*static_cast<uint32*>(p) = swap_le32_to_native(x);
218218
}
219-
CRNLIB_FORCE_INLINE uint64 read_le64(const void* p) {
219+
extern CRNLIB_FORCE_INLINE uint64 read_le64(const void* p) {
220220
return swap_le64_to_native(*static_cast<const uint64*>(p));
221221
}
222-
CRNLIB_FORCE_INLINE void write_le64(void* p, uint64 x) {
222+
extern CRNLIB_FORCE_INLINE void write_le64(void* p, uint64 x) {
223223
*static_cast<uint64*>(p) = swap_le64_to_native(x);
224224
}
225225

226-
CRNLIB_FORCE_INLINE uint32 read_be32(const void* p) {
226+
extern CRNLIB_FORCE_INLINE uint32 read_be32(const void* p) {
227227
return swap_be32_to_native(*static_cast<const uint32*>(p));
228228
}
229-
CRNLIB_FORCE_INLINE void write_be32(void* p, uint32 x) {
229+
extern CRNLIB_FORCE_INLINE void write_be32(void* p, uint32 x) {
230230
*static_cast<uint32*>(p) = swap_be32_to_native(x);
231231
}
232-
CRNLIB_FORCE_INLINE uint64 read_be64(const void* p) {
232+
extern CRNLIB_FORCE_INLINE uint64 read_be64(const void* p) {
233233
return swap_be64_to_native(*static_cast<const uint64*>(p));
234234
}
235-
CRNLIB_FORCE_INLINE void write_be64(void* p, uint64 x) {
235+
extern CRNLIB_FORCE_INLINE void write_be64(void* p, uint64 x) {
236236
*static_cast<uint64*>(p) = swap_be64_to_native(x);
237237
}
238238

0 commit comments

Comments
 (0)