Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add armv7l and arm64 bionic based cross compiled builds #91

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
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
Next Next commit
feat: add armv7l and arm64 bionic based cross compiled builds
  • Loading branch information
theofficialgman committed Aug 7, 2023
commit a0feac6cf46e4035affd75220db70694861fc564
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@ This list of officially supported platforms is available in the Node.js [BUILDIN
## Builds

* **linux-x64-musl**: Linux x64 binaries compiled against [musl libc](https://www.musl-libc.org/) version 1.1.20. Primarily useful for users of Alpine Linux 3.9 and later. Linux x64 with musl is considered "Experimental" by Node.js but the Node.js test infrastructure includes some Alpine test servers so support is generally good. These Node.js builds require the `libstdc++` package to be installed on Alpine Linux, which is not installed by default. You can add this by running `apk add libstdc++`.
* **linux-x64-glibc-217**: Linux x64, compiled with glibc 2.17 to support [older Linux distros](https://en.wikipedia.org/wiki/Glibc#Version_history), QNAP QTS 4.x and 5.x, and Synology DSM 7, and other environments where a newer glibc is unavailable.
* **linux-x64-glibc-217**: Linux x64, compiled with glibc 2.17 to support [older Linux distros](https://en.wikipedia.org/wiki/Glibc#Version_history), QNAP QTS 4.x and 5.x, and Synology DSM 7, and other environments where a newer glibc is unavailable.
* **linux-x86**: Linux x86 (32-bit) binaries compiled against libc 2.17, similar to the way the official [linux-x64 binaries are produced](https://github.com/nodejs/node/blob/master/BUILDING.md#official-binary-platforms-and-toolchains). 32-bit Linux binaries were dropped for Node.js 10 and 32-bit support is now considered "Experimental".
* **linux-armv6l**: Linux ARMv6 binaries, cross-compiled on Ubuntu 16.04 with a [custom GCC 6 toolchain](https://github.com/rvagg/rpi-newer-crosstools) (for Node.js versions earlier than 16) or Ubuntu 18.04 with a [custom GCC 8 toolchain](https://github.com/rvagg/rpi-newer-crosstools) (for Node.js 16 and later) in a similar manner to the official linux-armv7l binaries. Binaries are optimized for `armv6zk` which is suitable for Raspberry Pi devices (1, 1+ and Zero in particular). ARMv6 binaries were dropped from Node.js 12 and ARMv6 support is now considered "Experimental".
* **linux-armv7l-glibc-227**: Linux ARMv7 binaries, cross-compiled on Ubuntu 18.04 with the default GCC-8.
* **linux-arm64-glibc-227**: Linux ARM64 binaries, cross-compiled on Ubuntu 18.04 with the default GCC-8.
* **riscv64**: Linux riscv64 (RISC-V), cross compiled on Ubuntu 20.04 with the toolchain which the Adoptium project uses (for now...). Built with --openssl-no-asm (Should be with --with-intl=none but that gets overriden)
* **loong64**: Linux loong64 (LoongArch64), cross compiled on Ubuntu 20.04 with the toolchain.

Expand Down
2 changes: 2 additions & 0 deletions bin/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ recipes=" \
x86 \
musl \
armv6l \
armv7l-glibc-227 \
arm64-glibc-227 \
x64-glibc-217 \
x64-pointer-compression \
x64-usdt \
Expand Down
36 changes: 36 additions & 0 deletions recipes/arm64-glibc-227/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
FROM ubuntu:18.04

ARG GID=1000
ARG UID=1000

RUN addgroup --gid $GID node \
&& adduser --gid $GID --uid $UID --disabled-password --gecos node node

RUN apt-get update \
&& apt-get dist-upgrade -y \
&& apt-get update \
&& apt-get install -y \
git \
curl \
gcc-8 \
g++-8 \
gcc-8-aarch64-linux-gnu \
g++-8-aarch64-linux-gnu \
binutils-aarch64-linux-gnu \
libstdc++-8-dev-amd64-cross \
linux-libc-dev-arm64-cross linux-libc-dev-amd64-cross \
make \
python3 \
python3-distutils \
ccache \
xz-utils

COPY --chown=node:node run.sh /home/node/run.sh

VOLUME /home/node/.ccache
VOLUME /out
VOLUME /home/node/node.tar.xz

USER node

ENTRYPOINT [ "/home/node/run.sh" ]
36 changes: 36 additions & 0 deletions recipes/arm64-glibc-227/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/usr/bin/env bash

set -e
set -x

release_urlbase="$1"
disttype="$2"
customtag="$3"
datestring="$4"
commit="$5"
fullversion="$6"
source_url="$7"
config_flags=

cd /home/node

tar -xf node.tar.xz
cd "node-${fullversion}"

export CC_host="ccache gcc-8"
export CXX_host="ccache g++-8"
export CC="ccache aarch64-linux-gnu-gcc-8"
export CXX="ccache aarch64-linux-gnu-g++-8"

make -j$(getconf _NPROCESSORS_ONLN) binary V= \
DESTCPU="arm64" \
ARCH="arm64" \
VARIATION="" \
DISTTYPE="$disttype" \
CUSTOMTAG="$customtag" \
DATESTRING="$datestring" \
COMMIT="$commit" \
RELEASE_URLBASE="$release_urlbase" \
CONFIG_FLAGS="$config_flags"

mv node-*.tar.?z /out/
10 changes: 10 additions & 0 deletions recipes/arm64-glibc-227/should-build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash -xe

__dirname=$1
fullversion=$2

. ${__dirname}/_decode_version.sh

decode "$fullversion"

test "$major" -ge "18"
36 changes: 36 additions & 0 deletions recipes/armv7l-glibc-227/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
FROM ubuntu:18.04

ARG GID=1000
ARG UID=1000

RUN addgroup --gid $GID node \
&& adduser --gid $GID --uid $UID --disabled-password --gecos node node

RUN apt-get update \
&& apt-get dist-upgrade -y \
&& apt-get update \
&& apt-get install -y \
git \
curl \
gcc-8 \
g++-8 \
gcc-8-arm-linux-gnueabihf \
g++-8-arm-linux-gnueabihf \
binutils-arm-linux-gnueabihf \
lib32stdc++-8-dev libstdc++-8-dev-amd64-cross libstdc++-8-dev-x32-cross libx32stdc++-8-dev libstdc++-8-dev-i386-cross \
linux-libc-dev-armhf-cross linux-libc-dev-amd64-cross linux-libc-dev-x32-cross linux-libc-dev-i386-cross \
make \
python3 \
python3-distutils \
ccache \
xz-utils

COPY --chown=node:node run.sh /home/node/run.sh

VOLUME /home/node/.ccache
VOLUME /out
VOLUME /home/node/node.tar.xz

USER node

ENTRYPOINT [ "/home/node/run.sh" ]
36 changes: 36 additions & 0 deletions recipes/armv7l-glibc-227/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/usr/bin/env bash

set -e
set -x

release_urlbase="$1"
disttype="$2"
customtag="$3"
datestring="$4"
commit="$5"
fullversion="$6"
source_url="$7"
config_flags=

cd /home/node

tar -xf node.tar.xz
cd "node-${fullversion}"

export CC_host="ccache gcc-8 -m32"
export CXX_host="ccache g++-8 -m32"
export CC="ccache arm-linux-gnueabihf-gcc-8"
export CXX="ccache arm-linux-gnueabihf-g++-8"

make -j$(getconf _NPROCESSORS_ONLN) binary V= \
DESTCPU="arm" \
ARCH="armv7l" \
VARIATION="" \
DISTTYPE="$disttype" \
CUSTOMTAG="$customtag" \
DATESTRING="$datestring" \
COMMIT="$commit" \
RELEASE_URLBASE="$release_urlbase" \
CONFIG_FLAGS="$config_flags"

mv node-*.tar.?z /out/
10 changes: 10 additions & 0 deletions recipes/armv7l-glibc-227/should-build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash -xe

__dirname=$1
fullversion=$2

. ${__dirname}/_decode_version.sh

decode "$fullversion"

test "$major" -ge "18"