Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/build-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ jobs:
build_ref: ${{ needs.trigger.outputs.sha }}
release_tag: ${{ needs.trigger.outputs.release_tag }}
is_prerelease: true
llvm_version: '19'
llvm_version: '20'

notify:
name: Notify Completion
Expand Down
10 changes: 6 additions & 4 deletions .github/workflows/build-reusable.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
name: Build WebKit (Reusable)

env:
LLVM_VERSION: 19
# Use LLVM 20 for macOS - LLVM 21 has libc++ ABI compatibility issues
# with macOS system libc++ (missing std::__1::__hash_memory)
LLVM_VERSION: 20

on:
workflow_call:
Expand All @@ -21,7 +23,7 @@ on:
llvm_version:
description: 'LLVM version to use'
type: string
default: '19'
default: '20'
outputs:
release_tag:
description: 'The release tag that was created'
Expand Down Expand Up @@ -268,7 +270,7 @@ jobs:
run: |
"C:\Program Files\7-Zip" >> $Env:GITHUB_PATH
scoop config use_external_7zip true
scoop install ninja llvm@19.1.7
scoop install ninja llvm@20.1.8
Join-Path (Resolve-Path ~).Path "scoop\apps\llvm\current\bin" >> $Env:GITHUB_PATH
Comment on lines 271 to 274
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

Scoop package llvm 20.1.8 availability main bucket

💡 Result:

No — the Scoop main bucket's llvm manifest shows version 16.0.0, not 20.1.8. [1][2]

If you need LLVM 20.1.8 you can get it from other packaging channels (Homebrew formula llvm@20 shows 20.1.8; conda/Anaconda also lists 20.1.8). [3][4]

Sources:

  • Scoop main llvm manifest (current version 16.0.0). [1]
  • Homebrew llvm@20 (stable 20.1.8). [3]
  • LLVM 20.1.8 release / Anaconda listings. [2][4]

Remove or replace llvm@20.1.8 with an available Scoop package version.

The Scoop main bucket only provides LLVM 16.0.0, not 20.1.8. Line 273 will fail when attempting to install a non-existent package version. Either use the direct download approach applied to ARM64 or specify an available version (16.0.0). Verify this is intentional before proceeding.

🤖 Prompt for AI Agents
In @.github/workflows/build-reusable.yml around lines 271 - 274, The workflow
attempts to install a non-existent Scoop package "llvm@20.1.8" (see the line
"scoop install ninja llvm@20.1.8"); replace it with a valid package/version such
as "llvm" or "llvm@16.0.0" or implement the same direct-download fallback used
for ARM64 instead of pinning 20.1.8, and ensure the surrounding commands ("scoop
config use_external_7zip true" and the PATH update via Join-Path ...) still
point to the correct installed LLVM bin so the PATH update remains correct.

- name: Install LLVM and Ninja (ARM64)
if: matrix.platform == 'ARM64'
Expand All @@ -277,7 +279,7 @@ jobs:
scoop config use_external_7zip true
scoop install ninja
# Install LLVM ARM64 from official LLVM releases
# Use LLVM 21 for ARM64 - has better Windows ARM64 support and fixes SEH unwind bugs
# Using official releases since Scoop may not have ARM64 LLVM
$llvmVersion = "21.1.8"
$llvmUrl = "https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvmVersion/LLVM-$llvmVersion-woa64.exe"
$llvmPath = "C:\LLVM"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
inputs:
llvm_version:
description: "LLVM version"
default: "19"
default: "20"

jobs:
build:
Expand All @@ -22,4 +22,4 @@ jobs:
build_ref: ${{ github.sha }}
release_tag: autobuild-${{ github.sha }}
is_prerelease: false
llvm_version: ${{ inputs.llvm_version || '19' }}
llvm_version: ${{ inputs.llvm_version || '20' }}
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ARG WEBKIT_RELEASE_TYPE=Release
ARG CPU=native
ARG LTO_FLAG="-flto=full -fwhole-program-vtables -fforce-emit-vtables "
ARG RELEASE_FLAGS="-O3 -DNDEBUG=1"
ARG LLVM_VERSION="19"
ARG LLVM_VERSION="20"
ARG DEFAULT_CFLAGS="-mno-omit-leaf-frame-pointer -g -fno-omit-frame-pointer -ffunction-sections -fdata-sections -faddrsig -fno-unwind-tables -fno-asynchronous-unwind-tables -DU_STATIC_IMPLEMENTATION=1 "
ARG ENABLE_SANITIZERS=""

Expand Down Expand Up @@ -71,10 +71,10 @@ RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 130 \
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-13 \
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-13

# Install LLVM 19
# Install LLVM 20
RUN wget https://apt.llvm.org/llvm.sh \
&& chmod +x llvm.sh \
&& ./llvm.sh 19 all \
&& ./llvm.sh 20 all \
&& rm llvm.sh \
&& rm -rf /var/lib/apt/lists/*

Expand Down
18 changes: 9 additions & 9 deletions Dockerfile.musl
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ ARG MARCH_FLAG=""
ARG WEBKIT_RELEASE_TYPE=Release
ARG CPU=native
ARG LTO_FLAG="-flto=full -fwhole-program-vtables -fforce-emit-vtables "
ARG LLVM_VERSION="19"
ARG LLVM_VERSION="21"
ARG DEFAULT_CFLAGS="-mno-omit-leaf-frame-pointer -g -fno-omit-frame-pointer -ffunction-sections -fdata-sections -faddrsig -fno-unwind-tables -fno-asynchronous-unwind-tables -DU_STATIC_IMPLEMENTATION=1 "

FROM alpine:3.21 as base
FROM alpine:3.23 as base

ARG MARCH_FLAG
ARG WEBKIT_RELEASE_TYPE
Expand All @@ -15,13 +15,13 @@ ARG LLVM_VERSION
ARG DEFAULT_CFLAGS

RUN apk update
RUN apk add --no-cache cmake make clang19 clang19-static clang19-dev llvm19-dev llvm19-static musl-dev git lld libgcc gcc g++ libstdc++ build-base lld-dev llvm19-libs libc-dev xz zlib zlib-dev libxml2 libxml2-dev
RUN apk add --no-cache cmake make clang21 clang21-static clang21-dev llvm21-dev llvm21-static musl-dev git lld libgcc gcc g++ libstdc++ build-base lld-dev llvm21-libs libc-dev xz zlib zlib-dev libxml2 libxml2-dev

ENV CXX=clang++-19
ENV CC=clang-19
ENV LDFLAGS='-L/usr/include -L/usr/include/llvm19'
ENV CXXFLAGS="-I/usr/include -I/usr/include/llvm19"
ENV PATH="/usr/bin:/usr/local/bin:/zig/bin:/usr/lib/llvm19/bin:$PATH"
ENV CXX=clang++-21
ENV CC=clang-21
ENV LDFLAGS='-L/usr/include -L/usr/include/llvm21'
ENV CXXFLAGS="-I/usr/include -I/usr/include/llvm21"
ENV PATH="/usr/bin:/usr/local/bin:/zig/bin:/usr/lib/llvm21/bin:$PATH"
Comment on lines +20 to +24
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Align LLVM paths with actual Alpine package layout (and de-duplicate with LLVM_VERSION).

-L currently points to include directories, and the llvm21 include/lib locations may be under /usr/lib/llvm21/{include,lib} on Alpine. If so, update these paths and use ${LLVM_VERSION} to avoid hardcoding.

♻️ Proposed adjustment (verify actual paths first)
-ENV CXX=clang++-21
-ENV CC=clang-21
-ENV LDFLAGS='-L/usr/include -L/usr/include/llvm21'
-ENV CXXFLAGS="-I/usr/include -I/usr/include/llvm21"
-ENV PATH="/usr/bin:/usr/local/bin:/zig/bin:/usr/lib/llvm21/bin:$PATH"
+ENV CXX=clang++-${LLVM_VERSION}
+ENV CC=clang-${LLVM_VERSION}
+ENV LDFLAGS="-L/usr/lib/llvm${LLVM_VERSION}/lib"
+ENV CXXFLAGS="-I/usr/lib/llvm${LLVM_VERSION}/include"
+ENV PATH="/usr/bin:/usr/local/bin:/zig/bin:/usr/lib/llvm${LLVM_VERSION}/bin:$PATH"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
ENV CXX=clang++-21
ENV CC=clang-21
ENV LDFLAGS='-L/usr/include -L/usr/include/llvm21'
ENV CXXFLAGS="-I/usr/include -I/usr/include/llvm21"
ENV PATH="/usr/bin:/usr/local/bin:/zig/bin:/usr/lib/llvm21/bin:$PATH"
ENV CXX=clang++-${LLVM_VERSION}
ENV CC=clang-${LLVM_VERSION}
ENV LDFLAGS="-L/usr/lib/llvm${LLVM_VERSION}/lib"
ENV CXXFLAGS="-I/usr/lib/llvm${LLVM_VERSION}/include"
ENV PATH="/usr/bin:/usr/local/bin:/zig/bin:/usr/lib/llvm${LLVM_VERSION}/bin:$PATH"
🤖 Prompt for AI Agents
In `@Dockerfile.musl` around lines 20 - 24, The Dockerfile sets LLVM paths
incorrectly and hardcodes "21": update the ENV entries (CXX, CC, LDFLAGS,
CXXFLAGS, PATH) to use the LLVM_VERSION variable and correct include vs lib dirs
(use -I for includes under /usr/lib/llvm${LLVM_VERSION}/include and -L for libs
under /usr/lib/llvm${LLVM_VERSION}/lib), remove duplicated hardcoded "21"
occurrences, and ensure PATH points to /usr/lib/llvm${LLVM_VERSION}/bin; verify
the actual Alpine package layout first and replace the current
CXX/CC/LDFLAGS/CXXFLAGS/PATH values accordingly.

ENV CPU=${CPU}
ENV MARCH_FLAG=${MARCH_FLAG}
ENV WEBKIT_OUT_DIR=/webkitbuild
Expand Down Expand Up @@ -66,7 +66,7 @@ ARG LTO_FLAG
ARG LLVM_VERSION
ARG DEFAULT_CFLAGS

RUN apk add --no-cache cpio curl file gnupg ninja ruby unzip rsync perl python3 openssl-dev openssl linux-headers
RUN apk add --no-cache cpio curl file gnupg ninja ruby ruby-getoptlong unzip rsync perl python3 openssl-dev openssl linux-headers

ENV WEBKIT_OUT_DIR=/webkitbuild
# These are unnecessary on musl
Expand Down