Skip to content

Commit a406051

Browse files
committed
feat: build Talos with support for x86-64-v2 microarchitecture
See https://github.com/golang/go/wiki/MinimumRequirements#microarchitecture-support This relies on new Go 1.18 feature to use more efficient x86-64 instructions. Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
1 parent 8faebd4 commit a406051

File tree

3 files changed

+27
-8
lines changed

3 files changed

+27
-8
lines changed

Dockerfile

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,8 @@ FROM base AS init-build-amd64
278278
WORKDIR /src/internal/app/init
279279
ARG GO_BUILDFLAGS
280280
ARG GO_LDFLAGS
281-
RUN --mount=type=cache,target=/.cache GOOS=linux GOARCH=amd64 go build ${GO_BUILDFLAGS} -ldflags "${GO_LDFLAGS}" -o /init
281+
ARG GOAMD64
282+
RUN --mount=type=cache,target=/.cache GOOS=linux GOARCH=amd64 GOAMD64=${GOAMD64} go build ${GO_BUILDFLAGS} -ldflags "${GO_LDFLAGS}" -o /init
282283
RUN chmod +x /init
283284

284285
FROM base AS init-build-arm64
@@ -299,7 +300,8 @@ FROM base AS machined-build-amd64
299300
WORKDIR /src/internal/app/machined
300301
ARG GO_BUILDFLAGS
301302
ARG GO_LDFLAGS
302-
RUN --mount=type=cache,target=/.cache GOOS=linux GOARCH=amd64 go build ${GO_BUILDFLAGS} -ldflags "${GO_LDFLAGS}" -o /machined
303+
ARG GOAMD64
304+
RUN --mount=type=cache,target=/.cache GOOS=linux GOARCH=amd64 GOAMD64=${GOAMD64} go build ${GO_BUILDFLAGS} -ldflags "${GO_LDFLAGS}" -o /machined
303305
RUN chmod +x /machined
304306

305307
FROM base AS machined-build-arm64
@@ -320,7 +322,8 @@ FROM base AS talosctl-linux-amd64-build
320322
WORKDIR /src/cmd/talosctl
321323
ARG GO_BUILDFLAGS
322324
ARG GO_LDFLAGS
323-
RUN --mount=type=cache,target=/.cache GOOS=linux GOARCH=amd64 go build ${GO_BUILDFLAGS} -ldflags "${GO_LDFLAGS}" -o /talosctl-linux-amd64
325+
ARG GOAMD64
326+
RUN --mount=type=cache,target=/.cache GOOS=linux GOARCH=amd64 GOAMD64=${GOAMD64} go build ${GO_BUILDFLAGS} -ldflags "${GO_LDFLAGS}" -o /talosctl-linux-amd64
324327
RUN chmod +x /talosctl-linux-amd64
325328

326329
FROM base AS talosctl-linux-arm64-build
@@ -355,7 +358,8 @@ FROM base AS talosctl-darwin-amd64-build
355358
WORKDIR /src/cmd/talosctl
356359
ARG GO_BUILDFLAGS
357360
ARG GO_LDFLAGS
358-
RUN --mount=type=cache,target=/.cache GOOS=darwin GOARCH=amd64 go build ${GO_BUILDFLAGS} -ldflags "${GO_LDFLAGS}" -o /talosctl-darwin-amd64
361+
ARG GOAMD64
362+
RUN --mount=type=cache,target=/.cache GOOS=darwin GOARCH=amd64 GOAMD64=${GOAMD64} go build ${GO_BUILDFLAGS} -ldflags "${GO_LDFLAGS}" -o /talosctl-darwin-amd64
359363
RUN chmod +x /talosctl-darwin-amd64
360364

361365
FROM base AS talosctl-darwin-arm64-build
@@ -373,7 +377,8 @@ FROM base AS talosctl-windows-amd64-build
373377
WORKDIR /src/cmd/talosctl
374378
ARG GO_BUILDFLAGS
375379
ARG GO_LDFLAGS
376-
RUN --mount=type=cache,target=/.cache GOOS=windows GOARCH=amd64 go build ${GO_BUILDFLAGS} -ldflags "${GO_LDFLAGS}" -o /talosctl-windows-amd64.exe
380+
ARG GOAMD64
381+
RUN --mount=type=cache,target=/.cache GOOS=windows GOARCH=amd64 GOAMD64=${GOAMD64} go build ${GO_BUILDFLAGS} -ldflags "${GO_LDFLAGS}" -o /talosctl-windows-amd64.exe
377382

378383
FROM scratch AS talosctl-windows
379384
COPY --from=talosctl-windows-amd64-build /talosctl-windows-amd64.exe /talosctl-windows-amd64.exe
@@ -655,7 +660,8 @@ RUN --security=insecure --mount=type=cache,id=testspace,target=/tmp --mount=type
655660
FROM base AS integration-test-linux-build
656661
ARG GO_BUILDFLAGS
657662
ARG GO_LDFLAGS
658-
RUN --mount=type=cache,target=/.cache GOOS=linux GOARCH=amd64 go test -v -c ${GO_BUILDFLAGS} \
663+
ARG GOAMD64
664+
RUN --mount=type=cache,target=/.cache GOOS=linux GOARCH=amd64 GOAMD64=${GOAMD64} go test -v -c ${GO_BUILDFLAGS} \
659665
-ldflags "${GO_LDFLAGS}" \
660666
-tags integration,integration_api,integration_cli,integration_k8s \
661667
./internal/integration
@@ -666,7 +672,8 @@ COPY --from=integration-test-linux-build /src/integration.test /integration-test
666672
FROM base AS integration-test-darwin-build
667673
ARG GO_BUILDFLAGS
668674
ARG GO_LDFLAGS
669-
RUN --mount=type=cache,target=/.cache GOOS=darwin GOARCH=amd64 go test -v -c ${GO_BUILDFLAGS} \
675+
ARG GOAMD64
676+
RUN --mount=type=cache,target=/.cache GOOS=darwin GOARCH=amd64 GOAMD64=${GOAMD64} go test -v -c ${GO_BUILDFLAGS} \
670677
-ldflags "${GO_LDFLAGS}" \
671678
-tags integration,integration_api,integration_cli,integration_k8s \
672679
./internal/integration
@@ -679,7 +686,8 @@ COPY --from=integration-test-darwin-build /src/integration.test /integration-tes
679686
FROM base AS integration-test-provision-linux-build
680687
ARG GO_BUILDFLAGS
681688
ARG GO_LDFLAGS
682-
RUN --mount=type=cache,target=/.cache GOOS=linux GOARCH=amd64 go test -v -c ${GO_BUILDFLAGS} \
689+
ARG GOAMD64
690+
RUN --mount=type=cache,target=/.cache GOOS=linux GOARCH=amd64 GOAMD64=${GOAMD64} go test -v -c ${GO_BUILDFLAGS} \
683691
-ldflags "${GO_LDFLAGS}" \
684692
-tags integration,integration_provision \
685693
./internal/integration

Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ INSTALLER_ARCH ?= all
4444
CGO_ENABLED ?= 0
4545
GO_BUILDFLAGS ?=
4646
GO_LDFLAGS ?=
47+
GOAMD64 ?= v2
4748

4849
WITH_RACE ?= false
4950
WITH_DEBUG ?= false
@@ -90,6 +91,7 @@ COMMON_ARGS += --build-arg=INSTALLER_ARCH=$(INSTALLER_ARCH)
9091
COMMON_ARGS += --build-arg=CGO_ENABLED=$(CGO_ENABLED)
9192
COMMON_ARGS += --build-arg=GO_BUILDFLAGS="$(GO_BUILDFLAGS)"
9293
COMMON_ARGS += --build-arg=GO_LDFLAGS="$(GO_LDFLAGS)"
94+
COMMON_ARGS += --build-arg=GOAMD64="$(GOAMD64)"
9395
COMMON_ARGS += --build-arg=http_proxy=$(http_proxy)
9496
COMMON_ARGS += --build-arg=https_proxy=$(https_proxy)
9597
COMMON_ARGS += --build-arg=NAME=$(NAME)

hack/release.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ preface = """\
2222
* Kubernetes: 1.24.0-beta.0
2323
* Flannel: 0.17.0
2424
* runc: 1.1.1
25+
26+
Talos is built with Go 1.18.
2527
"""
2628

2729
[notes.eudev]
@@ -76,6 +78,13 @@ plugins:
7678
```
7779
7880
The policy is part of the Talos machine configuration, and it can be modified to suite your needs.
81+
"""
82+
83+
[notes.x86_64]
84+
title = "x86-64 Architecture"
85+
description="""\
86+
Talos is built for x86-64 architecture with support for [x86-64-v2 microarchitecture level](https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels),
87+
so Talos no longer runs on processors supporting only baseline `x86-64` microarchitecture (before 2009).
7988
"""
8089

8190
[make_deps]

0 commit comments

Comments
 (0)