From 91339de7414a7d4fc2999675b5d5fcae746bbb6a Mon Sep 17 00:00:00 2001 From: Jakub Ptak Date: Mon, 15 Aug 2022 11:15:14 +0200 Subject: [PATCH 1/2] Fix htole64 and le64toh missing on non-linux platforms --- src/starkware/crypto/ffi/portable_endian.h | 112 +++++++++++++++++++++ src/starkware/crypto/ffi/utils.cc | 1 + 2 files changed, 113 insertions(+) create mode 100644 src/starkware/crypto/ffi/portable_endian.h diff --git a/src/starkware/crypto/ffi/portable_endian.h b/src/starkware/crypto/ffi/portable_endian.h new file mode 100644 index 0000000..77303d2 --- /dev/null +++ b/src/starkware/crypto/ffi/portable_endian.h @@ -0,0 +1,112 @@ +#ifndef STARKWARE_CRYPTO_FFI_PORTABLE_ENDIAN_H_ +#define STARKWARE_CRYPTO_FFI_PORTABLE_ENDIAN_H_ + +#if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__) + +# define __WINDOWS__ + +#endif + +#if defined(__linux__) || defined(__CYGWIN__) + +# include + +#elif defined(__APPLE__) + +# include + +# define htobe16(x) OSSwapHostToBigInt16(x) +# define htole16(x) OSSwapHostToLittleInt16(x) +# define be16toh(x) OSSwapBigToHostInt16(x) +# define le16toh(x) OSSwapLittleToHostInt16(x) + +# define htobe32(x) OSSwapHostToBigInt32(x) +# define htole32(x) OSSwapHostToLittleInt32(x) +# define be32toh(x) OSSwapBigToHostInt32(x) +# define le32toh(x) OSSwapLittleToHostInt32(x) + +# define htobe64(x) OSSwapHostToBigInt64(x) +# define htole64(x) OSSwapHostToLittleInt64(x) +# define be64toh(x) OSSwapBigToHostInt64(x) +# define le64toh(x) OSSwapLittleToHostInt64(x) + +# define __BYTE_ORDER BYTE_ORDER +# define __BIG_ENDIAN BIG_ENDIAN +# define __LITTLE_ENDIAN LITTLE_ENDIAN +# define __PDP_ENDIAN PDP_ENDIAN + +#elif defined(__OpenBSD__) + +# include + +#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) + +# include + +# define be16toh(x) betoh16(x) +# define le16toh(x) letoh16(x) + +# define be32toh(x) betoh32(x) +# define le32toh(x) letoh32(x) + +# define be64toh(x) betoh64(x) +# define le64toh(x) letoh64(x) + +#elif defined(__WINDOWS__) + +# include +# include + +# if BYTE_ORDER == LITTLE_ENDIAN + +# define htobe16(x) htons(x) +# define htole16(x) (x) +# define be16toh(x) ntohs(x) +# define le16toh(x) (x) + +# define htobe32(x) htonl(x) +# define htole32(x) (x) +# define be32toh(x) ntohl(x) +# define le32toh(x) (x) + +# define htobe64(x) htonll(x) +# define htole64(x) (x) +# define be64toh(x) ntohll(x) +# define le64toh(x) (x) + +# elif BYTE_ORDER == BIG_ENDIAN + + /* that would be xbox 360 */ +# define htobe16(x) (x) +# define htole16(x) __builtin_bswap16(x) +# define be16toh(x) (x) +# define le16toh(x) __builtin_bswap16(x) + +# define htobe32(x) (x) +# define htole32(x) __builtin_bswap32(x) +# define be32toh(x) (x) +# define le32toh(x) __builtin_bswap32(x) + +# define htobe64(x) (x) +# define htole64(x) __builtin_bswap64(x) +# define be64toh(x) (x) +# define le64toh(x) __builtin_bswap64(x) + +# else + +# error byte order not supported + +# endif + +# define __BYTE_ORDER BYTE_ORDER +# define __BIG_ENDIAN BIG_ENDIAN +# define __LITTLE_ENDIAN LITTLE_ENDIAN +# define __PDP_ENDIAN PDP_ENDIAN + +#else + +# error platform not supported + +#endif + +#endif // STARKWARE_CRYPTO_FFI_PORTABLE_ENDIAN_H_ \ No newline at end of file diff --git a/src/starkware/crypto/ffi/utils.cc b/src/starkware/crypto/ffi/utils.cc index 9a1e71c..dd6df3d 100644 --- a/src/starkware/crypto/ffi/utils.cc +++ b/src/starkware/crypto/ffi/utils.cc @@ -3,6 +3,7 @@ #include #include "starkware/crypto/ffi/utils.h" +#include "starkware/crypto/ffi/portable_endian.h" namespace starkware { From 7aa36e638f4a0213a613854ba8f38be43b550c1f Mon Sep 17 00:00:00 2001 From: Jakub Ptak Date: Thu, 8 Sep 2022 13:05:00 +0200 Subject: [PATCH 2/2] Remove endian.h import left accidently --- src/starkware/crypto/ffi/utils.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/starkware/crypto/ffi/utils.cc b/src/starkware/crypto/ffi/utils.cc index dd6df3d..49b9292 100644 --- a/src/starkware/crypto/ffi/utils.cc +++ b/src/starkware/crypto/ffi/utils.cc @@ -1,4 +1,3 @@ -#include #include #include