diff --git a/.github/workflows/build-reusable.yml b/.github/workflows/build-reusable.yml index 1ff4c62345c8..f87b4ba39097 100644 --- a/.github/workflows/build-reusable.yml +++ b/.github/workflows/build-reusable.yml @@ -182,6 +182,20 @@ jobs: package_json_arch: "x64" CMAKE_BUILD_TYPE: "Release" RELEASE_FLAGS: "-O3 -DNDEBUG=1" + - lto_flag: "-flto=full -fwhole-program-vtables -fforce-emit-vtables" + label: bun-webkit-linux-amd64-baseline-lto + os: linux-x64-gh + package_json_arch: "x64" + CMAKE_BUILD_TYPE: "Release" + RELEASE_FLAGS: "-O3 -DNDEBUG=1" + MARCH_FLAG: "-march=nehalem" + - lto_flag: "" + label: bun-webkit-linux-amd64-baseline + os: linux-x64-gh + package_json_arch: "x64" + CMAKE_BUILD_TYPE: "Release" + RELEASE_FLAGS: "-O3 -DNDEBUG=1" + MARCH_FLAG: "-march=nehalem" - lto_flag: "" label: bun-webkit-linux-amd64-asan os: linux-x64-gh @@ -218,8 +232,8 @@ jobs: rm -rf ${{runner.temp}}/bun-webkit ${{runner.temp}}/bun-webkit.tar.gz if [ "${{matrix.package_json_arch}}" = "arm64" ]; then export MARCH_FLAG="-march=armv8-a+crc -mtune=ampere1" - elif [ "${{matrix.package_json_arch}}" = "x64" ]; then - export MARCH_FLAG="-march=nehalem" + else + export MARCH_FLAG="${{ matrix.MARCH_FLAG || '-march=haswell' }}" fi WEBKIT_RELEASE_TYPE=${{matrix.CMAKE_BUILD_TYPE}} CPU="native" cpu=native LTO_FLAG="${{matrix.lto_flag}}" temp=${{runner.temp}} ENABLE_SANITIZERS="${{matrix.ENABLE_SANITIZERS}}" bash release.sh cd ${{runner.temp}} @@ -248,6 +262,12 @@ jobs: package_json_arch: "x64" label: bun-webkit-windows-amd64-debug platform: x64 + - runner: windows + build-type: Release + package_json_arch: "x64" + label: bun-webkit-windows-amd64-baseline + platform: x64 + baseline: true - runner: windows-11-arm build-type: Release package_json_arch: "arm64" @@ -312,7 +332,8 @@ jobs: $env:GITHUB_SHA = "${{ inputs.build_ref }}" $env:PACKAGE_JSON_ARCH = "${{matrix.package_json_arch}}" $env:GITHUB_REPOSITORY = "${{ github.repository }}" - ./windows-release.ps1 -Platform ${{matrix.platform}} + $baselineArg = if ("${{ matrix.baseline }}" -eq "true") { @("-Baseline") } else { @() } + ./windows-release.ps1 -Platform ${{matrix.platform}} @baselineArg - uses: actions/upload-artifact@v4 with: name: ${{matrix.label}} @@ -354,6 +375,18 @@ jobs: os: linux-x64-gh package_json_arch: "x64" CMAKE_BUILD_TYPE: "MinSizeRel" + - lto_flag: "-flto=full -fwhole-program-vtables -fforce-emit-vtables" + label: bun-webkit-linux-amd64-musl-baseline-lto + os: linux-x64-gh + package_json_arch: "x64" + CMAKE_BUILD_TYPE: "MinSizeRel" + MARCH_FLAG: "-march=nehalem" + - lto_flag: "" + label: bun-webkit-linux-amd64-musl-baseline + os: linux-x64-gh + package_json_arch: "x64" + CMAKE_BUILD_TYPE: "MinSizeRel" + MARCH_FLAG: "-march=nehalem" timeout-minutes: 90 steps: - uses: actions/checkout@v4 @@ -373,8 +406,8 @@ jobs: rm -rf ${{runner.temp}}/bun-webkit ${{runner.temp}}/bun-webkit.tar.gz if [ "${{matrix.package_json_arch}}" = "arm64" ]; then export MARCH_FLAG="-march=armv8-a+crc -mtune=ampere1" - elif [ "${{matrix.package_json_arch}}" = "x64" ]; then - export MARCH_FLAG="-march=nehalem" + else + export MARCH_FLAG="${{ matrix.MARCH_FLAG || '-march=haswell' }}" fi WEBKIT_RELEASE_TYPE=${{matrix.CMAKE_BUILD_TYPE}} CPU="native" cpu=native LTO_FLAG="${{matrix.lto_flag}}" temp=${{runner.temp}} bash musl-release.sh cd ${{runner.temp}} @@ -477,10 +510,22 @@ jobs: with: name: bun-webkit-linux-arm64-lto path: ${{runner.temp}}/bun-webkit-linux-arm64-lto + - uses: actions/download-artifact@v4 + with: + name: bun-webkit-linux-amd64-baseline + path: ${{runner.temp}}/bun-webkit-linux-amd64-baseline + - uses: actions/download-artifact@v4 + with: + name: bun-webkit-linux-amd64-baseline-lto + path: ${{runner.temp}}/bun-webkit-linux-amd64-baseline-lto - uses: actions/download-artifact@v4 with: name: bun-webkit-windows-amd64 path: ${{runner.temp}}/bun-webkit-windows-amd64 + - uses: actions/download-artifact@v4 + with: + name: bun-webkit-windows-amd64-baseline + path: ${{runner.temp}}/bun-webkit-windows-amd64-baseline - uses: actions/download-artifact@v4 with: name: bun-webkit-windows-amd64-debug @@ -517,6 +562,14 @@ jobs: with: name: bun-webkit-linux-arm64-musl-lto path: ${{runner.temp}}/bun-webkit-linux-arm64-musl-lto + - uses: actions/download-artifact@v4 + with: + name: bun-webkit-linux-amd64-musl-baseline + path: ${{runner.temp}}/bun-webkit-linux-amd64-musl-baseline + - uses: actions/download-artifact@v4 + with: + name: bun-webkit-linux-amd64-musl-baseline-lto + path: ${{runner.temp}}/bun-webkit-linux-amd64-musl-baseline-lto - name: Rename files run: | @@ -541,9 +594,14 @@ jobs: mv ${{runner.temp}}/bun-webkit-macos-amd64-debug/bun-webkit.tar.gz ./out/bun-webkit-macos-amd64-debug.tar.gz mv ${{runner.temp}}/bun-webkit-linux-amd64-lto/bun-webkit.tar.gz ./out/bun-webkit-linux-amd64-lto.tar.gz mv ${{runner.temp}}/bun-webkit-linux-arm64-lto/bun-webkit.tar.gz ./out/bun-webkit-linux-arm64-lto.tar.gz + mv ${{runner.temp}}/bun-webkit-linux-amd64-baseline/bun-webkit.tar.gz ./out/bun-webkit-linux-amd64-baseline.tar.gz + mv ${{runner.temp}}/bun-webkit-linux-amd64-baseline-lto/bun-webkit.tar.gz ./out/bun-webkit-linux-amd64-baseline-lto.tar.gz mv ${{runner.temp}}/bun-webkit-linux-amd64-musl-lto/bun-webkit.tar.gz ./out/bun-webkit-linux-amd64-musl-lto.tar.gz mv ${{runner.temp}}/bun-webkit-linux-arm64-musl-lto/bun-webkit.tar.gz ./out/bun-webkit-linux-arm64-musl-lto.tar.gz + mv ${{runner.temp}}/bun-webkit-linux-amd64-musl-baseline/bun-webkit.tar.gz ./out/bun-webkit-linux-amd64-musl-baseline.tar.gz + mv ${{runner.temp}}/bun-webkit-linux-amd64-musl-baseline-lto/bun-webkit.tar.gz ./out/bun-webkit-linux-amd64-musl-baseline-lto.tar.gz mv ${{runner.temp}}/bun-webkit-windows-amd64/bun-webkit.tar.gz ./out/bun-webkit-windows-amd64.tar.gz + mv ${{runner.temp}}/bun-webkit-windows-amd64-baseline/bun-webkit.tar.gz ./out/bun-webkit-windows-amd64-baseline.tar.gz mv ${{runner.temp}}/bun-webkit-windows-amd64-debug/bun-webkit.tar.gz ./out/bun-webkit-windows-amd64-debug.tar.gz mv ${{runner.temp}}/bun-webkit-windows-arm64/bun-webkit.tar.gz ./out/bun-webkit-windows-arm64.tar.gz mv ${{runner.temp}}/bun-webkit-windows-arm64-debug/bun-webkit.tar.gz ./out/bun-webkit-windows-arm64-debug.tar.gz @@ -568,6 +626,8 @@ jobs: ./out/bun-webkit-linux-arm64.tar.gz ./out/bun-webkit-linux-amd64-lto.tar.gz ./out/bun-webkit-linux-arm64-lto.tar.gz + ./out/bun-webkit-linux-amd64-baseline.tar.gz + ./out/bun-webkit-linux-amd64-baseline-lto.tar.gz ./out/bun-webkit-linux-amd64-asan.tar.gz ./out/bun-webkit-linux-arm64-asan.tar.gz ./out/bun-webkit-linux-amd64-debug.tar.gz @@ -583,6 +643,8 @@ jobs: ./out/bun-webkit-linux-arm64-musl.tar.gz ./out/bun-webkit-linux-amd64-musl-lto.tar.gz ./out/bun-webkit-linux-arm64-musl-lto.tar.gz + ./out/bun-webkit-linux-amd64-musl-baseline.tar.gz + ./out/bun-webkit-linux-amd64-musl-baseline-lto.tar.gz ./out/bun-webkit-linux-amd64-musl-debug.tar.gz ./out/bun-webkit-linux-arm64-musl-debug.tar.gz @@ -602,6 +664,7 @@ jobs: tag_name: ${{ inputs.release_tag }} files: | ./out/bun-webkit-windows-amd64.tar.gz + ./out/bun-webkit-windows-amd64-baseline.tar.gz ./out/bun-webkit-windows-amd64-debug.tar.gz ./out/bun-webkit-windows-arm64.tar.gz ./out/bun-webkit-windows-arm64-debug.tar.gz diff --git a/build-icu.ps1 b/build-icu.ps1 index 78472f4cc3d6..2ceca7608c55 100644 --- a/build-icu.ps1 +++ b/build-icu.ps1 @@ -16,7 +16,9 @@ param( [ValidateSet("Release", "Debug")] [string]$BuildType = "Release", - [string]$OutputDir = "" + [string]$OutputDir = "", + + [switch]$Baseline ) $ErrorActionPreference = "Stop" @@ -73,6 +75,12 @@ if (-not (Test-Path $ICU_SOURCE_DIR)) { if ($LASTEXITCODE -ne 0) { throw "tar failed with exit code $LASTEXITCODE" } } +if ($Platform -eq "x64") { + $ArchFlag = if ($Baseline) { "/arch:SSE2" } else { "/arch:AVX2" } +} else { + $ArchFlag = "" +} + # --- Function to patch vcxproj files for static library build with /MT --- function Patch-IcuVcxProj { param( @@ -106,6 +114,10 @@ function Patch-IcuVcxProj { $content = $content -replace '()', '$1U_STATIC_IMPLEMENTATION;' } + if ($ArchFlag) { + $content = $content -replace '()', "`$1`n $ArchFlag %(AdditionalOptions)" + } + # Disable /GL - lld-link cannot read LTCG object files $content = $content -replace 'true', 'false' diff --git a/mac-release.bash b/mac-release.bash index 31c0e6510999..aedb064c03c6 100755 --- a/mac-release.bash +++ b/mac-release.bash @@ -10,7 +10,7 @@ THIS_DIR=$(pwd) # Set default values for environment variables that are not set. CMAKE_C_COMPILER=${CMAKE_C_COMPILER:-clang-21} -CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER:-clang++} +CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER:-clang++-21} CMAKE_C_FLAGS=${CMAKE_C_FLAGS:-} CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS:-} CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release} diff --git a/windows-release.ps1 b/windows-release.ps1 index fab4c9b7d8b1..63c18ed15652 100644 --- a/windows-release.ps1 +++ b/windows-release.ps1 @@ -1,6 +1,8 @@ param( [ValidateSet("x64", "ARM64")] - [string]$Platform = "x64" + [string]$Platform = "x64", + + [switch]$Baseline ) $ErrorActionPreference = "Stop" @@ -41,6 +43,15 @@ clang-cl.exe --version $env:CC = "clang-cl" $env:CXX = "clang-cl" +if ($Platform -eq "ARM64") { + $MarchFlag = "/clang:-march=armv8-a+crc /clang:-mtune=ampere1" +} elseif ($Baseline) { + $MarchFlag = "/clang:-march=nehalem" +} else { + $MarchFlag = "/clang:-march=haswell" +} +Write-Host ":: WebKit codegen floor: $MarchFlag" + $output = if ($env:WEBKIT_OUTPUT_DIR) { $env:WEBKIT_OUTPUT_DIR } else { "bun-webkit" } $WebKitBuild = if ($env:WEBKIT_BUILD_DIR) { $env:WEBKIT_BUILD_DIR } else { "WebKitBuild" } $CMAKE_BUILD_TYPE = if ($env:CMAKE_BUILD_TYPE) { $env:CMAKE_BUILD_TYPE } else { "Release" } @@ -52,7 +63,7 @@ $ICU_STATIC_LIBRARY = Join-Path $ICU_STATIC_ROOT "lib" $ICU_STATIC_INCLUDE_DIR = Join-Path $ICU_STATIC_ROOT "include" $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path -& "$ScriptDir/build-icu.ps1" -Platform $Platform -BuildType $CMAKE_BUILD_TYPE -OutputDir $ICU_STATIC_ROOT +& "$ScriptDir/build-icu.ps1" -Platform $Platform -BuildType $CMAKE_BUILD_TYPE -OutputDir $ICU_STATIC_ROOT -Baseline:$Baseline if ($LASTEXITCODE -ne 0) { throw "build-icu.ps1 failed with exit code $LASTEXITCODE" } Write-Host ":: Configuring WebKit" @@ -108,10 +119,10 @@ cmake -S . -B $WebKitBuild ` "-DCMAKE_C_COMPILER=${ClangPath}" ` "-DCMAKE_CXX_COMPILER=${ClangPath}" ` "-DCMAKE_LINKER=${LldLinkPath}" ` - "-DCMAKE_C_FLAGS_RELEASE=/Zi /O2 /Ob2 /DNDEBUG /DU_STATIC_IMPLEMENTATION ${ARM64SehWorkaround}" ` - "-DCMAKE_CXX_FLAGS_RELEASE=/Zi /O2 /Ob2 /DNDEBUG /DU_STATIC_IMPLEMENTATION /clang:-fno-c++-static-destructors ${ARM64SehWorkaround}" ` - "-DCMAKE_C_FLAGS_DEBUG=/Zi /FS /O0 /Ob0 /DU_STATIC_IMPLEMENTATION ${ARM64SehWorkaround}" ` - "-DCMAKE_CXX_FLAGS_DEBUG=/Zi /FS /O0 /Ob0 /DU_STATIC_IMPLEMENTATION /clang:-fno-c++-static-destructors ${ARM64SehWorkaround}" ` + "-DCMAKE_C_FLAGS_RELEASE=/Zi /O2 /Ob2 /DNDEBUG /DU_STATIC_IMPLEMENTATION ${MarchFlag} ${ARM64SehWorkaround}" ` + "-DCMAKE_CXX_FLAGS_RELEASE=/Zi /O2 /Ob2 /DNDEBUG /DU_STATIC_IMPLEMENTATION ${MarchFlag} /clang:-fno-c++-static-destructors ${ARM64SehWorkaround}" ` + "-DCMAKE_C_FLAGS_DEBUG=/Zi /FS /O0 /Ob0 /DU_STATIC_IMPLEMENTATION ${MarchFlag} ${ARM64SehWorkaround}" ` + "-DCMAKE_CXX_FLAGS_DEBUG=/Zi /FS /O0 /Ob0 /DU_STATIC_IMPLEMENTATION ${MarchFlag} /clang:-fno-c++-static-destructors ${ARM64SehWorkaround}" ` -DENABLE_REMOTE_INSPECTOR=ON ` "-DCMAKE_MSVC_RUNTIME_LIBRARY=${CmakeMsvcRuntimeLibrary}" ` -G Ninja