mimalloc
mimalloc copied to clipboard
build with cxx option fails on android
After configuring the build by cmake and with MI_USE_CXX=ON
option, it fails to build for android with ndk 25.2
(clang 14.0.6) due to a template type deduction on a function call to std::atomic_compare_exchange_strong
:
[2/39] Building CXX object CMakeFiles/mimalloc.dir/src/arena.c.o
FAILED: CMakeFiles/mimalloc.dir/src/arena.c.o
C:\devtools\Android\ndk\25.2.9519653\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android21 --sysroot=C:/devtools/Android/ndk/25.2.9519653/toolchains/llvm/prebuilt/windows-x86_64/sysroot -DMI_MALLOC_OVERRIDE -DMI_SHARED_LIB -DMI_SHARED_LIB_EXPORT -Dmimalloc_EXPORTS -IC:/playpod/mimalloc/include -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O3 -DNDEBUG -fPIC -Wno-deprecated -Wall -Wextra -Wno-unknown-pragmas -fvisibility=hidden -Wpedantic -Wno-static-in-inline -ftls-model=initial-exec -fno-builtin-malloc -std=gnu++17 -MD -MT CMakeFiles/mimalloc.dir/src/arena.c.o -MF CMakeFiles\mimalloc.dir\src\arena.c.o.d -o CMakeFiles/mimalloc.dir/src/arena.c.o -c C:/playpod/mimalloc/src/arena.c
C:/playpod/mimalloc/src/arena.c:523:3: error: no matching function for call to 'atomic_compare_exchange_strong_explicit'
mi_atomic_casi64_strong_acq_rel(&arena->purge_expire, &expire, 0);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/playpod/mimalloc/include/mimalloc/atomic.h:125:49: note: expanded from macro 'mi_atomic_casi64_strong_acq_rel'
#define mi_atomic_casi64_strong_acq_rel(p,e,d) mi_atomic_cas_strong_acq_rel(p,e,d)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/playpod/mimalloc/include/mimalloc/atomic.h:65:50: note: expanded from macro 'mi_atomic_cas_strong_acq_rel'
#define mi_atomic_cas_strong_acq_rel(p,exp,des) mi_atomic_cas_strong(p,exp,des,mi_memory_order(acq_rel),mi_memory_order(acquire))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/playpod/mimalloc/include/mimalloc/atomic.h:54:3: note: expanded from macro 'mi_atomic_cas_strong'
mi_atomic(compare_exchange_strong_explicit)(p,expected,desired,mem_success,mem_fail)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/playpod/mimalloc/include/mimalloc/atomic.h:24:33: note: expanded from macro 'mi_atomic'
#define mi_atomic(name) std::atomic_##name
^~~~~~~~~~~~~~~~~~
C:/devtools/Android/ndk/25.2.9519653/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1/atomic:2043:1: note: candidate template ignored: deduced conflicting types for parameter '_Tp' ('long' vs. 'int')
atomic_compare_exchange_strong_explicit(volatile atomic<_Tp>* __o,
^
C:/devtools/Android/ndk/25.2.9519653/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1/atomic:2054:1: note: candidate template ignored: deduced conflicting types for parameter '_Tp' ('long' vs. 'int')
atomic_compare_exchange_strong_explicit(atomic<_Tp>* __o, _Tp* __e,
^
C:/devtools/Android/ndk/25.2.9519653/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1/memory:5198:1: note: candidate template ignored: could not match 'shared_ptr' against 'atomic'
atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v,
^
1 error generated.