mirror of
https://github.com/SerenityOS/serenity
synced 2024-07-22 18:46:18 +00:00
![MacDue](/assets/img/avatar_default.png)
For some reason (for me) on Ubuntu 22.04 the standard make generator fails: --------------------------------------------- CMake has bootstrapped. Now run gmake. make: make: Permission denied make: *** [Makefile:166: all] Error 127 This seems to be because Source/kwsys/CMakeFiles/cmsys.dir/depend is missing or not generated. Using ninja works fine though, and as it is already the default for Serenity proper, it seems reasonable to switch it here too.
84 lines
2.3 KiB
Bash
Executable file
84 lines
2.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# This script builds the CMake build system
|
|
set -e
|
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
# shellcheck source=/dev/null
|
|
. "${DIR}/../Meta/shell_include.sh"
|
|
|
|
exit_if_running_as_root "Do not run BuildCMake.sh as root, parts of your Toolchain directory will become root-owned"
|
|
|
|
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)
|
|
|
|
check_sha() {
|
|
if [ $# -ne 2 ]; then
|
|
error "Usage: check_sha FILE EXPECTED_HASH"
|
|
return 1
|
|
fi
|
|
|
|
FILE="${1}"
|
|
EXPECTED_HASH="${2}"
|
|
|
|
if [ "$SYSTEM_NAME" = "Darwin" ]; then
|
|
SEEN_HASH="$(shasum -a 256 "${FILE}" | cut -d " " -f 1)"
|
|
else
|
|
SEEN_HASH="$(sha256sum "${FILE}" | cut -d " " -f 1)"
|
|
fi
|
|
test "${EXPECTED_HASH}" = "${SEEN_HASH}"
|
|
}
|
|
|
|
# Note: Update this alongside Meta/CMake/cmake-version.cmake
|
|
CMAKE_VERSION=3.26.0
|
|
CMAKE_ARCHIVE_SHA256=4256613188857e95700621f7cdaaeb954f3546a9249e942bc2f9b3c26e381365
|
|
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 ! check_sha "${CMAKE_ARCHIVE}" "${CMAKE_ARCHIVE_SHA256}"; 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 --generator="Ninja" --prefix="${PREFIX_DIR}" --parallel="${MAKEJOBS}"
|
|
ninja -j "${MAKEJOBS}"
|
|
ninja install
|
|
popd
|