Skip to content
Open
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
52 changes: 52 additions & 0 deletions bin/copy-recipes.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/bin/bash -eu

# Copies files from recipes/x64-glibc-217 to:
# recipes/x64-pointer-compression
# recipes/x86

__dirname="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
recipesDir="$(dirname "$__dirname")/recipes"
srcRecipeDir="$recipesDir/x64-glibc-217"



# Copy to x64-pointer-compression

for dirBase in x64-pointer-compression; do
destRecipeDir="$recipesDir/$dirBase"
mkdir -p "$destRecipeDir/files"

cp -f "$srcRecipeDir/Dockerfile" "$destRecipeDir/"
cp -f "$srcRecipeDir/run.sh" "$destRecipeDir/"
# cp -f "$srcRecipeDir/run_other.sh" "$destRecipeDir/" # Recipe specific code
cp -f "$srcRecipeDir/run_versions.sh" "$destRecipeDir/"
# cp -f "$srcRecipeDir/should-build.sh" "$destRecipeDir/" # Pointer compression is supported from v13.4
cp -rf "$srcRecipeDir/files/"* "$destRecipeDir/files/"
done



# Copy to x86

if true; then
destRecipeDir="$recipesDir/x86"
mkdir -p "$destRecipeDir/files"

cp -f "$srcRecipeDir/Dockerfile" "$destRecipeDir/"
cp -f "$srcRecipeDir/run.sh" "$destRecipeDir/"
# cp -f "$srcRecipeDir/run_other.sh" "$destRecipeDir/" # Recipe specific code
# cp -f "$srcRecipeDir/run_versions.sh" "$destRecipeDir/" # Different versions of programs are used (because devtoolset-12 is not available)
# cp -f "$srcRecipeDir/should-build.sh" "$destRecipeDir/"

# cp -f "$srcRecipeDir/files/"*.repo "$destRecipeDir/files/" # Different versions of programs are used (because devtoolset-12 is not available)
# cp -f "$srcRecipeDir/files/installPrerequisites" "$destRecipeDir/files/" # Different versions of programs are used (because devtoolset-12 is not available)
cp -f "$srcRecipeDir/files/installFromSourceCode" "$destRecipeDir/files/"
cp -f "$srcRecipeDir/files/opt__gcc15__enable" "$destRecipeDir/files/"

sed -i -e 's/ --platform=linux\/amd64 / --platform=linux\/386 /g' "$destRecipeDir/Dockerfile"
sed -i -E 's/# RUN (.* binutils )/RUN \1/g' "$destRecipeDir/Dockerfile"
sed -i -E 's/--build=x86_64-redhat-linux/--build=i686-redhat-linux/g' "$destRecipeDir/Dockerfile"
# sed -i -e 's/gcc-15.1.0/gcc-12.4.0/g' "$destRecipeDir/Dockerfile"
# sed -i -e 's/gcc15/gcc12/g' "$destRecipeDir/Dockerfile" "$destRecipeDir/files/opt__gcc12__enable" "$destRecipeDir/files/installFromSourceCode"
sed -i -e 's/devtoolset-12/devtoolset-9/g' "$destRecipeDir/files/opt__gcc"*'__enable'
fi
42 changes: 13 additions & 29 deletions recipes/x64-glibc-217/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,39 +1,23 @@
FROM centos:7
FROM --platform=linux/amd64 centos:7

ARG GID=1000
ARG UID=1000

RUN groupadd --gid $GID node \
&& adduser --gid $GID --uid $UID node

RUN cat <<EOF | tee -a /etc/yum.repos.d/devtoolset-12.repo
[devtoolset-12]
name=Devtoolset 12
baseurl=https://buildlogs.centos.org/c7-devtoolset-12.x86_64/
enabled=1
gpgcheck=0
EOF

RUN ulimit -n 1024 \
&& sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* \
&& sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* \
&& yum install -y epel-release \
&& yum install -y centos-release-scl-rh \
&& sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo \
&& sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo \
&& yum upgrade -y \
&& yum install -y \
git \
curl \
make \
python2 \
rh-python38 \
ccache \
xz-utils \
devtoolset-12 \
glibc-devel

COPY --chown=node:node run.sh /home/node/run.sh
COPY --chmod=755 files/installPrerequisites /root/installPrerequisites
COPY files/*.repo /etc/yum.repos.d/
RUN /root/installPrerequisites

COPY --chmod=755 files/installFromSourceCode /root/installFromSourceCode
COPY --chmod=755 files/opt__gcc15__enable /opt/gcc15/enable
RUN --mount=type=cache,target=/root/.ccache --mount=type=tmpfs,target=/usr/src /root/installFromSourceCode python3 https://www.python.org/ftp/python/3.9.23/Python-3.9.23.tar.xz '--prefix=/usr/local/'
RUN --mount=type=cache,target=/root/.ccache --mount=type=tmpfs,target=/usr/src /root/installFromSourceCode python3 https://www.python.org/ftp/python/3.13.5/Python-3.13.5.tar.xz '--prefix=/usr/local/'
RUN --mount=type=cache,target=/root/.ccache --mount=type=tmpfs,target=/usr/src /root/installFromSourceCode gcc https://gcc.gnu.org/pub/gcc/releases/gcc-15.1.0/gcc-15.1.0.tar.xz '--prefix=/opt/gcc15/ --with-default-libstdcxx-abi=gcc4-compatible --enable-languages=c,c++ --enable-checking=release --enable-gnu-indirect-function --with-linker-hash-style=gnu --disable-bootstrap --disable-multilib --build=x86_64-redhat-linux'
# RUN --mount=type=cache,target=/root/.ccache --mount=type=tmpfs,target=/usr/src /root/installFromSourceCode binutils https://sourceware.org/pub/binutils/releases/binutils-2.44.tar.xz '--prefix=/opt/gcc15/ --without-debuginfod --disable-nls LDFLAGS=-pthread'

COPY --chmod=755 --chown=node:node run.sh run_other.sh run_versions.sh /home/node/

VOLUME /home/node/.ccache
VOLUME /out
Expand Down
4 changes: 4 additions & 0 deletions recipes/x64-glibc-217/files/etc__yum.repos.d__devtoolset.repo
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[devtoolset-12]
name=Devtoolset 12
baseurl=https://buildlogs.centos.org/c7-devtoolset-12.x86_64/
gpgcheck=0
36 changes: 36 additions & 0 deletions recipes/x64-glibc-217/files/installFromSourceCode
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/bin/bash -eux

# Calc vars

id="$1"
url="$2"
configureArgsStr="$3"

base=$(basename "$url")
name=${base%.*}
name=${name%.tar}
ext=${base:${#name}}

case "$ext" in
.tar.xz|.txz) formatOpt=--xz;;
.tar.gz|.tgz) formatOpt=--gzip;;
.tar.bz2|.tbz2) formatOpt=--bzip2;;
*) formatOpt=--auto-compress
esac

# Run commands

curl -fL "$url" | tar --extract --directory=/usr/src "$formatOpt"

source /opt/gcc15/enable
export CC='ccache gcc'
export CXX='ccache g++'

cd "/usr/src/$name"
chmod +x ./contrib/download_prerequisites 2>/dev/null && ./contrib/download_prerequisites
./configure $configureArgsStr
make -j $(nproc)
make install

hash -r
ccache -s > "/root/ccacheStat_$name.txt"
12 changes: 12 additions & 0 deletions recipes/x64-glibc-217/files/installPrerequisites
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/bash -eux

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
yum install -y epel-release # Adds extra repos
yum upgrade -y

yum install -y bzip2 # Required to compile gcc
yum install -y gcc-c++ # Required to compile Node.js v7-
yum install -y make # Allows compilation
yum install -y ccache # Allows caching
yum install -y devtoolset-12 # Includes gcc 12.1.1
15 changes: 15 additions & 0 deletions recipes/x64-glibc-217/files/opt__gcc15__enable
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash -eux

DIR=/opt/gcc15

source /opt/rh/devtoolset-12/enable

export PATH="$DIR/bin${PATH:+:${PATH}}"
export MANPATH="$DIR/share/man${MANPATH:+:${MANPATH}}"
export INFOPATH="$DIR/share/info${INFOPATH:+:${INFOPATH}}"
export LD_LIBRARY_PATH="$DIR/lib64:$DIR/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
export PKG_CONFIG_PATH="$DIR/lib64/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}"

if [ -f "$DIR/bin/gcc" ]; then
export LDFLAGS='-static-libstdc++'
fi
68 changes: 46 additions & 22 deletions recipes/x64-glibc-217/run.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#!/usr/bin/env bash
#!/bin/bash -eux

set -e
set -x


# Init

release_urlbase="$1"
disttype="$2"
Expand All @@ -11,42 +12,65 @@ commit="$5"
fullversion="$6"
source_url="$7"
source_urlbase="$8"
config_flags=""

cd /home/node
homeDir=/home/node
nodeDir="$homeDir/node-$fullversion"

tar --directory="$homeDir" -xf "$homeDir/node.tar.xz"


tar -xf node.tar.xz

# configuring cares correctly to not use sys/random.h on this target
cd "node-${fullversion}"/deps/cares
sed -i 's/define HAVE_SYS_RANDOM_H 1/undef HAVE_SYS_RANDOM_H/g' ./config/linux/ares_config.h
sed -i 's/define HAVE_GETRANDOM 1/undef HAVE_GETRANDOM/g' ./config/linux/ares_config.h
# Patch the code

# fix https://github.com/c-ares/c-ares/issues/850
if [[ "$(grep -o 'ARES_VERSION_STR "[^"]*"' ./include/ares_version.h | awk '{print $2}' | tr -d '"')" == "1.33.0" ]]; then
sed -i 's/MSG_FASTOPEN/TCP_FASTOPEN_CONNECT/g' ./src/lib/ares__socket.c
# Configuring cares correctly to not use sys/random.h on this target
cd "$nodeDir/deps/cares/config/linux"
sed -i 's/define HAVE_SYS_RANDOM_H 1/undef HAVE_SYS_RANDOM_H/g' ares_config.h
sed -i 's/define HAVE_GETRANDOM 1/undef HAVE_GETRANDOM/g' ares_config.h

# Fix https://github.com/c-ares/c-ares/issues/850
cd "$nodeDir/deps/cares"
if [[ "$(grep -o 'ARES_VERSION_STR "[^"]*"' include/ares_version.h | awk '{print $2}' | tr -d '"')" == "1.33.0" ]]; then
sed -i 's/MSG_FASTOPEN/TCP_FASTOPEN_CONNECT/g' src/lib/ares__socket.c
fi

cd /home/node
# Linux implementation of experimental WASM memory control requires Linux 3.17 & glibc 2.27 so disable it
cd "$nodeDir/deps/v8/src"
[ -f d8/d8.cc ] && sed -i -e 's/#if V8_TARGET_OS_LINUX/#if false/g' wasm/wasm-objects.cc d8/d8.cc



cd "node-${fullversion}"
# Prepare to compile Node.js

export CC="ccache gcc"
export CXX="ccache g++"
export MAJOR_VERSION=$(echo ${fullversion} | cut -d . -f 1 | tr --delete v)

. /opt/rh/devtoolset-12/enable
. /opt/rh/rh-python38/enable
isNodeVersionGE() {
printf "$1\n$fullversion" | sort -VC
}

source "$homeDir/run_other.sh"
source "$homeDir/run_versions.sh"

setPython
setGCC



# Compile Node.js

cd "$nodeDir"
export CC='ccache gcc'
export CXX='ccache g++'

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

"$nodeDir/node" -p process.versions # Make sure there is no "Segmentation fault" error (example: node v21.0~v21.2 x64-pointer-compression)
mv node-*.tar.?z /out/
9 changes: 9 additions & 0 deletions recipes/x64-glibc-217/run_other.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash -eux

config_flags=
destCPU=x64
arch=x64
variation=glibc-217

# export CFLAGS='-march=skylake'
# export CXXFLAGS='-march=skylake'
15 changes: 15 additions & 0 deletions recipes/x64-glibc-217/run_versions.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash -eux

setPython() {
if isNodeVersionGE 'v22.3'; then export PYTHON='python3.13'; return; fi # Python 3.13: Node.js v22.3 ~ latest (v24.3)
if isNodeVersionGE 'v14.14'; then export PYTHON='python3.9'; return; fi # Python 3.9: Node.js v14.14 ~ latest (v24.3)
if isNodeVersionGE 'v4.0'; then export PYTHON='python2.7'; return; fi # Python 2.7: Node.js v4.0 ~ v15.14 (latest)

# Node.js v16.0 is first version not supporting Python 2.7 but supports Python 3.6 ~ 3.9 so Python 3.9 is chosen
}

setGCC() {
if isNodeVersionGE 'v22.3'; then source /opt/gcc15/enable; return; fi # GCC 15.1: Node.js v22.3 ~ latest (v24.3)
if isNodeVersionGE 'v8.0'; then source /opt/rh/devtoolset-12/enable; return; fi # GCC 12.1: Node.js v8.0 ~ v22.1
# GCC 4.8.5: Node.js v4.0 ~ v10.14
}
13 changes: 10 additions & 3 deletions recipes/x64-glibc-217/should-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,15 @@
__dirname=$1
fullversion=$2

. ${__dirname}/_decode_version.sh
isNodeVersionGE() {
printf "$1\n$fullversion" | sort -VC
}

decode "$fullversion"
isNodeVersionLT() {
! printf "$1\n$fullversion" | sort -VC
}

test "$major" -ge "18" && test "$major" -lt "24"
isNodeVersionGE 'v6.2' # Node.js v6.1- cannot download required files due to broken links

isNodeVersionLT 'v17.0' || isNodeVersionGE 'v18.0' # Node.js v17 requires GCC version between 4.8.5 and 12.1 which is not installed
isNodeVersionLT 'v22.2' || isNodeVersionGE 'v22.3' # Node.js v22.2 requires GCC version between 12.1 and 15.1 which is not installed
54 changes: 13 additions & 41 deletions recipes/x64-pointer-compression/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,51 +1,23 @@
FROM centos:7
FROM --platform=linux/amd64 centos:7

ARG GID=1000
ARG UID=1000

RUN groupadd --gid $GID node \
&& adduser --gid $GID --uid $UID node

COPY cloudlinux.repo /etc/yum.repos.d/cloudlinux.repo

# patch repos and install base dependencies
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* \
&& sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* \
&& yum install -y epel-release \
&& yum upgrade -y \
&& yum install -y \
git \
curl \
make \
python2 \
ccache \
xz-utils \
devtoolset-8 \
devtoolset-9 \
glibc-devel

# installs c compiler dev tools and builds python >=3.8 from source as it is needed for node >=v22
ENV PYTHON_VERSION="3.10.15"
RUN yum groupinstall -y "Development Tools" \
&& yum install -y \
gcc \
gcc-c++ \
make \
zlib-devel \
bzip2-devel \
openssl-devel \
libffi-devel \
sqlite-devel \
readline-devel \
&& curl https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz -O \
&& tar xzf Python-${PYTHON_VERSION}.tgz \
&& cd Python-${PYTHON_VERSION} \
&& ./configure --enable-optimizations \
&& make altinstall \
&& PYTHON_MAJOR_MINOR_VERSION=$(echo $PYTHON_VERSION | cut -d. -f1,2) \
&& ln -sf /usr/local/bin/python${PYTHON_MAJOR_MINOR_VERSION} /usr/bin/python3

COPY --chown=node:node run.sh /home/node/run.sh
COPY --chmod=755 files/installPrerequisites /root/installPrerequisites
COPY files/*.repo /etc/yum.repos.d/
RUN /root/installPrerequisites

COPY --chmod=755 files/installFromSourceCode /root/installFromSourceCode
COPY --chmod=755 files/opt__gcc15__enable /opt/gcc15/enable
RUN --mount=type=cache,target=/root/.ccache --mount=type=tmpfs,target=/usr/src /root/installFromSourceCode python3 https://www.python.org/ftp/python/3.9.23/Python-3.9.23.tar.xz '--prefix=/usr/local/'
RUN --mount=type=cache,target=/root/.ccache --mount=type=tmpfs,target=/usr/src /root/installFromSourceCode python3 https://www.python.org/ftp/python/3.13.5/Python-3.13.5.tar.xz '--prefix=/usr/local/'
RUN --mount=type=cache,target=/root/.ccache --mount=type=tmpfs,target=/usr/src /root/installFromSourceCode gcc https://gcc.gnu.org/pub/gcc/releases/gcc-15.1.0/gcc-15.1.0.tar.xz '--prefix=/opt/gcc15/ --with-default-libstdcxx-abi=gcc4-compatible --enable-languages=c,c++ --enable-checking=release --enable-gnu-indirect-function --with-linker-hash-style=gnu --disable-bootstrap --disable-multilib --build=x86_64-redhat-linux'
# RUN --mount=type=cache,target=/root/.ccache --mount=type=tmpfs,target=/usr/src /root/installFromSourceCode binutils https://sourceware.org/pub/binutils/releases/binutils-2.44.tar.xz '--prefix=/opt/gcc15/ --without-debuginfod --disable-nls LDFLAGS=-pthread'

COPY --chmod=755 --chown=node:node run.sh run_other.sh run_versions.sh /home/node/

VOLUME /home/node/.ccache
VOLUME /out
Expand Down
9 changes: 0 additions & 9 deletions recipes/x64-pointer-compression/cloudlinux.repo

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[devtoolset-12]
name=Devtoolset 12
baseurl=https://buildlogs.centos.org/c7-devtoolset-12.x86_64/
gpgcheck=0
Loading