Files
BMLFS/build-scripts/nodejs.build
2025-09-02 09:24:02 -05:00

122 lines
3.9 KiB
Bash

#! /bin/bash
# Node.js
# Source: https://nodejs.org/dist/v24.6.0/node-v24.6.0.tar.xz
#
# $BUILD = Directory to temporarily install
# $PKGS = Directory to store built packages
#
# DEPS
# Required: Which, c-ares
# Recommended: ICU, libuv, nghttp2, brotli
# Optional: http-parser, NPM
#
# NOTE: Node.js does not compile with LibreSSL. Use the bundled openssl OR OpenSSL
# in /opt/openssl
export PVER="24.6.0"
# Apply patches from Chimera Linux
patch -Np1 -i ../patches/nodejs-chimera/clang-ppc64.patch
patch -Np1 -i ../patches/nodejs-chimera/google-sucks.patch
patch -Np1 -i ../patches/nodejs-chimera/hwy-no-rvv.patch
patch -Np1 -i ../patches/nodejs-chimera/loongarch.patch
patch -Np1 -i ../patches/nodejs-chimera/no-libatomic.patch
patch -Np1 -i ../patches/nodejs-chimera/ppc64-be.patch
patch -Np1 -i ../patches/nodejs-chimera/shared-uv.patch
patch -Np1 -i ../patches/nodejs-chimera/simdjson-no-ppc64.patch
case $(uname -m) in
i686) export LDFLAGS="-Wl,--no-keep-memory" ;;
esac
# Remove, as system libraries will be used instead
mv -v deps/openssl/nodejs-openssl.cnf ./
for d in brotli cares zlib openssl
do
rm -rf deps/$d
done
rm -rf deps/v8/third_party/jinja2
rm -rf tools/inspector_protocol/jinja2
mkdir -pv deps/openssl
mv -v nodejs-openssl.cnf deps/openssl/
# If using OpenSSL in /opt/openssl, add these aguments to configure:
export EOSSL="--shared-openssl-includes /opt/openssl/include "
export EOSSL+="--shared-openssl-libpath /opt/openssl/lib "
# Set build options
export CARGS="--prefix=/usr --shared-zlib "
export CARGS+="--with-intl=system-icu "
export CARGS+="--shared-libuv "
export CARGS+="--shared-nghttp2 "
export CARGS+="--shared-cares "
export CARGS+="--shared-brotli "
export CARGS+="--shared-openssl "
export CARGS+="--openssl-use-def-ca-store "
export CARGS+="--ninja "
# If GCC is not in /usr, set the path (CMLFS)
PATH=/opt/gnu/bin:$PATH CC=gcc CXX=g++ \
./configure $CARGS $EOSSL
# If GCC is not in /usr, set the path & library path (CMLFS)
# If OpenSSL is in /opt/openssl, add to LD_LIBRARY_PATH
PATH=/opt/gnu/bin:$PATH LD_LIBRARY_PATH=/opt/gnu/lib:/opt/openssl/lib:/usr/lib \
make -j2
# If GCC is not in /usr, set the path & library path (CMLFS)
# If OpenSSL is in /opt/openssl, add to LD_LIBRARY_PATH
sudo -S -E PATH=/opt/gnu/bin:$PATH LD_LIBRARY_PATH=/opt/gnu/lib:/opt/openssl/lib:/usr/lib \
make DESTDIR=$BUILD install
sudo -S mkdir -pv /BMAN/install /BMAN/usr/share && \
sudo -S mv $BUILD/usr/share/man /BMAN/usr/share/ && \
unset CXXFLAGS CFLAGS LDFLAGS EOSSL &&
cd $BUILD && sudo -S mkdir -v ${BUILD}/install &&
cat > /tmp/slack-desc << "EOF"
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description. Line
# up the first '|' above the ':' following the base package name, and the '|'
# on the right side marks the last column you can put a character in. You must
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
nodejs: nodejs (JavaScript runtime)
nodejs:
nodejs: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript
nodejs: engine.
nodejs:
nodejs:
nodejs:
nodejs: https://nodejs.org/
nodejs:
nodejs:
nodejs:
EOF
sudo -S mv -v /tmp/slack-desc install/ &&
# If GCC is not in /usr, add rpath via patchelf
sudo patchelf --add-rpath /opt/gnu/lib usr/bin/node
# If OpenSSL is in /opt/openssl, add rpath via patchelf
sudo patchelf --add-rpath /opt/openssl/lib usr/bin/node
sudo -S makepkg -l y -c n $PKGS/nodejs-$PVER-$PSUFFIX && \
cd /BMAN && \
cat > /tmp/slack-desc << "EOF"
nodejs-doc: Manuals for nodejs
nodejs-doc:
nodejs-doc: Node.js is a JavaScript runtime built on Chrome's V8 JavaScript
nodejs-doc: engine.
nodejs-doc:
nodejs-doc: https://nodejs.org/
nodejs-doc:
EOF
sudo -S mv -v /tmp/slack-desc install/ && \
sudo -S makepkg -l y -c n $PKGS/nodejs-doc-$PVER-$NOPSUFFIX && \
sudo -S rm -rf ${BUILD}/*