@@ -1685,7 +1685,6 @@ function Build-Compilers() {
1685
1685
}
1686
1686
1687
1687
# Reference: https://github.com/microsoft/mimalloc/tree/dev/bin#minject
1688
- # TODO: Add ARM64
1689
1688
function Build-Mimalloc () {
1690
1689
[CmdletBinding (PositionalBinding = $false )]
1691
1690
param
@@ -1694,15 +1693,11 @@ function Build-Mimalloc() {
1694
1693
[hashtable ]$Arch
1695
1694
)
1696
1695
1697
- if ($Arch -ne $ArchX64 ) {
1698
- throw " mimalloc is currently supported for X64 only"
1699
- }
1700
-
1701
1696
$MSBuildArgs = @ (" $SourceCache \mimalloc\ide\vs2022\mimalloc.sln" )
1702
1697
$MSBuildArgs += " -noLogo"
1703
1698
$MSBuildArgs += " -maxCpuCount"
1704
1699
$MSBuildArgs += " -p:Configuration=Release"
1705
- $MSBuildArgs += " -p:ProductArchitecture =$ ( $Arch.VSName ) "
1700
+ $MSBuildArgs += " -p:Platform =$ ( $Arch.ShortName ) "
1706
1701
1707
1702
Isolate- EnvVars {
1708
1703
Invoke-VsDevShell $Arch
@@ -1715,9 +1710,17 @@ function Build-Mimalloc() {
1715
1710
1716
1711
Invoke-Program $msbuild @MSBuildArgs
1717
1712
1718
- $Products = @ ( " mimalloc-override.dll" , " mimalloc-redirect.dll" )
1713
+ $HostSuffix = if ($Arch -eq $ArchX64 ) { " " } else { " -arm64" }
1714
+ $BuildSuffix = if ($BuildArch -eq $ArchX64 ) { " " } else { " -arm64" }
1715
+ $Products = @ ( " mimalloc.dll" )
1719
1716
foreach ($Product in $Products ) {
1720
- Copy-Item - Path " $SourceCache \mimalloc\out\msvc-$ ( $Arch.ShortName ) \Release\$Product " - Destination " $ ( Arch.ToolchainInstallRoot) \usr\bin"
1717
+ Copy-Item - Path " $SourceCache \mimalloc\out\msvc-$ ( $Arch.ShortName ) \Release\$Product " - Destination " $ ( $Arch.ToolchainInstallRoot ) \usr\bin"
1718
+ }
1719
+ Copy-Item - Path " $SourceCache \mimalloc\out\msvc-$ ( $Arch.ShortName ) \Release\mimalloc-redirect$HostSuffix .dll" - Destination " $ ( $Arch.ToolchainInstallRoot ) \usr\bin"
1720
+ # When cross-compiling, bundle the second mimalloc redirect dll as a workaround for
1721
+ # https://github.com/microsoft/mimalloc/issues/997
1722
+ if ($IsCrossCompiling ) {
1723
+ Copy-Item - Path " $SourceCache \mimalloc\out\msvc-$ ( $Arch.ShortName ) \Release\mimalloc-redirect$HostSuffix .dll" - Destination " $ ( $Arch.ToolchainInstallRoot ) \usr\bin\mimalloc-redirect$BuildSuffix .dll"
1721
1724
}
1722
1725
1723
1726
$Tools = @ (
@@ -1734,11 +1737,11 @@ function Build-Mimalloc() {
1734
1737
" ld64.lld.exe"
1735
1738
)
1736
1739
foreach ($Tool in $Tools ) {
1737
- $Binary = [IO.Path ]::Combine($Dest , $Tool )
1740
+ $Binary = [IO.Path ]::Combine(" $ ( $Arch .ToolchainInstallRoot ) \usr\bin " , $Tool )
1738
1741
# Binary-patch in place
1739
- Invoke-Program " $SourceCache \mimalloc\bin\minject" @ ( " -f" , " -i" , " -v" , $Binary )
1742
+ Invoke-Program " $SourceCache \mimalloc\bin\minject$BuildSuffix " " -f" " -i" " -v" " $Binary "
1740
1743
# Log the import table
1741
- Invoke-Program " $SourceCache \mimalloc\bin\minject" @ ( " -l" , $Binary )
1744
+ Invoke-Program " $SourceCache \mimalloc\bin\minject$BuildSuffix " " -l" " $Binary "
1742
1745
}
1743
1746
}
1744
1747
@@ -2924,12 +2927,16 @@ function Build-Installer($Arch) {
2924
2927
# TODO(hjyamauchi) Re-enable the swift-inspect and swift-docc builds
2925
2928
# when cross-compiling https://github.com/apple/swift/issues/71655
2926
2929
$INCLUDE_SWIFT_DOCC = if ($IsCrossCompiling ) { " false" } else { " true" }
2927
- $ENABLE_MIMALLOC = if ($Allocator -eq " mimalloc" -and $Arch -eq $ArchX64 ) { " true" } else { " false" }
2930
+ $ENABLE_MIMALLOC = if ($Allocator -eq " mimalloc" ) { " true" } else { " false" }
2931
+ # When cross-compiling, bundle the second mimalloc redirect dll as a workaround for
2932
+ # https://github.com/microsoft/mimalloc/issues/997
2933
+ $WORKAROUND_MIMALLOC_ISSUE_997 = if ($IsCrossCompiling ) { " true" } else { " false" }
2928
2934
2929
2935
$Properties = @ {
2930
2936
BundleFlavor = " offline" ;
2931
2937
TOOLCHAIN_ROOT = " $ ( $Arch.ToolchainInstallRoot ) \" ;
2932
2938
ENABLE_MIMALLOC = $ENABLE_MIMALLOC ;
2939
+ WORKAROUND_MIMALLOC_ISSUE_997 = $WORKAROUND_MIMALLOC_ISSUE_997 ;
2933
2940
INCLUDE_SWIFT_DOCC = $INCLUDE_SWIFT_DOCC ;
2934
2941
SWIFT_DOCC_BUILD = " $ ( $Arch.BinaryCache ) \swift-docc\release" ;
2935
2942
SWIFT_DOCC_RENDER_ARTIFACT_ROOT = " ${SourceCache} \swift-docc-render-artifact" ;
0 commit comments