ladybird/Toolchain/BuildCMake.sh
Andrew Kaster e4a59f664b Toolchain+Meta: Add script to build CMake from source
Since we upstreamed CMake support for Serenity, we can use the Platform
files from upstream instead of keeping our local copy. While not added
in this commit, we can add patching capabilities for the platform files
similar to what we do for gdb, llvm, gcc, and binutils later.
2022-12-13 11:36:14 +01:00

61 lines
1.8 KiB
Bash
Executable file

#!/usr/bin/env bash
# This script builds the CMake build system
set -e
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PREFIX_DIR="$DIR/Local/cmake"
BUILD_DIR="$DIR/Build/cmake"
TARBALLS_DIR="$DIR/Tarballs"
NPROC="nproc"
SYSTEM_NAME="$(uname -s)"
if [ "$SYSTEM_NAME" = "OpenBSD" ]; then
NPROC="sysctl -n hw.ncpuonline"
elif [ "$SYSTEM_NAME" = "FreeBSD" ]; then
NPROC="sysctl -n hw.ncpu"
elif [ "$SYSTEM_NAME" = "Darwin" ]; then
NPROC="sysctl -n hw.ncpu"
fi
[ -z "$MAKEJOBS" ] && MAKEJOBS=$($NPROC)
# Note: Update this alongside Meta/CMake/cmake-version.cmake
CMAKE_VERSION=3.25.1
CMAKE_ARCHIVE_SHA256=1c511d09516af493694ed9baf13c55947a36389674d657a2d5e0ccedc6b291d8
CMAKE_ARCHIVE=cmake-${CMAKE_VERSION}.tar.gz
CMAKE_ARCHIVE_URL=https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/${CMAKE_ARCHIVE}
mkdir -p "$DIR"/Tarballs
pushd "$DIR"/Tarballs
if [ ! -e "${CMAKE_ARCHIVE}" ]; then
echo "Downloading CMake from ${CMAKE_ARCHIVE_URL}..."
curl "${CMAKE_ARCHIVE_URL}" -L -o "${CMAKE_ARCHIVE}"
else
echo "${CMAKE_ARCHIVE} already exists, not downloading archive"
fi
if ! sha256sum --status -c <(echo "${CMAKE_ARCHIVE_SHA256}" "${CMAKE_ARCHIVE}"); then
echo "CMake archive SHA256 sum mismatch, please run script again"
rm -f "${CMAKE_ARCHIVE}"
exit 1
fi
if [ ! -d "cmake-${CMAKE_VERSION}" ]; then
echo "Extracting ${CMAKE_ARCHIVE}..."
tar -xf "${CMAKE_ARCHIVE}"
else
echo "cmake-${CMAKE_VERSION} already exists, not extracting archive"
fi
popd
mkdir -p "${PREFIX_DIR}"
mkdir -p "${BUILD_DIR}"
pushd "${BUILD_DIR}"
"${TARBALLS_DIR}"/cmake-"${CMAKE_VERSION}"/bootstrap --prefix="${PREFIX_DIR}" --parallel="${MAKEJOBS}"
make -j "${MAKEJOBS}"
make install
popd