diff --git a/.devcontainer/VERSION_MATRIX.md b/.devcontainer/VERSION_MATRIX.md
index 956ac5c..3a5b121 100644
--- a/.devcontainer/VERSION_MATRIX.md
+++ b/.devcontainer/VERSION_MATRIX.md
@@ -2,19 +2,25 @@
## Current
-| GHC | Cabal[^1] | Stack[^1] | HLS |
-|:----------------------------|:----------|:------------|:----------------------------------------------------------------------------------------------- |
-| latest
9.8.2
9.8
9 | 3.10.3.0 | ≥ 2.13.1 | latest
2.8.0.0
2.7.0.0
2.6.0.0 |
-| 9.8.1 | 3.10.2.1 | ≥ 2.13.1 | 2.6.0.0
2.5.0.0
2.4.0.0 |
-| 9.6.5
9.6 | 3.10.3.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0 |
-| 9.6.4 | 3.10.3.0 | ≥ 2.13.1 | 2.7.0.0
2.6.0.0 |
-| 9.6.3 | 3.10.1.0 | ≥ 2.13.1 | 2.5.0.0
2.4.0.0
2.3.0.0
2.2.0.0 |
-| 9.4.8
9.4 | 3.8.1.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0
2.6.0.0
2.5.0.0
2.4.0.0 |
-| 9.4.7 | 3.8.1.0 | ≥ 2.13.1 | 2.4.0.0
2.3.0.0
2.2.0.0
2.1.0.0
2.0.0.1 |
-| 9.2.8
9.2 | 3.6.2.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0
2.6.0.0
2.5.0.0
2.4.0.0
2.3.0.0
2.2.0.0
2.1.0.0
2.0.0.1 |
+| GHC | Cabal[^1] | Stack[^1] | HLS |
+|:------------------------------|:----------|:----------|:----------------------------- |
+| latest
9.10.1
9.10
9 | 3.11.0.0 | ≥ 2.13.1 | n/a |
+| 9.8.2
9.8 | 3.10.3.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0
2.6.0.0 |
+| 9.6.5
9.6 | 3.10.3.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0 |
[^1]: built-in version; see [GHC musl > Version Matrix](../VERSION_MATRIX.md)
+## Prior
+
+| GHC | Cabal[^1] | Stack[^1] | HLS |
+|:-------------|:----------|:----------|:----------------------------------------------------------------------------------------------- |
+| 9.8.1 | 3.10.2.1 | ≥ 2.13.1 | 2.6.0.0
2.5.0.0
2.4.0.0 |
+| 9.6.4 | 3.10.3.0 | ≥ 2.13.1 | 2.7.0.0
2.6.0.0 |
+| 9.6.3 | 3.10.1.0 | ≥ 2.13.1 | 2.5.0.0
2.4.0.0
2.3.0.0
2.2.0.0 |
+| 9.4.8
9.4 | 3.8.1.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0
2.6.0.0
2.5.0.0
2.4.0.0 |
+| 9.4.7 | 3.8.1.0 | ≥ 2.13.1 | 2.4.0.0
2.3.0.0
2.2.0.0
2.1.0.0
2.0.0.1 |
+| 9.2.8
9.2 | 3.6.2.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0
2.6.0.0
2.5.0.0
2.4.0.0
2.3.0.0
2.2.0.0
2.1.0.0
2.0.0.1 |
+
## Legacy
| GHC | Cabal[^1] | Stack[^2] | HLS |
diff --git a/.devcontainer/ghc-9.4/devcontainer.json b/.devcontainer/ghc-9.10/devcontainer.json
similarity index 82%
rename from .devcontainer/ghc-9.4/devcontainer.json
rename to .devcontainer/ghc-9.10/devcontainer.json
index 6b11434..c0e15c8 100644
--- a/.devcontainer/ghc-9.4/devcontainer.json
+++ b/.devcontainer/ghc-9.10/devcontainer.json
@@ -1,11 +1,10 @@
{
- "name": "GHC 9.4",
+ "name": "GHC 9.10 (latest)",
"build": {
"dockerfile": "../GHC.Dockerfile",
"context": "..",
"args": {
- "GHC_VERSION": "9.4",
- "HLS_VERSION": "2.8.0.0",
+ "GHC_VERSION": "9.10",
"USE_ZSH_FOR_ROOT": "unset-to-use-ash",
"SET_LANG": "C.UTF-8",
"SET_TZ": ""
@@ -58,13 +57,13 @@
// Set 'remoteUser' to 'root' to connect as root instead.
"remoteUser": "vscode",
- "workspaceMount": "source=ghc-musl-ghc-9.4-home-vscode,target=/home/vscode,type=volume",
- // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.4-home-vscode,target=/home/vscode,type=bind",
+ "workspaceMount": "source=ghc-musl-ghc-9.10-home-vscode,target=/home/vscode,type=volume",
+ // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.10-home-vscode,target=/home/vscode,type=bind",
"workspaceFolder": "/home/vscode",
// "remoteUser": "root",
- // "workspaceMount": "source=ghc-musl-ghc-9.4-root,target=/root,type=volume",
- // // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.4-root,target=/root,type=bind",
+ // "workspaceMount": "source=ghc-musl-ghc-9.10-root,target=/root,type=volume",
+ // // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.10-root,target=/root,type=bind",
// "workspaceFolder": "/root",
"remoteEnv": {
diff --git a/.devcontainer/ghc-9.2/devcontainer.json b/.devcontainer/ghc-9.2/devcontainer.json
deleted file mode 100644
index f64aeb9..0000000
--- a/.devcontainer/ghc-9.2/devcontainer.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- "name": "GHC 9.2 (recommended)",
- "build": {
- "dockerfile": "../GHC-legacy.Dockerfile",
- "context": "..",
- "args": {
- "GHC_VERSION": "9.2",
- "HLS_VERSION": "2.8.0.0",
- "STACK_VERSION": "2.11.1",
- "USE_ZSH_FOR_ROOT": "unset-to-use-ash",
- "SET_LANG": "C.UTF-8",
- "SET_TZ": ""
- }
- },
-
- "onCreateCommand": "onCreateCommand.sh",
- "postCreateCommand": "cabal update",
- "postAttachCommand": "${HOME}/.local/bin/checkForUpdates.sh",
-
- "features": {
- "ghcr.io/devcontainers/features/common-utils:2": {
- "configureZshAsDefaultShell": true,
- "upgradePackages": false,
- "username": "vscode",
- "userUid": "automatic",
- "userGid": "automatic"
- }
- },
-
- "customizations": {
- "vscode": {
- "extensions": [
- "alefragnani.project-manager",
- "christian-kohler.path-intellisense",
- "DavidAnson.vscode-markdownlint",
- "eamodio.gitlens@11.7.0",
- "editorconfig.editorconfig",
- "exiasr.hadolint",
- "GitHub.vscode-pull-request-github",
- "GitLab.gitlab-workflow",
- "haskell.haskell",
- "mhutchie.git-graph",
- "mutantdino.resourcemonitor",
- "piotrpalarz.vscode-gitignore-generator",
- "redhat.vscode-yaml",
- "timonwong.shellcheck"
- ],
- "settings": {
- "gitlab.aiAssistedCodeSuggestions.enabled": false,
- "gitlab.duoChat.enabled": false,
- "gitlens.showWelcomeOnInstall": false,
- "gitlens.showWhatsNewAfterUpgrades": false,
- "haskell.manageHLS": "PATH",
- "resmon.show.battery": false,
- "resmon.show.cpufreq": false
- }
- }
- },
-
- // Set 'remoteUser' to 'root' to connect as root instead.
- "remoteUser": "vscode",
- "workspaceMount": "source=ghc-musl-ghc-9.2-home-vscode,target=/home/vscode,type=volume",
- // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.2-home-vscode,target=/home/vscode,type=bind",
- "workspaceFolder": "/home/vscode",
-
- // "remoteUser": "root",
- // "workspaceMount": "source=ghc-musl-ghc-9.2-root,target=/root,type=volume",
- // // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.2-root,target=/root,type=bind",
- // "workspaceFolder": "/root",
-
- "remoteEnv": {
- // Pip: Install packages to the user site
- "PIP_USER": "1"
- }
-}
diff --git a/.devcontainer/ghc-9.6/devcontainer.json b/.devcontainer/ghc-9.6/devcontainer.json
index 736197a..e489ed3 100644
--- a/.devcontainer/ghc-9.6/devcontainer.json
+++ b/.devcontainer/ghc-9.6/devcontainer.json
@@ -1,11 +1,12 @@
{
- "name": "GHC 9.6",
+ "name": "GHC 9.6 (recommended)",
"build": {
"dockerfile": "../GHC.Dockerfile",
"context": "..",
"args": {
"GHC_VERSION": "9.6",
- "HLS_VERSION": "2.8.0.0",
+ "HLS_VERSION": "2.7.0.0",
+ "STACK_VERSION": "2.15.5",
"USE_ZSH_FOR_ROOT": "unset-to-use-ash",
"SET_LANG": "C.UTF-8",
"SET_TZ": ""
diff --git a/.devcontainer/ghc-9.8/devcontainer.json b/.devcontainer/ghc-9.8/devcontainer.json
index b35e890..70cf528 100644
--- a/.devcontainer/ghc-9.8/devcontainer.json
+++ b/.devcontainer/ghc-9.8/devcontainer.json
@@ -1,5 +1,5 @@
{
- "name": "GHC 9.8 (latest)",
+ "name": "GHC 9.8",
"build": {
"dockerfile": "../GHC.Dockerfile",
"context": "..",
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3decb8b..9c4108c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,12 +1,12 @@
.env:
variables:
- GHC_VERSION: "9.8.2"
- CABAL_VERSION: "3.10.3.0"
+ GHC_VERSION: "9.10.1"
+ CABAL_VERSION: "3.12.0.0-prerelease"
STACK_VERSION: "2.15.7"
HLS_VERSION: "2.8.0.0"
BUILD_GHC: "true"
- BUILD_HLS: "true"
- TAG_VERSION_MAJ_MIN: "true"
+ BUILD_HLS: "false"
+ TAG_VERSION_MAJ_MIN: "false"
TAG_VERSION_MAJ: "false"
.before-script-build: &before-script-build
diff --git a/README.md b/README.md
index 19d8e61..69193c6 100644
--- a/README.md
+++ b/README.md
@@ -53,8 +53,8 @@ To install docker, follow the instructions for your platform:
```bash
docker build \
- --build-arg GHC_VERSION=9.8.2 \
- --build-arg CABAL_VERSION=3.10.3.0 \
+ --build-arg GHC_VERSION=9.10.1 \
+ --build-arg CABAL_VERSION=3.12.0.0-prerelease \
--build-arg STACK_VERSION=2.15.7 \
-t ghc-musl \
-f latest.Dockerfile .
diff --git a/VERSION_MATRIX.md b/VERSION_MATRIX.md
index 9f6331f..9cb6264 100644
--- a/VERSION_MATRIX.md
+++ b/VERSION_MATRIX.md
@@ -4,6 +4,7 @@ Topmost entry = Tag `latest`
| GHC | Cabal | Stack | LLVM | Linux distro |
|:-----------|:---------|:-----------|:---- |:-------------|
+| 9.10.1 | 3.11.0.0 | 2.15.7 | 18 | Alpine 3.20 |
| 9.8.2 | 3.10.3.0 | 2.15.7 | 16 | Alpine 3.20 |
| 9.8.1 | 3.10.2.1 | 2.15.1 | 14 | Alpine 3.19 |
| 9.6.5 | 3.10.3.0 | 2.15.7 | 16 | Alpine 3.20 |
diff --git a/latest.Dockerfile b/latest.Dockerfile
index 0b90abe..7c073f6 100644
--- a/latest.Dockerfile
+++ b/latest.Dockerfile
@@ -5,7 +5,7 @@ ARG STACK_VERSION
ARG GHC_VERSION_BUILD=${GHC_VERSION}
ARG CABAL_VERSION_BUILD=${CABAL_VERSION}
-FROM glcr.b-data.ch/ghc/ghc-musl:9.6.5 as bootstrap
+FROM glcr.b-data.ch/ghc/ghc-musl:9.8.2 as bootstrap
RUN apk upgrade --no-cache \
&& apk add --no-cache \
@@ -13,13 +13,14 @@ RUN apk upgrade --no-cache \
automake \
binutils-gold \
build-base \
+ clang18 \
coreutils \
cpio \
curl \
gnupg \
linux-headers \
libffi-dev \
- llvm14 \
+ llvm18 \
ncurses-dev \
perl \
python3 \
@@ -32,18 +33,23 @@ ARG GHC_VERSION_BUILD
ENV GHC_VERSION=${GHC_VERSION_BUILD}
+COPY patches/${GHC_VERSION}.patch /tmp/
+
RUN cd /tmp \
&& curl -sSLO https://downloads.haskell.org/~ghc/"$GHC_VERSION"/ghc-"$GHC_VERSION"-src.tar.xz \
&& curl -sSLO https://downloads.haskell.org/~ghc/"$GHC_VERSION"/ghc-"$GHC_VERSION"-src.tar.xz.sig \
&& gpg --keyserver hkps://keyserver.ubuntu.com:443 \
- --receive-keys 88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4 || \
+ --receive-keys FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD || \
gpg --keyserver hkp://keyserver.ubuntu.com:80 \
- --receive-keys 88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4 \
+ --receive-keys FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD \
&& gpg --verify "ghc-$GHC_VERSION-src.tar.xz.sig" "ghc-$GHC_VERSION-src.tar.xz" \
&& tar -xJf "ghc-$GHC_VERSION-src.tar.xz" \
&& cd "ghc-$GHC_VERSION" \
+ # Apply patches
+ && mv "/tmp/$GHC_VERSION.patch" . \
+ && patch -p0 <"$GHC_VERSION.patch" \
&& ./boot.source \
- && ./configure --disable-ld-override LD=ld.gold \
+ && ./configure \
## Use the LLVM backend
## Switch llvm-targets from unknown-linux-gnueabihf->alpine-linux
## so we can match the llvm vendor string alpine uses
@@ -51,6 +57,8 @@ RUN cd /tmp \
&& sed -i -e 's/unknown-linux-gnueabi/alpine-linux/g' llvm-targets \
&& sed -i -e 's/unknown-linux-gnu/alpine-linux/g' llvm-targets \
&& cabal update \
+ && cabal install alex \
+ && export PATH=/root/.local/bin:$PATH \
## See https://unix.stackexchange.com/questions/519092/what-is-the-logic-of-using-nproc-1-in-make-command
&& hadrian/build binary-dist -j"$(($(nproc)+1))" \
--flavour=perf+llvm+split_sections \
@@ -65,9 +73,9 @@ ENV CABAL_VERSION=${CABAL_VERSION_BUILD}
## Build Cabal (the tool) with the GHC bootstrap version
RUN cabal update \
## See https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history
- && cabal install "cabal-install-$CABAL_VERSION"
+ && cabal install cabal-install-3.10.3.0
-FROM alpine:3.19 as ghc-base
+FROM alpine:3.20 as ghc-base
LABEL org.opencontainers.image.licenses="MIT" \
org.opencontainers.image.source="https://gitlab.b-data.ch/ghc/ghc-musl" \
@@ -88,6 +96,7 @@ RUN apk add --no-cache \
bzip2 \
bzip2-dev \
bzip2-static \
+ clang18 \
curl \
curl-static \
dpkg \
@@ -97,7 +106,7 @@ RUN apk add --no-cache \
libcurl \
libffi \
libffi-dev \
- llvm14 \
+ llvm18 \
ncurses-dev \
ncurses-static \
openssl-dev \
@@ -124,7 +133,7 @@ RUN cd /tmp \
## Install GHC
&& tar -xJf ghc-"$GHC_VERSION"-*-alpine-linux.tar.xz \
&& cd ghc-"$GHC_VERSION"-*-alpine-linux \
- && ./configure --disable-ld-override \
+ && ./configure \
&& make install \
## Install Stack
&& cd /tmp \
@@ -142,8 +151,14 @@ FROM ghc-stage1 as ghc-stage2
COPY --from=bootstrap-cabal /root/.local/bin/cabal /usr/local/bin/cabal
## Rebuild Cabal (the tool) with the GHC target version
-RUN cabal update \
- && cabal install "cabal-install-$CABAL_VERSION"
+RUN cd /tmp \
+ && curl -sSLO https://github.com/haskell/cabal/archive/refs/tags/cabal-install-v"$CABAL_VERSION".tar.gz \
+ && tar -xzf cabal-install-v"$CABAL_VERSION".tar.gz \
+ && cd cabal-cabal-install-v"$CABAL_VERSION" \
+ && sed -i 's/2024-03-20T08:02:24Z/2024-04-02T17:52:00Z/g' cabal.project.release \
+ && sed -i 's/hashable >= 1.0 /hashable >= 1.4.4.0 /g' cabal-install/cabal-install.cabal \
+ && cabal update \
+ && cabal install --project-file=cabal.project.release --allow-newer cabal-install
FROM ghc-stage1 as test
diff --git a/patches/9.10.1.patch b/patches/9.10.1.patch
new file mode 100644
index 0000000..4dd9938
--- /dev/null
+++ b/patches/9.10.1.patch
@@ -0,0 +1,11 @@
+--- configure.ac
++++ configure.ac.patched
+@@ -492,7 +492,7 @@
+ # versions of LLVM simultaneously, but that stopped working around
+ # 3.5/3.6 release of LLVM.
+ LlvmMinVersion=13 # inclusive
+-LlvmMaxVersion=16 # not inclusive
++LlvmMaxVersion=19 # not inclusive
+ AC_SUBST([LlvmMinVersion])
+ AC_SUBST([LlvmMaxVersion])
+