Skip to content

Commit

Permalink
Update mimalloc to v3.0.1 and enable mimalloc for win/arm64 (BCNY)
Browse files Browse the repository at this point in the history
  • Loading branch information
hjyamauchi committed Jan 27, 2025
1 parent 4919907 commit 9513c85
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 14 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build-toolchain.yml
Original file line number Diff line number Diff line change
Expand Up @@ -227,14 +227,14 @@ jobs:
branch_name="release/$branch_version_string"
fi
repo init --quiet --groups default --depth 1 -u https://github.com/compnerd/swift-build -b $branch_name
repo init --quiet --groups default --depth 1 -u https://github.com/thebrowsercompany/swift-build -b hiroshi/mimallocarm64
repo sync --quiet --no-clone-bundle --no-tags --jobs $(nproc --all)
if [[ "${{ inputs.swift_tag }}" != "" ]] ; then
tee -a "${GITHUB_OUTPUT}" <<-EOF
indexstore_db_revision=refs/tags/${{ inputs.swift_tag }}
llvm_project_revision=refs/tags/${{ inputs.swift_tag }}
mimalloc_revision=refs/tags/v2.1.7
mimalloc_revision=refs/tags/v3.0.1
sourcekit_lsp_revision=refs/tags/${{ inputs.swift_tag }}
swift_revision=refs/tags/${{ inputs.swift_tag }}
swift_argument_parser_revision=refs/tags/1.4.0
Expand Down
32 changes: 22 additions & 10 deletions .github/workflows/swift-toolchain.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3430,22 +3430,31 @@ jobs:
}
- uses: actions/checkout@v4
if: matrix.arch == 'amd64'
with:
repository: microsoft/mimalloc
ref: ${{ inputs.mimalloc_revision }}
path: ${{ github.workspace }}/SourceCache/mimalloc

- name: Build and apply mimalloc
if: matrix.arch == 'amd64'
run: |
$HostMSArch = if ("${{ matrix.arch }}" -eq "amd64") { "x64" } else { "arm64" }
$HostSuffix = if ("${{ matrix.arch }}" -eq "amd64") { "" } else { "-arm64" }
$BuildSuffix = if ("${{ inputs.build_arch }}" -eq "amd64") { "" } else { "-arm64" }
# Reference: https://github.com/microsoft/mimalloc/tree/dev/bin#minject
msbuild ${{ github.workspace }}\SourceCache\mimalloc\ide\vs2022\mimalloc.sln -p:Configuration=Release
msbuild ${{ github.workspace }}\SourceCache\mimalloc\ide\vs2022\mimalloc.sln -p:Configuration=Release -p:Platform=$HostMSArch
$ToolchainBin = "${{ github.workspace }}\BuildRoot\Library\Developer\Toolchains\unknown-Asserts-development.xctoolchain\usr\bin"
Copy-Item -Path "${{ github.workspace }}\SourceCache\mimalloc\out\msvc-x64\Release\mimalloc-override.dll" `
-Destination "$ToolchainBin"
Copy-Item -Path "${{ github.workspace }}\SourceCache\mimalloc\out\msvc-x64\Release\mimalloc-redirect.dll" `
Copy-Item -Path "${{ github.workspace }}\SourceCache\mimalloc\out\msvc-$HostMSArch\Release\mimalloc.dll" `
-Destination "$ToolchainBin"
# We always use the file name "mimalloc-redirect.dll" at the
# destination even on arm64. Copy and rename as such. This
# is because the arm64 minject, which would use the "-arm64"
# suffix name, won't run on win/x64 but the x64 minject,
# which uses the unsuffixed name, runs both on x64 and arm64
# in the cross-compile build.
Copy-Item -Path "${{ github.workspace }}\SourceCache\mimalloc\out\msvc-$HostMSArch\Release\mimalloc-redirect$HostSuffix.dll" `
-Destination "$ToolchainBin/mimalloc-redirect$BuildSuffix.dll"
#-Destination "$ToolchainBin"
#-Destination "$ToolchainBin/mimalloc-redirect.dll"
$MimallocExecutables = @("swift.exe",
"swiftc.exe",
"swift-driver.exe",
Expand All @@ -3458,22 +3467,25 @@ jobs:
"ld.lld.exe",
"ld64.lld.exe")
foreach ($Exe in $MimallocExecutables) {
# Binary-patch in place
${{ github.workspace }}\SourceCache\mimalloc\bin\minject -f -i -v "$ToolchainBin\$Exe"
# Binary-patch in place. This always uses the x64 minject even on
# win/arm64 via emulation for the above reason.
& "${{ github.workspace }}\SourceCache\mimalloc\bin\minject$BuildSuffix" -f -i -v "$ToolchainBin\$Exe"
# Log the import table
${{ github.workspace }}\SourceCache\mimalloc\bin\minject -l "$ToolchainBin\$Exe"
& "${{ github.workspace }}\SourceCache\mimalloc\bin\minject$BuildSuffix" -l "$ToolchainBin\$Exe"
}
- name: Package Build Tools
run: |
$MIMALLOC_REDIRECT_SUFFIX = = if ("${{ inputs.build_arch }}" -eq "amd64") { "" } else { "-arm64" }
msbuild -nologo -restore -maxCpuCount `
-p:BaseOutputPath=${{ github.workspace }}\BinaryCache\installer\ `
-p:Configuration=Release `
-p:SignOutput=${{ inputs.signed }} `
-p:CERTIFICATE=${env:CERTIFICATE} `
-p:PASSPHRASE=${{ secrets.PASSPHRASE }} `
-p:TOOLCHAIN_ROOT=${{ github.workspace }}/BuildRoot/Library/Developer/Toolchains/unknown-Asserts-development.xctoolchain `
-p:ENABLE_MIMALLOC=${{ matrix.arch == 'amd64' && 'true' || 'false' }} `
-p:ENABLE_MIMALLOC=true `
-p:MIMALLOC_REDIRECT_SUFFIX=$MIMALLOC_REDIRECT_SUFFIX `
-p:ProductArchitecture=${{ matrix.arch }} `
-p:ProductVersion=${{ inputs.swift_version }} `
${{ github.workspace }}/SourceCache/swift-installer-scripts/platforms/Windows/bld/bld.wixproj
Expand Down
4 changes: 2 additions & 2 deletions default.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
<project remote="github" name="swiftlang/swift-format" path="swift-format" />
<project remote="github" name="swiftlang/swift-foundation" path="swift-foundation" />
<project remote="github" name="swiftlang/swift-foundation-icu" path="swift-foundation-icu" />
<project remote="github" name="swiftlang/swift-installer-scripts" path="swift-installer-scripts" />
<project remote="github" name="hjyamauchi/swift-installer-scripts" path="swift-installer-scripts" revision="mimallocv3.0.1" />
<project remote="github" name="swiftlang/swift-llbuild" path="llbuild" />
<project remote="github" name="swiftlang/swift-lmdb" path="swift-lmdb" />
<project remote="github" name="apple/swift-log" path="swift-log" groups="notdefault" />
Expand Down Expand Up @@ -63,7 +63,7 @@

<project remote="github" name="madler/zlib" path="zlib" revision="refs/tags/v1.3.1" />

<project remote="github" name="microsoft/mimalloc" path="mimalloc" revision="refs/tags/v2.1.7" />
<project remote="github" name="microsoft/mimalloc" path="mimalloc" revision="refs/tags/v3.0.1" />

<project remote="github" name="ninja-build/ninja" path="ninja" groups="notdefault,dependencies" revision="master" />
</manifest>

0 comments on commit 9513c85

Please sign in to comment.