Vendor comma raylib in dependency package
This commit is contained in:
143
raylib/build.sh
143
raylib/build.sh
@@ -1,5 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
set -euo pipefail
|
||||
|
||||
export SOURCE_DATE_EPOCH=0
|
||||
export ZERO_AR_DATE=1
|
||||
|
||||
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)"
|
||||
cd "$DIR"
|
||||
@@ -7,30 +10,36 @@ cd "$DIR"
|
||||
INSTALL_DIR="$DIR/raylib/install"
|
||||
|
||||
NJOBS="$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 2)"
|
||||
CC="ccache ${CC:-cc}"
|
||||
|
||||
# Detect platform: PLATFORM_COMMA for comma devices, PLATFORM_DESKTOP otherwise
|
||||
RAYLIB_PLATFORM="${RAYLIB_PLATFORM:-PLATFORM_DESKTOP}"
|
||||
if [ -f /TICI ]; then
|
||||
RAYLIB_PLATFORM="PLATFORM_COMMA"
|
||||
if command -v ccache >/dev/null 2>&1; then
|
||||
CC="${CC:-ccache cc}"
|
||||
else
|
||||
CC="${CC:-cc}"
|
||||
fi
|
||||
export RAYLIB_PLATFORM
|
||||
|
||||
# Install build dependencies
|
||||
if [[ "$(uname)" == "Linux" ]]; then
|
||||
if [ "$RAYLIB_PLATFORM" = "PLATFORM_COMMA" ]; then
|
||||
is_linux() {
|
||||
[[ "$(uname)" == "Linux" ]]
|
||||
}
|
||||
|
||||
install_linux_deps() {
|
||||
local platform="$1"
|
||||
if ! is_linux; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$platform" = "PLATFORM_COMMA" ]; then
|
||||
# comma device: needs DRM/EGL/GLES headers (usually already present on AGNOS)
|
||||
# apt may fail on devices due to read-only rootfs or package conflicts — that's OK
|
||||
if command -v apt-get &>/dev/null; then
|
||||
# apt may fail on devices due to read-only rootfs or package conflicts; that's OK.
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
apt-get update && apt-get install -y libdrm-dev libgbm-dev libgles2-mesa-dev libegl1-mesa-dev || true
|
||||
else
|
||||
sudo apt-get update && sudo apt-get install -y libdrm-dev libgbm-dev libgles2-mesa-dev libegl1-mesa-dev || true
|
||||
fi
|
||||
fi
|
||||
elif [ "$RAYLIB_PLATFORM" = "PLATFORM_OFFSCREEN" ]; then
|
||||
# offscreen (CI): needs EGL/GL dev packages (no X11)
|
||||
if command -v apt-get &>/dev/null; then
|
||||
elif [ "$platform" = "PLATFORM_OFFSCREEN" ]; then
|
||||
if command -v dnf >/dev/null 2>&1; then
|
||||
dnf install -y mesa-libEGL-devel mesa-libGL-devel libglvnd-opengl libglvnd-core-devel 2>/dev/null || true
|
||||
elif command -v apt-get >/dev/null 2>&1; then
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
apt-get update && apt-get install -y libegl-dev libgl-dev
|
||||
else
|
||||
@@ -38,10 +47,9 @@ if [[ "$(uname)" == "Linux" ]]; then
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# desktop: needs X11/GL dev packages
|
||||
if command -v dnf &>/dev/null; then
|
||||
if command -v dnf >/dev/null 2>&1; then
|
||||
dnf install -y libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel libXi-devel mesa-libGL-devel
|
||||
elif command -v apt-get &>/dev/null; then
|
||||
elif command -v apt-get >/dev/null 2>&1; then
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
apt-get update && apt-get install -y libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libgl-dev
|
||||
else
|
||||
@@ -49,55 +57,72 @@ if [[ "$(uname)" == "Linux" ]]; then
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Clone and build raylib C library
|
||||
RAYLIB_COMMIT="d9d7cc1353ec0f73c97e84ddf0973983d1ee25e2"
|
||||
# RAYLIB_COMMIT matches the openpilot third_party/raylib pin this package replaces.
|
||||
RAYLIB_COMMIT="${RAYLIB_COMMIT:-3425bd9d1fb292ede4d80f97a1f4f258f614cffc}"
|
||||
RAYLIB_OFFSCREEN_COMMIT="${RAYLIB_OFFSCREEN_COMMIT:-d9d7cc1353ec0f73c97e84ddf0973983d1ee25e2}"
|
||||
RAYGUI_COMMIT="${RAYGUI_COMMIT:-76b36b597edb70ffaf96f046076adc20d67e7827}"
|
||||
|
||||
if [ ! -d "raylib-src/.git" ]; then
|
||||
rm -rf raylib-src
|
||||
git clone --depth 1 -b platform-offscreen --no-tags https://github.com/commaai/raylib.git raylib-src
|
||||
git clone --depth 1 -b master --no-tags https://github.com/commaai/raylib.git raylib-src
|
||||
fi
|
||||
|
||||
cd raylib-src
|
||||
git fetch --depth 1 origin "$RAYLIB_COMMIT"
|
||||
git reset --hard "$RAYLIB_COMMIT"
|
||||
|
||||
cd src
|
||||
make clean
|
||||
make -j"$NJOBS" PLATFORM="$RAYLIB_PLATFORM" CC="${CC:-gcc}"
|
||||
|
||||
cd "$DIR"
|
||||
|
||||
# Install lib + headers
|
||||
rm -rf "$INSTALL_DIR"
|
||||
mkdir -p "$INSTALL_DIR"/{lib,include}
|
||||
|
||||
cp raylib-src/src/libraylib.a "$INSTALL_DIR/lib/"
|
||||
cp raylib-src/src/raylib.h raylib-src/src/raymath.h raylib-src/src/rlgl.h "$INSTALL_DIR/include/"
|
||||
if [ -n "${RAYLIB_VARIANTS:-}" ]; then
|
||||
read -r -a VARIANTS <<< "$RAYLIB_VARIANTS"
|
||||
elif [[ -f /TICI || -f /AGNOS ]]; then
|
||||
VARIANTS=(comma)
|
||||
elif is_linux && [[ "$(uname -m)" == "x86_64" ]]; then
|
||||
VARIANTS=(desktop offscreen)
|
||||
elif is_linux && [[ "$(uname -m)" == "aarch64" ]]; then
|
||||
VARIANTS=(desktop comma)
|
||||
else
|
||||
VARIANTS=(desktop)
|
||||
fi
|
||||
|
||||
# On x86_64 Linux, also build the offscreen variant for CI headless rendering
|
||||
if [[ "$(uname)" == "Linux" && "$(uname -m)" == "x86_64" && "$RAYLIB_PLATFORM" != "PLATFORM_OFFSCREEN" ]]; then
|
||||
echo "Building offscreen variant..."
|
||||
build_variant() {
|
||||
local variant="$1"
|
||||
local platform="PLATFORM_DESKTOP"
|
||||
local commit="$RAYLIB_COMMIT"
|
||||
|
||||
# Install EGL/GL dev packages needed for offscreen build + bundling
|
||||
if command -v dnf &>/dev/null; then
|
||||
dnf install -y mesa-libEGL-devel mesa-libGL-devel libglvnd-opengl libglvnd-core-devel 2>/dev/null || true
|
||||
elif command -v apt-get &>/dev/null; then
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
apt-get update && apt-get install -y libegl-dev libgl-dev
|
||||
else
|
||||
sudo apt-get update && sudo apt-get install -y libegl-dev libgl-dev
|
||||
fi
|
||||
if [ "$variant" = "comma" ]; then
|
||||
platform="PLATFORM_COMMA"
|
||||
elif [ "$variant" = "offscreen" ]; then
|
||||
platform="PLATFORM_OFFSCREEN"
|
||||
commit="$RAYLIB_OFFSCREEN_COMMIT"
|
||||
fi
|
||||
|
||||
cd raylib-src/src
|
||||
make clean
|
||||
make -j"$NJOBS" PLATFORM=PLATFORM_OFFSCREEN CC="${CC:-gcc}"
|
||||
cp libraylib.a "$INSTALL_DIR/lib/libraylib_offscreen.a"
|
||||
cd "$DIR"
|
||||
echo "Building raylib $variant ($platform)"
|
||||
install_linux_deps "$platform"
|
||||
|
||||
# Bundle GLVND dispatchers so offscreen rendering works without extra system packages
|
||||
cd "$DIR/raylib-src"
|
||||
git fetch --depth 1 origin "$commit"
|
||||
git reset --hard "$commit"
|
||||
git clean -xdff .
|
||||
|
||||
cd src
|
||||
make clean
|
||||
make -j"$NJOBS" PLATFORM="$platform" CC="$CC"
|
||||
|
||||
mkdir -p "$INSTALL_DIR/lib/$variant"
|
||||
cp libraylib.a "$INSTALL_DIR/lib/$variant/libraylib.a"
|
||||
if [ "$variant" = "${VARIANTS[0]}" ]; then
|
||||
cp raylib.h raymath.h rlgl.h "$INSTALL_DIR/include/"
|
||||
cp libraylib.a "$INSTALL_DIR/lib/libraylib.a"
|
||||
fi
|
||||
}
|
||||
|
||||
for variant in "${VARIANTS[@]}"; do
|
||||
build_variant "$variant"
|
||||
done
|
||||
|
||||
cd "$DIR"
|
||||
|
||||
if is_linux && [[ "$(uname -m)" == "x86_64" && " ${VARIANTS[*]} " == *" offscreen "* ]]; then
|
||||
MESA_DIR="$INSTALL_DIR/lib/mesa"
|
||||
mkdir -p "$MESA_DIR"
|
||||
ldconfig 2>/dev/null || true
|
||||
@@ -105,17 +130,21 @@ if [[ "$(uname)" == "Linux" && "$(uname -m)" == "x86_64" && "$RAYLIB_PLATFORM" !
|
||||
src="$(ldconfig -p 2>/dev/null | grep "$lib" | grep -E 'x86.64|libc6,' | awk '{print $NF}' | head -1)"
|
||||
if [ -n "$src" ] && [ -f "$src" ]; then
|
||||
cp -L "$src" "$MESA_DIR/"
|
||||
# Create unversioned symlink for the linker
|
||||
base="${lib%%.so.*}"
|
||||
ln -sf "$lib" "$MESA_DIR/${base}.so"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Download raygui header
|
||||
RAYGUI_COMMIT="76b36b597edb70ffaf96f046076adc20d67e7827"
|
||||
curl -fsSLo "$INSTALL_DIR/include/raygui.h" \
|
||||
"https://raw.githubusercontent.com/raysan5/raygui/$RAYGUI_COMMIT/src/raygui.h"
|
||||
|
||||
cat > "$INSTALL_DIR/build-info.txt" <<EOF
|
||||
raylib_commit=$RAYLIB_COMMIT
|
||||
raylib_offscreen_commit=$RAYLIB_OFFSCREEN_COMMIT
|
||||
raygui_commit=$RAYGUI_COMMIT
|
||||
variants=${VARIANTS[*]}
|
||||
EOF
|
||||
|
||||
echo "Installed raylib to $INSTALL_DIR"
|
||||
du -sh "$INSTALL_DIR"
|
||||
|
||||
Reference in New Issue
Block a user