diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index c653f0e8..6462717e 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -53,6 +53,7 @@ template: | - `docker.elastic.co/beats-dev/golang-crossbuild:$RESOLVED_VERSION-main-debian11` - linux/i386, linux/amd64, windows/amd64 - `docker.elastic.co/beats-dev/golang-crossbuild:$RESOLVED_VERSION-main-debian12` - linux/i386, linux/amd64, windows/amd64 - `docker.elastic.co/beats-dev/golang-crossbuild:$RESOLVED_VERSION-mips-debian12` - linux/mips64, linux/mips64el + - `docker.elastic.co/beats-dev/golang-crossbuild:$RESOLVED_VERSION-ppc-debian12` - linux/ppc64, linux/ppc64le - `docker.elastic.co/beats-dev/golang-crossbuild:$RESOLVED_VERSION-s390x-debian12` - linux/s390x ### Changes diff --git a/README.md b/README.md index 83fd3bfa..db37a8ad 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,8 @@ Replace `` with the version you would like to use, for instance: - `docker.elastic.co/beats-dev/golang-crossbuild:-mips-debian11` - linux/mips64, linux/mips64el - `docker.elastic.co/beats-dev/golang-crossbuild:-mips-debian12` - linux/mips64, linux/mips64el - `docker.elastic.co/beats-dev/golang-crossbuild:-mips32` - linux/mips, linux/mipsle **NOTE**: it does not exist from Golang versions > `1.18.5`/`1.17.12`. -- `docker.elastic.co/beats-dev/golang-crossbuild:-ppc-debian12` - linux/ppc64, linux/ppc64le **NOTE**: it does not exist from Golang versions >= `1.23.6`. +- `docker.elastic.co/beats-dev/golang-crossbuild:-ppc-debian11` - linux/ppc64, linux/ppc64le +- `docker.elastic.co/beats-dev/golang-crossbuild:-ppc-debian12` - linux/ppc64, linux/ppc64le - `docker.elastic.co/beats-dev/golang-crossbuild:-s390x-debian11` - linux/s390x - `docker.elastic.co/beats-dev/golang-crossbuild:-s390x-debian12` - linux/s390x @@ -81,7 +82,7 @@ Replace `` with the version you would like to use, for instance: ## Old Build Tags -Until Golang version `1.15` +Until Golang version 1.15 | Description | Tags for 1.10 | Tags for 1.11 | Tags for 1.12 | Tags for 1.13 | Tags for 1.14 | Tags for 1.15 | | ------------- | -----| ------- | ----- | ------ | ------ | ------ | @@ -344,6 +345,11 @@ It is used to cross compile for `linux/mips`. This Docker image is based on the The `mips32` image is the base image for the `mips32` architecture, it is build for Debian 11+. It is used to cross compile for `linux/mips32`. This Docker image is based on the `base` image. +## go/ppc Docker image + +The `ppc` image is the base image for the `ppc` architecture, it is build for Debian 12+. +It is used to cross compile for `linux/ppc`. This Docker image is based on the `base` image. + ## go/s390x Docker image The `s390x` image is the base image for the `s390x` architecture, it is build for Debian 12+. diff --git a/go/Makefile.debian12 b/go/Makefile.debian12 index 70e47008..a1c6cbc5 100644 --- a/go/Makefile.debian12 +++ b/go/Makefile.debian12 @@ -1,4 +1,4 @@ -IMAGES := base main darwin armhf armel mips s390x npcap +IMAGES := base main darwin armhf armel mips ppc s390x npcap ARM_IMAGES := base-arm darwin-arm64 DEBIAN_VERSION := 12 TAG_EXTENSION := -debian12 diff --git a/go/ppc/.dockerignore b/go/ppc/.dockerignore new file mode 100644 index 00000000..f3c7a7c5 --- /dev/null +++ b/go/ppc/.dockerignore @@ -0,0 +1 @@ +Makefile diff --git a/go/ppc/Dockerfile.tmpl b/go/ppc/Dockerfile.tmpl new file mode 100644 index 00000000..666c113a --- /dev/null +++ b/go/ppc/Dockerfile.tmpl @@ -0,0 +1,83 @@ +ARG REPOSITORY +ARG VERSION +ARG TAG_EXTENSION='' +FROM ${REPOSITORY}/golang-crossbuild:${VERSION}-base${TAG_EXTENSION} + +RUN dpkg --add-architecture ppc64el \ + && apt update -y --no-install-recommends \ + && apt upgrade -y --no-install-recommends \ + && apt full-upgrade -y --no-install-recommends \ + && apt install -qq -y --no-install-recommends \ + g++-powerpc64-linux-gnu \ + gcc-powerpc64-linux-gnu \ + crossbuild-essential-ppc64el + +RUN apt install -qq -y \ + libc-dev:ppc64el \ + libpopt-dev:ppc64el \ + linux-libc-dev:ppc64el + +{{- if eq .DEBIAN_VERSION "9" }} +RUN apt install -qq -y \ + libelf1:ppc64el \ + libicu-dev:ppc64el \ + libicu57:ppc64el \ + librpm-dev:ppc64el \ + libxml2-dev:ppc64el \ + libxml2:ppc64el \ + librpm3:ppc64el \ + librpmio3:ppc64el \ + librpmbuild3:ppc64el \ + librpmsign3:ppc64el \ + libsqlite3-dev:ppc64el \ + libnss3:ppc64el \ + libsqlite3-0:ppc64el + +# RUN apt install -y \ +# libsystemd-dev:ppc64el libsystemd0:ppc64el liblz4-1:ppc64el +{{- end }} + +{{- if or (eq .DEBIAN_VERSION "10") (eq .DEBIAN_VERSION "11") (eq .DEBIAN_VERSION "12")}} +# librpm-dev +RUN apt install -y \ + librpm-dev:ppc64el + +# libsystemd-dev +RUN apt install -y \ + libsystemd-dev:ppc64el +{{- end }} + +RUN rm -rf /var/lib/apt/lists/* + +COPY rootfs / + +# Basic test +RUN cd / \ + && powerpc64le-linux-gnu-gcc helloWorld.c -o helloWorld \ + && file helloWorld \ + && readelf -h helloWorld \ + && readelf -h helloWorld | grep -c 'PowerPC64' \ + && readelf -h helloWorld | grep -c 'ELF64' \ + && readelf -h helloWorld | grep -c "little endian" \ + && rm helloWorld.c helloWorld + +RUN cd /libpcap/libpcap-1.8.1 \ + && cp -R /libpcap/libpcap-1.8.1 /libpcap/libpcap-1.8.1-ppc64 \ + && cp -R /libpcap/libpcap-1.8.1 /libpcap/libpcap-1.8.1-ppc64el \ + && cd /libpcap/libpcap-1.8.1-ppc64 \ + && CC=powerpc64-linux-gnu-gcc ./configure --enable-usb=no --enable-bluetooth=no --enable-dbus=no --host=ppc64-unknown-linux-gnu --with-pcap=linux \ + && make \ + && cd /libpcap/libpcap-1.8.1-ppc64el \ + && CC=powerpc64le-linux-gnu-gcc ./configure --enable-usb=no --enable-bluetooth=no --enable-dbus=no --host=ppc64el-unknown-linux-gnu --with-pcap=linux \ + && make + +# Build-time metadata as defined at http://label-schema.org. +ARG BUILD_DATE +ARG IMAGE +ARG VCS_REF +ARG VCS_URL +LABEL org.label-schema.build-date=$BUILD_DATE \ + org.label-schema.name=$IMAGE \ + org.label-schema.vcs-ref=$VCS_REF \ + org.label-schema.vcs-url=$VCS_URL \ + org.label-schema.schema-version="1.0" diff --git a/go/ppc/Makefile b/go/ppc/Makefile new file mode 100644 index 00000000..0a42375f --- /dev/null +++ b/go/ppc/Makefile @@ -0,0 +1 @@ +include ../Makefile.common diff --git a/go/ppc/rootfs/compilers.yaml b/go/ppc/rootfs/compilers.yaml new file mode 100644 index 00000000..94d533ef --- /dev/null +++ b/go/ppc/rootfs/compilers.yaml @@ -0,0 +1,9 @@ +--- + +linux: + ppc64: + CC: powerpc64-linux-gnu-gcc + CXX: powerpc64-linux-gnu-g++ + ppc64le: + CC: powerpc64le-linux-gnu-gcc + CXX: powerpc64le-linux-gnu-g++ diff --git a/go/ppc/rootfs/helloWorld.c b/go/ppc/rootfs/helloWorld.c new file mode 100644 index 00000000..dcfb86bc --- /dev/null +++ b/go/ppc/rootfs/helloWorld.c @@ -0,0 +1,5 @@ +#include +int main() { + printf("Hello, World!"); + return 0; +}