diff --git a/Makefile b/Makefile index 2b8824fd3..71c49244f 100644 --- a/Makefile +++ b/Makefile @@ -15,6 +15,7 @@ DOCKER ?= docker MKDIR ?= mkdir TR ?= tr +CC ?= cc DIST_DIR ?= $(CURDIR)/dist include $(CURDIR)/common.mk @@ -40,6 +41,7 @@ DOCKERFILE_DEVEL ?= "images/devel/Dockerfile" DOCKERFILE_CONTEXT ?= "https://github.com/NVIDIA/k8s-test-infra.git" GOOS ?= linux +GOARCH ?= $(shell uname -m | sed -e 's,aarch64,arm64,' -e 's,x86_64,amd64,') ifeq ($(VERSION),) CLI_VERSION = $(LIB_VERSION)$(if $(LIB_TAG),-$(LIB_TAG)) else @@ -53,15 +55,16 @@ cmd-%: COMMAND_BUILD_OPTIONS = -o $(PREFIX)/$(*) endif cmds: $(CMD_TARGETS) $(CMD_TARGETS): cmd-%: - CGO_LDFLAGS_ALLOW='-Wl,--unresolved-symbols=ignore-in-object-files' GOOS=$(GOOS) \ + CGO_LDFLAGS_ALLOW='-Wl,--unresolved-symbols=ignore-in-object-files' \ + CC=$(CC) CGO_ENABLED=1 GOOS=$(GOOS) GOARCH=$(GOARCH) \ go build -ldflags "-s -w -X $(CLI_VERSION_PACKAGE).gitCommit=$(GIT_COMMIT) -X $(CLI_VERSION_PACKAGE).version=$(CLI_VERSION)" $(COMMAND_BUILD_OPTIONS) $(MODULE)/cmd/$(*) build: - GOOS=$(GOOS) go build ./... + CC=$(CC) GOOS=$(GOOS) GOARCH=$(GOARCH) go build ./... examples: $(EXAMPLE_TARGETS) $(EXAMPLE_TARGETS): example-%: - GOOS=$(GOOS) go build ./examples/$(*) + CC=$(CC) GOOS=$(GOOS) GOARCH=$(GOARCH) go build ./examples/$(*) all: check test build binaries check: $(CHECK_TARGETS) diff --git a/deployments/container/Dockerfile.ubi8 b/deployments/container/Dockerfile.ubi8 index 0f8f76980..c365f1239 100644 --- a/deployments/container/Dockerfile.ubi8 +++ b/deployments/container/Dockerfile.ubi8 @@ -16,24 +16,16 @@ ARG GOLANG_VERSION=1.23.1 ARG CUDA_IMAGE=cuda ARG CUDA_VERSION=11.8.0 ARG BASE_DIST=ubi8 -FROM nvidia/cuda:${CUDA_VERSION}-base-${BASE_DIST} as build +FROM --platform=${TARGETARCH} nvidia/cuda:${CUDA_VERSION}-base-${BASE_DIST} as build RUN yum install -y \ wget make git gcc \ && \ rm -rf /var/cache/yum/* +ARG TARGETARCH ARG GOLANG_VERSION=x.x.x -RUN set -eux; \ - \ - arch="$(uname -m)"; \ - case "${arch##*-}" in \ - x86_64 | amd64) ARCH='amd64' ;; \ - ppc64el | ppc64le) ARCH='ppc64le' ;; \ - aarch64 | arm64) ARCH='arm64' ;; \ - *) echo "unsupported architecture" ; exit 1 ;; \ - esac; \ - wget -nv -O - https://storage.googleapis.com/golang/go${GOLANG_VERSION}.linux-${ARCH}.tar.gz \ +RUN wget -nv -O - https://storage.googleapis.com/golang/go${GOLANG_VERSION}.linux-${TARGETARCH}.tar.gz \ | tar -C /usr/local -xz ENV GOPATH /go diff --git a/deployments/container/Dockerfile.ubuntu b/deployments/container/Dockerfile.ubuntu index 1d98a2a1f..ea5d58a3b 100644 --- a/deployments/container/Dockerfile.ubuntu +++ b/deployments/container/Dockerfile.ubuntu @@ -16,24 +16,15 @@ ARG GOLANG_VERSION=1.23.1 ARG CUDA_IMAGE=cuda ARG CUDA_VERSION=11.8.0 ARG BASE_DIST=ubuntu20.04 -FROM nvidia/cuda:${CUDA_VERSION}-base-${BASE_DIST} as build +FROM --platform=${BUILDOS}/amd64 nvidia/cuda:${CUDA_VERSION}-base-${BASE_DIST} as build RUN apt-get update && \ - apt-get install -y wget make git gcc \ + apt-get install -y wget make git gcc-aarch64-linux-gnu gcc \ && \ rm -rf /var/lib/apt/lists/* ARG GOLANG_VERSION=x.x.x -RUN set -eux; \ - \ - arch="$(uname -m)"; \ - case "${arch##*-}" in \ - x86_64 | amd64) ARCH='amd64' ;; \ - ppc64el | ppc64le) ARCH='ppc64le' ;; \ - aarch64 | arm64) ARCH='arm64' ;; \ - *) echo "unsupported architecture" ; exit 1 ;; \ - esac; \ - wget -nv -O - https://storage.googleapis.com/golang/go${GOLANG_VERSION}.linux-${ARCH}.tar.gz \ +RUN wget -nv -O - https://storage.googleapis.com/golang/go${GOLANG_VERSION}.linux-amd64.tar.gz \ | tar -C /usr/local -xz ENV GOPATH /go @@ -42,10 +33,16 @@ ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH WORKDIR /build COPY . . +ARG TARGETARCH RUN mkdir /artifacts ARG VERSION="N/A" ARG GIT_COMMIT="unknown" -RUN make PREFIX=/artifacts cmds +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + cc=gcc; \ + elif [ "$TARGETARCH" = "arm64" ]; then \ + cc=aarch64-linux-gnu-gcc; \ + fi && \ + make CC=${cc} GOARCH=${TARGETARCH} PREFIX=/artifacts cmds FROM nvidia/${CUDA_IMAGE}:${CUDA_VERSION}-base-${BASE_DIST} diff --git a/deployments/container/native-only.mk b/deployments/container/native-only.mk index e998246bd..deff681a8 100644 --- a/deployments/container/native-only.mk +++ b/deployments/container/native-only.mk @@ -13,7 +13,8 @@ # limitations under the License. PUSH_ON_BUILD ?= false -DOCKER_BUILD_PLATFORM_OPTIONS = --platform=linux/amd64 +ARCH ?= $(shell uname -m | sed -e 's,aarch64,arm64,' -e 's,x86_64,amd64,') +DOCKER_BUILD_PLATFORM_OPTIONS = --platform=linux/$(ARCH) ifeq ($(PUSH_ON_BUILD),true) $(BUILD_TARGETS): build-%: image-%