Skip to content
Merged
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
94 changes: 73 additions & 21 deletions eng/dockerfile-templates/sdk/Dockerfile.linux.aot
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,80 @@
set isUbuntu to find(OS_ARCH_HYPHENATED, "Ubuntu") >= 0 ^
set ubuntuVersion to when(find(OS_VERSION, "jammy") >= 0, "jammy", "noble") ^

_ Native AOT only requires gcc. Native AOT in .NET really only needs a linker and something to drive the linker.
The runtime falls back to using gcc to drive linking when clang is not present, and both use the same bfd linker
under the hood, so dropping clang/llvm meaningfully shrinks the image. This optimization was made in .NET 11,
hence the conditional below. ^
set useGcc to dotnetVersion != "8.0" && dotnetVersion != "9.0" && dotnetVersion != "10.0" ^

_ The gcc package alone isn't always sufficient to link Native AOT binaries:
- Alpine: gcc pulls in binutils, but musl-dev (crt objects/headers) must be added.
- Azure Linux 3.0: gcc pulls in neither binutils (objcopy/ld) nor glibc-devel
(crt objects and -ldl/-lrt), so both are added explicitly.
- Azure Linux 4.0 and Ubuntu: gcc transitively pulls in binutils and libc dev
packages, so gcc alone is enough.
Installing these specific packages avoids the much larger build-base /
build-essential meta-packages that bundle make, g++, autotools, etc. ^

set pkgs to cat(sort(
when(isAlpine,
[
"build-base",
"clang",
"zlib-dev"
],
when(isAzureLinux,
when(OS_VERSION_NUMBER = "3.0",
[
"build-essential",
"clang",
"zlib-devel"
],
[
"gcc"
]),
[
"clang",
"zlib1g-dev",
"llvm"
]))))
when(
useGcc,
when(
isAlpine,
[
"gcc",
"musl-dev",
"zlib-dev"
],
when(
isAzureLinux,
when(
OS_VERSION_NUMBER = "3.0",
[
"binutils",
"gcc",
"glibc-devel",
"zlib-devel"
],
[
"gcc"
]
),
[
"gcc",
"zlib1g-dev"
]
)
),
when(
isAlpine,
[
"build-base",
"clang",
"zlib-dev"
],
when(
isAzureLinux,
when(
OS_VERSION_NUMBER = "3.0",
[
"build-essential",
"clang",
"zlib-devel"
],
[
"gcc"
]
),
[
"clang",
"zlib1g-dev",
"llvm"
]
)
)
)
))

}}ARG REPO=mcr.microsoft.com/dotnet/sdk
FROM {{baseImageTag}}
Expand Down
4 changes: 2 additions & 2 deletions src/sdk/11.0/alpine3.23-aot/amd64/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ ARG REPO=mcr.microsoft.com/dotnet/sdk
FROM $REPO:11.0.100-preview.5-alpine3.23-amd64

RUN apk add --upgrade --no-cache \
build-base \
clang \
gcc \
musl-dev \
zlib-dev
4 changes: 2 additions & 2 deletions src/sdk/11.0/alpine3.23-aot/arm64v8/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ ARG REPO=mcr.microsoft.com/dotnet/sdk
FROM $REPO:11.0.100-preview.5-alpine3.23-arm64v8

RUN apk add --upgrade --no-cache \
build-base \
clang \
gcc \
musl-dev \
zlib-dev
5 changes: 3 additions & 2 deletions src/sdk/11.0/azurelinux3.0-aot/amd64/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ ARG REPO=mcr.microsoft.com/dotnet/sdk
FROM $REPO:11.0.100-preview.5-azurelinux3.0-amd64

RUN tdnf install -y \
build-essential \
clang \
binutils \
gcc \
glibc-devel \
zlib-devel \
&& tdnf clean all
5 changes: 3 additions & 2 deletions src/sdk/11.0/azurelinux3.0-aot/arm64v8/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ ARG REPO=mcr.microsoft.com/dotnet/sdk
FROM $REPO:11.0.100-preview.5-azurelinux3.0-arm64v8

RUN tdnf install -y \
build-essential \
clang \
binutils \
gcc \
glibc-devel \
zlib-devel \
&& tdnf clean all
3 changes: 1 addition & 2 deletions src/sdk/11.0/resolute-aot/amd64/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ FROM $REPO:11.0.100-preview.5-resolute-amd64

RUN apt-get update \
&& apt-get install -y --no-install-recommends \
clang \
llvm \
gcc \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
3 changes: 1 addition & 2 deletions src/sdk/11.0/resolute-aot/arm64v8/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ FROM $REPO:11.0.100-preview.5-resolute-arm64v8

RUN apt-get update \
&& apt-get install -y --no-install-recommends \
clang \
llvm \
gcc \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading