diff options
author | Cameron Cawley <ccawley2011@gmail.com> | 2022-10-13 14:59:18 +0100 |
---|---|---|
committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2023-03-17 21:27:56 +0100 |
commit | d2a13a8fd4a0ffc5e25102717d26b30f6e05d092 (patch) | |
tree | bcf7f3f0d89f65526f70d711731f375b9862a1a8 | |
parent | 9316259583da99d9350e63f04144f1c90f130fd3 (diff) |
Support using aligned_alloc() for memory allocation
-rw-r--r-- | CMakeLists.txt | 6 | ||||
-rwxr-xr-x | configure | 19 | ||||
-rw-r--r-- | zbuild.h | 4 | ||||
-rw-r--r-- | zutil_p.h | 4 |
4 files changed, 32 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index bb29d76..a7c6806 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -388,6 +388,12 @@ if(HAVE_POSIX_MEMALIGN) add_definitions(-DHAVE_POSIX_MEMALIGN) endif() set(CMAKE_REQUIRED_DEFINITIONS) +set(CMAKE_REQUIRED_DEFINITIONS -D_ISOC11_SOURCE=1) +check_function_exists(aligned_alloc HAVE_ALIGNED_ALLOC) +if(HAVE_ALIGNED_ALLOC) + add_definitions(-DHAVE_ALIGNED_ALLOC) +endif() +set(CMAKE_REQUIRED_DEFINITIONS) if(WITH_SANITIZER STREQUAL "Address") add_address_sanitizer() @@ -750,6 +750,25 @@ else fi echo >> configure.log +cat > $test.c <<EOF +#define _ISOC11_SOURCE 1 +#include <stdlib.h> +int main(void) { + void *ptr = aligned_alloc(64, 10); + if (ptr) + free(ptr); + return 0; +} +EOF +if try $CC $CFLAGS -o $test $test.c $LDSHAREDLIBC; then + echo "Checking for aligned_alloc... Yes." | tee -a configure.log + CFLAGS="${CFLAGS} -DHAVE_ALIGNED_ALLOC" + SFLAGS="${SFLAGS} -DHAVE_ALIGNED_ALLOC" +else + echo "Checking for aligned_alloc... No." | tee -a configure.log +fi +echo >> configure.log + # check for strerror() for use by gz* functions cat > $test.c <<EOF #include <string.h> @@ -1,6 +1,10 @@ #ifndef _ZBUILD_H #define _ZBUILD_H +#ifndef _ISOC11_SOURCE +# define _ISOC11_SOURCE 1 /* aligned_alloc */ +#endif + /* This has to be first include that defines any types */ #if defined(_MSC_VER) # if defined(_WIN64) @@ -9,7 +9,7 @@ # define _POSIX_C_SOURCE 200112L /* For posix_memalign(). */ #endif -#if defined(__APPLE__) || defined(HAVE_POSIX_MEMALIGN) +#if defined(__APPLE__) || defined(HAVE_POSIX_MEMALIGN) || defined(HAVE_ALIGNED_ALLOC) # include <stdlib.h> #elif defined(__FreeBSD__) # include <stdlib.h> @@ -27,6 +27,8 @@ static inline void *zng_alloc(size_t size) { return (void *)_aligned_malloc(size, 64); #elif defined(__APPLE__) return (void *)malloc(size); /* MacOS always aligns to 16 bytes */ +#elif defined(HAVE_ALIGNED_ALLOC) + return (void *)aligned_alloc(64, size); #else return (void *)memalign(64, size); #endif |