Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
604c252
fix compilation error with clang on windows, issue #1370
daanx Aug 19, 2026
0a4ea88
possible fix linking error with clang on windows, issue #1370
daanx Aug 20, 2026
0424ab2
Pin GitHub Actions to full-length commit SHAs, see PR #1368
daanx Aug 20, 2026
0b01a64
Pin further GitHub Actions to full-length commit SHAs, see PR #1368
daanx Aug 20, 2026
0ea1bb2
add plain clang to win32 tests, #1370
daanx Aug 20, 2026
870c30d
nice names for some CI steps
daanx Aug 21, 2026
a15a51d
fix assertion check in realloc, issue #1371
daanx Aug 21, 2026
0a0c296
improve cache associativity
daanx Aug 22, 2026
dc71e90
remove cookie field
daanx Aug 22, 2026
cda82f9
check double free's even without padding
daanx Aug 22, 2026
622d421
fix natural alignment
daanx Aug 22, 2026
d962692
workflows: Enable clang-cl tests for ARM
res2k Aug 28, 2026
0e9c24f
workflows: Add MI_NO_USE_CXX variants for Windows/clang tests
res2k Aug 28, 2026
a032d35
workflows: Add MI_NO_USE_CXX variants for MSVC tests
res2k Aug 28, 2026
80dbcb4
workflows: Add clang-cl tests targetting the native architecture
res2k Aug 28, 2026
819be2c
workflows: Add matrix entry for C vs C++
res2k Aug 28, 2026
aca9e6e
experiment codegen on x64
daanx Aug 28, 2026
7cca1b5
Work around clang-cl missing ldar, stlr, see PR #1379 by @res2k
daanx Aug 28, 2026
cfab42c
Configure monthly Dependabot updates, see PR #1376
daanx Aug 28, 2026
8cc8a2a
Allow for C mode building w/ MSVC or clang-cl, pr #1380 by @res2k
daanx Aug 28, 2026
bd2423d
merge from dev
daanx Aug 28, 2026
69f9b07
improve free codegen
daanx Aug 28, 2026
d3dfc39
fix dependabot location
daanx Aug 28, 2026
c1bc3f4
Merge branch 'dev' into dev3
daanx Aug 28, 2026
7a85d4d
Merge pull request #1381 from res2k/more-clang-cl-tests
daanx Aug 28, 2026
f0194a5
improve free codegen
daanx Aug 28, 2026
3dfa6aa
fix test paths
daanx Aug 28, 2026
c2259fb
add fail fast false to workflow
daanx Aug 28, 2026
155fef1
improve free codegen
daanx Aug 28, 2026
e2dd60c
reduce c/c++ test variants a bit
daanx Aug 28, 2026
8006b34
reduce c/c++ test variants a bit
daanx Aug 28, 2026
fe5a54c
faster free_small
daanx Aug 28, 2026
eab1ebe
improve free_small
daanx Aug 29, 2026
06fb5b0
comments
daanx Aug 29, 2026
2deba9e
add default to MI_USE_CXX option
daanx Aug 29, 2026
1069215
merge from dev
daanx Aug 29, 2026
9c2a0d2
fix guarded build assertions
daanx Aug 29, 2026
52c0fed
fix test.yml
daanx Aug 29, 2026
081728d
simplify test.yml
daanx Aug 29, 2026
5787e6b
allow alpine tests to fail in test.yml
daanx Aug 29, 2026
6070a8d
remove linux pthreads asm
daanx Aug 29, 2026
f0d57e8
fix test.yml
daanx Aug 29, 2026
61f993b
add mi_free_csize_nonnull
daanx Aug 29, 2026
116733a
update documentation
daanx Aug 29, 2026
dcb888e
Merge branch 'dev' into dev3
daanx Aug 29, 2026
430db36
improve mi_free_size error messages
daanx Aug 29, 2026
8c1d13f
improve codegen on aarch64
daanx Aug 29, 2026
8b5ddc4
test mi_free_small_nonnull codegen
daanx Aug 29, 2026
066d25a
fix mi_free_small_nonnull codegen on aarch64
daanx Aug 29, 2026
dc48dd6
fix arm64 compile
daanx Aug 29, 2026
6e337d2
improve mi_free codegen
daanx Aug 29, 2026
7e0b273
fix arm64 compile
daanx Aug 29, 2026
4df1f0d
fix arm64 compile
daanx Aug 29, 2026
75a968a
fix arm64 compile
daanx Aug 29, 2026
93fb234
remove superfluous mi_likely
daanx Aug 30, 2026
a1036ba
ensure MI_OPT_ARCH=OFF is respected on arm64 (issue #1382)
daanx Aug 30, 2026
582711e
merge from dev
daanx Aug 30, 2026
0f80c39
Allow specicic architecture to be passed to MI_OPT_ARCH; default to a…
daanx Aug 30, 2026
c42fb1a
fix MI_OPT_ARCH on arm32
daanx Aug 30, 2026
2781629
fix MI_OPT_ARCH on arm32
daanx Aug 30, 2026
a51fe32
add rva23 to ci tests
daanx Aug 30, 2026
fcb80d1
fix rv* architecture match
daanx Aug 30, 2026
c0dfd63
fix rv* architecture match
daanx Aug 30, 2026
3fd9b1c
fix assertion warning
daanx Aug 30, 2026
4df4e21
add zalasr test to risv
daanx Aug 30, 2026
9f3fc2b
add clang to riscv CI
daanx Aug 30, 2026
17aa0af
add clang++ to riscv CI
daanx Aug 30, 2026
5a4f73d
remove clang++ from riscv CI
daanx Aug 30, 2026
30de2b4
fix sizeof(void*) test in cmake
daanx Aug 30, 2026
9cf99c7
fix __riscv macro misspelling
daanx Aug 30, 2026
f60b4cf
fix: mi_theap_zalloc_csize zeroes its large branch
lenamonj Aug 31, 2026
97f632d
Merge pull request #1385 from lenamonj/fix-zalloc-csize-large
daanx Aug 31, 2026
e73740d
fix signature of mi_free_small_nonnull
daanx Aug 31, 2026
451aff1
add v3 to docs
daanx Aug 31, 2026
68bd1cf
Merge branch 'dev' into dev3
daanx Aug 31, 2026
43b9da6
refactor mi_page_malloc_zero
daanx Aug 31, 2026
1bc0403
remove dead code
daanx Aug 31, 2026
92cf63e
bump to v1.15.1
daanx Sep 1, 2026
3bfdc2f
add MI_ALLOW_THP=[OFF,ON,FULL] and use the default of FULL for Linux …
daanx Sep 1, 2026
08939b9
merge from dev, bump version to v3.5.1
daanx Sep 1, 2026
dfe481f
bump vcpkg version to v3.5.1
daanx Sep 1, 2026
f16b45c
update readme
daanx Sep 1, 2026
34fbd7e
merge from dev
daanx Sep 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/dependabot.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
groups:
minor-and-patch:
patterns: ["*"]
update-types: ["minor", "patch"]
8 changes: 4 additions & 4 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ permissions:
contents: write

env:
RELEASE: Release v3.5.0
RELEASE: Release v3.5.1
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

name: Release
Expand All @@ -19,14 +19,14 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
branch: [v3.5.0, v2.5.0, v1.15.0] # [dev,dev2,dev3]
branch: [v3.5.1, v2.5.1, v1.15.1] # [dev,dev2,dev3]
# we build on the oldest ubuntu version for better binary compatibility.
os: [windows-latest, macOS-latest, macos-15-intel, ubuntu-22.04, ubuntu-22.04-arm]

steps:
# Checkout: https://github.com/actions/checkout
- name: Checkout repository
uses: actions/checkout@v6
uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
with:
ref: ${{ matrix.branch }}
fetch-tags: true
Expand All @@ -45,7 +45,7 @@ jobs:

# Create a release: https://github.com/softprops/action-gh-release (MIT license)
- name: Release
uses: softprops/action-gh-release@v3
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
if: ${{ env.RELEASE != '' && env.RELEASE != 'no' }}
with:
name: ${{ env.RELEASE }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/stale.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
- uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 # v10.4.0
with:
days-before-issue-stale: 360
days-before-issue-close: 14
Expand Down
291 changes: 174 additions & 117 deletions .github/workflows/test.yaml

Large diffs are not rendered by default.

175 changes: 130 additions & 45 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,13 @@ option(MI_OVERRIDE "Override the standard malloc interface (i.e. define
option(MI_XMALLOC "Enable abort() call on memory allocation failure by default" OFF)
option(MI_SHOW_ERRORS "Show error and warning messages by default (only enabled by default in DEBUG mode)" OFF)
option(MI_GUARDED "Build with guard pages behind certain object allocations (enabled by default in a debug build)" OFF)
option(MI_USE_CXX "Use the C++ compiler to compile the library (instead of the C compiler)" OFF)
option(MI_OPT_ARCH "Only for optimized builds: turn on architecture specific optimizations (for x64: '-march=haswell;-mavx2' (2013), for arm64: '-march=armv8.3-a' (2016), for riscV: '-march=rv64gcb_zacas' (2023))" OFF)

set(MI_USE_CXX "DEFAULT" CACHE STRING "Use the C++ compiler to compile the library (instead of the C compiler)")
set_property(CACHE MI_USE_CXX PROPERTY STRINGS "OFF" "ON" "DEFAULT")

set(MI_OPT_ARCH "DEFAULT" CACHE STRING "Only for optimized builds: turn on architecture specific optimizations (for x64: '-march=haswell;-mavx2' (2013), for arm64: '-march=armv8.1-a' (2016), for riscV: '-march=rv64gcb_zacas' (2023))")
set_property(CACHE MI_OPT_ARCH PROPERTY STRINGS "OFF" "ON" "avx2" "armv8.1" "armv8.3" "rva22" "rva23" "rv64gcb_zacas" "rv64gcb_zacas_zalasr" "DEFAULT")

option(MI_OPT_SIMD "Use SIMD instructions (requires MI_OPT_ARCH to be enabled)" OFF)

set(MI_FREE_IS_CHECKED "DEFAULT" CACHE STRING "Check for invalid pointers in 'mi_free': OFF, SHARED, ON, DEFAULT. 'SHARED' enables it only for the dynamic/shared library when MI_OVERRIDE is ON")
Expand All @@ -24,6 +29,9 @@ set_property(CACHE MI_DEBUG PROPERTY STRINGS "OFF" "ON" "INTERNAL" "FULL" "DEFAU
set(MI_TRACK "OFF" CACHE STRING "Enable tracking: OFF, ASAN (address sanitizer), VALGRIND, ETW (Windows event tracing). Adds a small overhead.")
set_property(CACHE MI_TRACK PROPERTY STRINGS "OFF" "ASAN" "VALGRIND" "ETW")

set(MI_ALLOW_THP "DEFAULT" CACHE STRING "Enable transparent huge pages on Linux: OFF, ON, FULL, DEFAULT. 'FULL' enables THP and also avoids splitting up huge pages during purging.")
set_property(CACHE MI_ALLOW_THP PROPERTY STRINGS "OFF" "ON" "FULL" "DEFAULT")

option(MI_DEBUG_TSAN "Build with thread sanitizer (needs clang)" OFF)
option(MI_DEBUG_UBSAN "Build with undefined-behavior sanitizer (needs clang++)" OFF)

Expand Down Expand Up @@ -132,6 +140,17 @@ if(EXISTS "${CMAKE_SOURCE_DIR}/.git/index")
endif()
endif()

# case insensitive comparison
function(STRIEQUAL str1 str2 is_equal)
string(TOUPPER "${str1}" str1_upper)
string(TOUPPER "${str2}" str2_upper)
if(str1_upper STREQUAL str2_upper)
set(${is_equal} TRUE PARENT_SCOPE)
else()
set(${is_equal} FALSE PARENT_SCOPE)
endif()
endfunction()

# -----------------------------------------------------------------------------
# Convenience: set default build type and compiler depending on the build directory
# -----------------------------------------------------------------------------
Expand Down Expand Up @@ -159,7 +178,18 @@ endif()


# Determine architecture
set(MI_OPT_ARCH_FLAGS "")
if(CMAKE_SIZEOF_VOID_P EQUAL 16)
set(MI_ARCH_BITS "128")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(MI_ARCH_BITS "64")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
set(MI_ARCH_BITS "32")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 2)
set(MI_ARCH_BITS "16")
else()
set(MI_ARCH_BITS "")
endif()

set(MI_ARCH "unknown")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86|i[3456]86)$" OR CMAKE_GENERATOR_PLATFORM MATCHES "^(x86|Win32)$")
set(MI_ARCH "x86")
Expand All @@ -170,15 +200,12 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|armv[89].?|ARM64)$" OR CM
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm|armv[34567].?|ARM)$")
set(MI_ARCH "arm32")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(riscv|riscv32|riscv64)$")
if(CMAKE_SIZEOF_VOID_P==4)
set(MI_ARCH "riscv32")
else()
set(MI_ARCH "riscv64")
endif()
set(MI_ARCH "riscv${MI_ARCH_BITS}")
else()
set(MI_ARCH ${CMAKE_SYSTEM_PROCESSOR})
endif()
message(STATUS "Architecture: ${MI_ARCH}") # (${CMAKE_SYSTEM_PROCESSOR}, ${CMAKE_GENERATOR_PLATFORM}, ${CMAKE_GENERATOR})")

message(STATUS "Architecture: ${MI_ARCH} (${MI_ARCH_BITS} bit)") # (${CMAKE_SYSTEM_PROCESSOR}, ${CMAKE_GENERATOR_PLATFORM}, ${CMAKE_GENERATOR})")

# negative overrides (mainly to support vcpkg features)
if(MI_NO_USE_CXX)
Expand All @@ -187,8 +214,14 @@ endif()

if(MI_NO_OPT_ARCH)
set(MI_OPT_ARCH "OFF")
elseif(MI_ARCH STREQUAL "arm64")
set(MI_OPT_ARCH "ON") # enable armv8.3-a by default (has LDAPR) on arm64 unless MI_NO_OPT_ARCH is set
endif()

if(MI_OPT_ARCH STREQUAL "DEFAULT")
if(MI_ARCH STREQUAL "arm64")
set(MI_OPT_ARCH "ON") # enable by default for arm64 (defaults to armv8.1-a which has fast atomics)
else()
set(MI_OPT_ARCH "OFF")
endif()
endif()

if(DEFINED ENV{MI_TEST_LIGHT})
Expand All @@ -204,11 +237,15 @@ if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_FRONTEND_VARIANT ST
set(MI_CLANG_CL "ON")
endif()

# force C++ compilation with msvc or clang-cl to use modern C++ atomics
if(CMAKE_C_COMPILER_ID MATCHES "MSVC|Intel" OR MI_CLANG_CL)
set(MI_USE_CXX "ON")
elseif(MI_DEBUG_UBSAN AND CMAKE_BUILD_TYPE MATCHES "Debug") # ubsan needs C++
set(MI_USE_CXX "ON")
if(MI_USE_CXX STREQUAL "DEFAULT")
if(CMAKE_C_COMPILER_ID MATCHES "MSVC|Intel" OR MI_CLANG_CL)
# force C++ compilation with msvc or clang-cl to use modern C++ atomics
set(MI_USE_CXX "ON")
elseif(MI_DEBUG_UBSAN AND CMAKE_BUILD_TYPE MATCHES "Debug") # ubsan needs C++
set(MI_USE_CXX "ON")
else()
set(MI_USE_CXX "OFF")
endif()
endif()

# enable C++ ?
Expand All @@ -217,6 +254,8 @@ if(MI_USE_CXX)
message(STATUS "Use the C++ compiler to compile (MI_USE_CXX=ON)")
if(CMAKE_CXX_COMPILER_ID MATCHES "Intel" AND NOT CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM")
list(APPEND mi_cflags -Kc++)
elseif(MSVC AND MSVC_VERSION GREATER_EQUAL 1914)
list(APPEND mi_cflags /Zc:__cplusplus)
endif()
endif()

Expand Down Expand Up @@ -344,7 +383,7 @@ if(MI_SEE_ASM)
if(CMAKE_C_COMPILER_ID MATCHES "MSVC" OR MI_CLANG_CL)
list(APPEND mi_cflags -FA)
else()
list(APPEND mi_cflags -save-temps)
list(APPEND mi_cflags -save-temps=obj)
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 14)
message(STATUS "No GNU Line marker")
list(APPEND mi_cflags -Wno-gnu-line-marker)
Expand Down Expand Up @@ -444,11 +483,9 @@ if(MI_FREE_USE_PAGEMAP)
endif()

# deprecated
if(MI_OPT_FREE_SMALL)
if(MI_OPT_FREE_SMALL)
if(MI_GUARDED OR MI_SECURE)
message(STATUS "Cannot enable MI_OPT_FREE_SMALL in secure or guarded mode (MI_OPT_FREE_SMALL=OFF)")
elseif(MI_OPT_FREE)
message(STATUS "Cannot enable MI_OPT_FREE_SMALL with MI_OPT_FREE (MI_OPT_FREE_SMALL=OFF)")
else()
message(STATUS "Use aligned `mi_free_small` (MI_OPT_FREE_SMALL=ON)")
list(APPEND mi_defines MI_OPT_FREE_SMALL=1)
Expand Down Expand Up @@ -497,7 +534,23 @@ endif()

if(CMAKE_SYSTEM_NAME MATCHES "Linux|Android")
if(MI_NO_THP)
message(STATUS "Disable transparent huge pages support (MI_NO_THP=ON)")
set(MI_ALLOW_THP "OFF")
endif()
if(MI_ALLOW_THP STREQUAL "DEFAULT")
if(CMAKE_SYSTEM_NAME MATCHES "Android")
set(MI_ALLOW_THP "OFF")
else()
set(MI_ALLOW_THP "FULL")
endif()
endif()
if(MI_ALLOW_THP STREQUAL "FULL")
message(STATUS "Enable full transparent huge pages support, where purging avoids splitting huge pages (MI_ALLOW_THP=FULL)")
list(APPEND mi_defines MI_DEFAULT_ALLOW_THP=2)
elseif (MI_ALLOW_THP)
message(STATUS "Enable transparent huge pages support (MI_ALLOW_THP=${MI_ALLOW_THP}) (also consider using FULL for better performance)")
list(APPEND mi_defines MI_DEFAULT_ALLOW_THP=1)
else()
message(STATUS "Disable transparent huge pages support (MI_ALLOW_THP=${MI_ALLOW_THP})")
list(APPEND mi_defines MI_DEFAULT_ALLOW_THP=0)
endif()
endif()
Expand Down Expand Up @@ -617,6 +670,9 @@ if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU" AND NOT MI_CLANG_CL)
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang")
list(APPEND mi_cflags -Wno-static-in-inline -mno-outline)
endif()
if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND MI_ARCH STREQUAL "arm64")
list(APPEND mi_cflags -Xclang -fno-split-cold-code)
endif()
endif()

if(CMAKE_C_COMPILER_ID MATCHES "Intel")
Expand Down Expand Up @@ -645,34 +701,62 @@ if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU|Intel")
endif()

# Compiler and architecture specific flags
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU|Intel" AND NOT CMAKE_SYSTEM_NAME MATCHES "Haiku")
if(MI_OPT_ARCH)
if(APPLE AND CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang" AND CMAKE_OSX_ARCHITECTURES) # to support multi-arch binaries (#999)
if("arm64" IN_LIST CMAKE_OSX_ARCHITECTURES)
list(APPEND MI_OPT_ARCH_FLAGS "-Xarch_arm64;-march=armv8.3-a")
endif()
if("x86_64" IN_LIST CMAKE_OSX_ARCHITECTURES)
list(APPEND MI_OPT_ARCH_FLAGS "-Xarch_x86_64;-march=haswell;-Xarch_x86_64;-mavx2")
endif()
elseif(MI_ARCH STREQUAL "x64")
set(MI_OPT_ARCH_FLAGS "-march=haswell;-mavx2") # fast bit scan (since 2013)
elseif(MI_ARCH STREQUAL "arm64")
set(MI_OPT_ARCH_FLAGS "-march=armv8.3-a") # fast atomics (since 2016)
elseif(MI_ARCH STREQUAL "riscv64")
set(MI_OPT_ARCH_FLAGS "-march=rv64gcb_zacas") # fast bit scan and atomics (since 2023) TODO: add zalasr (2025) when possible.
elseif(MI_ARCH STREQUAL "riscv32")
set(MI_OPT_ARCH_FLAGS "-march=rv32gcb_zacas") # fast bit scan and atomics (since 2023)
if(MI_OPT_ARCH MATCHES "^(1|ON|YES|TRUE|Y)$")
if(APPLE AND CMAKE_OSX_ARCHITECTURES AND CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang" )
set(MI_OPT_ARCH "ON")
elseif(MI_ARCH STREQUAL "arm64")
if(APPLE)
set(MI_OPT_ARCH "armv8.3") # M1+ supports arm8.3-a (which includes LDAPR (load-aquire))
else()
set(MI_OPT_ARCH "armv8.1") # enable armv8.1-a by default (which has fast atomics)
endif()
elseif(MI_ARCH STREQUAL "arm32")
set(MI_OPT_ARCH "armv8.1") # enable armv8.1-a by default (which has fast atomics)
elseif(MI_ARCH STREQUAL "x64")
set(MI_OPT_ARCH "avx2")
elseif(MI_ARCH MATCHES "riscv")
set(MI_OPT_ARCH "rv${MI_ARCH_BITS}gcb_zacas") # fast bit scan and atomics (since 2023)
# set(MI_OPT_ARCH "rv${MI_ARCH_BITS}gcb_zacas_zalasr") # fast bit scan and atomics (since 2025)
else()
set(MI_OPT_ARCH OFF)
endif()
endif()

if (MSVC AND MSVC_VERSION GREATER_EQUAL 1914) # vs2017+
list(APPEND mi_cflags /Zc:__cplusplus)
if(MI_OPT_ARCH AND NOT MI_CLANG_CL)
if(MI_ARCH STREQUAL "x64")
# Compiler and architecture specific flags
set(MI_OPT_ARCH_FLAGS "")
if(NOT MI_OPT_ARCH MATCHES "^(0|OFF|NO|FALSE|N)$")
# apple support for multi-arch binaries (#999)
if(APPLE AND CMAKE_OSX_ARCHITECTURES AND CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang")
if("arm64" IN_LIST CMAKE_OSX_ARCHITECTURES)
list(APPEND MI_OPT_ARCH_FLAGS "-Xarch_arm64;-march=armv8.3-a")
endif()
if("x86_64" IN_LIST CMAKE_OSX_ARCHITECTURES)
list(APPEND MI_OPT_ARCH_FLAGS "-Xarch_x86_64;-march=haswell;-Xarch_x86_64;-mavx2")
endif()

# clang/gcc
elseif(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU|Intel" AND NOT CMAKE_SYSTEM_NAME MATCHES "Haiku")
if(MI_OPT_ARCH STREQUAL "avx2")
set(MI_OPT_ARCH_FLAGS "-march=haswell;-mavx2") # fast bit scan (since 2013)
elseif(MI_OPT_ARCH MATCHES "^armv[89].*$")
set(MI_OPT_ARCH_FLAGS "-march=${MI_OPT_ARCH}-a") # fast atomics
elseif(MI_OPT_ARCH MATCHES "^rva[0-9][0-9]$")
set(MI_OPT_ARCH_FLAGS "-march=${MI_OPT_ARCH}u${MI_ARCH_BITS}")
elseif(MI_OPT_ARCH MATCHES "^rv.*$")
set(MI_OPT_ARCH_FLAGS "-march=${MI_OPT_ARCH}")
else()
set(MI_OPT_ARCH_FLAGS "-march=${MI_OPT_ARCH}")
message(STATUS "warning: unknown MI_OPT_ARCH=${MI_OPT_ARCH} passed as '-march=${MI_OPT_ARCH}'")
endif()

# msvc
elseif (MSVC AND MSVC_VERSION GREATER_EQUAL 1914 AND NOT MI_CLANG_CL) # vs2017+
if(MI_OPT_ARCH STREQUAL "avx2")
set(MI_OPT_ARCH_FLAGS "/arch:AVX2")
elseif(MI_ARCH STREQUAL "arm64")
set(MI_OPT_ARCH_FLAGS "/arch:armv8.3") # fast atomics (LDAPR)
elseif(MI_OPT_ARCH MATCHES "^armv[89].*$")
set(MI_OPT_ARCH_FLAGS "/arch:${MI_OPT_ARCH}") # fast atomics
else()
message(STATUS "warning: unknown MI_OPT_ARCH=${MI_OPT_ARCH} passed as '/arch:${MI_OPT_ARCH}'")
endif()
endif()
endif()
Expand All @@ -683,7 +767,7 @@ endif()

if(MI_OPT_ARCH_FLAGS)
list(APPEND mi_cflags ${MI_OPT_ARCH_FLAGS})
message(STATUS "Architecture specific optimization is enabled (with ${MI_OPT_ARCH_FLAGS}) (MI_OPT_ARCH=ON)")
message(STATUS "Architecture specific optimization is enabled (with ${MI_OPT_ARCH_FLAGS}) (MI_OPT_ARCH=${MI_OPT_ARCH})")
if (MI_OPT_SIMD)
list(APPEND mi_defines "MI_OPT_SIMD=1")
message(STATUS "SIMD instructions are enabled (MI_OPT_SIMD=ON)")
Expand All @@ -692,6 +776,7 @@ elseif(MI_OPT_SIMD)
message(STATUS "SIMD instructions are not enabled (either MI_OPT_ARCH=OFF or this architecture has no SIMD support)")
endif()


# extra needed libraries

# we prefer -l<lib> test over `find_library` as sometimes core libraries
Expand Down
2 changes: 1 addition & 1 deletion cmake/mimalloc-config-version.cmake
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
set(mi_version_major 3)
set(mi_version_minor 5)
set(mi_version_patch 0)
set(mi_version_patch 1)
set(mi_version ${mi_version_major}.${mi_version_minor})

set(PACKAGE_VERSION ${mi_version})
Expand Down
2 changes: 1 addition & 1 deletion contrib/vcpkg/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ vcpkg_from_github(
REPO microsoft/mimalloc
HEAD_REF master

# The "REF" can be a commit hash, branch name (dev3), or a version (v3.5.0).
# The "REF" can be a commit hash, branch name (dev3), or a version (v3.5.1).
REF "v${VERSION}"

# The sha512 is the hash of the tar.gz bundle.
Expand Down
2 changes: 1 addition & 1 deletion contrib/vcpkg/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mimalloc",
"version": "3.5.0",
"version": "3.5.1",
"port-version": 0,
"description": "Compact general purpose allocator with excellent performance",
"homepage": "https://github.com/microsoft/mimalloc",
Expand Down
Loading
Loading