From 935a1880e0976479f3a3efe2ed7ea8be0ec51925 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Sat, 16 Aug 2025 03:08:31 +0200 Subject: [PATCH 1/7] external_deps: deduplicate the nproc guess --- external_deps/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/external_deps/build.sh b/external_deps/build.sh index dc0560f8bc..3e2f928b80 100755 --- a/external_deps/build.sh +++ b/external_deps/build.sh @@ -1556,9 +1556,9 @@ fi CURL="$(command -v curl)" || log ERROR "Command 'curl' not found" # Enable parallel build -export MAKEFLAGS="-j`nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 1`" +export CMAKE_BUILD_PARALLEL_LEVEL="$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 1)" +export MAKEFLAGS="-j${CMAKE_BUILD_PARALLEL_LEVEL}" export SCONSFLAGS="${MAKEFLAGS}" -export CMAKE_BUILD_PARALLEL_LEVEL="$(nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 1)" # Setup platform platform="${1}"; shift From 609c14c5e553829671f328641d596acbb6287e3e Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 2 Sep 2025 17:52:02 +0200 Subject: [PATCH 2/7] external_deps: rework the virtual platforms --- external_deps/build.sh | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/external_deps/build.sh b/external_deps/build.sh index 3e2f928b80..02568aacb1 100755 --- a/external_deps/build.sh +++ b/external_deps/build.sh @@ -1454,9 +1454,10 @@ all_linux_arm64_default_packages='zlib gmp nettle curl sdl3 glew png jpeg webp o base_linux_armhf_default_packages="${base_linux_arm64_default_packages}" all_linux_armhf_default_packages="${all_linux_arm64_default_packages}" -linux_build_platforms='linux-amd64-default linux-arm64-default linux-armhf-default linux-i686-default windows-amd64-mingw windows-amd64-msvc windows-i686-mingw windows-i686-msvc' -macos_build_platforms='macos-amd64-default' -all_platforms="$(echo ${linux_build_platforms} ${macos_build_platforms} | tr ' ' '\n' | sort -u | xargs echo)" +all_linux_platforms='linux-amd64-default linux-arm64-default linux-armhf-default linux-i686-default' +all_windows_platforms='windows-amd64-mingw windows-amd64-msvc windows-i686-mingw windows-i686-msvc' +all_macos_platforms='macos-amd64-default' +all_platforms="${all_linux_platforms} ${all_windows_platforms} ${all_macos_platforms}" errorHelp() { sed -e 's/\\t/'$'\t''/g' <<-EOF @@ -1472,9 +1473,10 @@ errorHelp() { \t${all_platforms} Virtual platforms: - \tall: all platforms - \tbuild-linux — platforms buildable on linux: ${linux_build_platforms} - \tbuild-macos — platforms buildable on macos: ${macos_build_platforms} + \tlinux — ${all_linux_platforms} + \twindows — ${all_windows_platforms} + \tmacos — ${all_macos_platforms} + \tall — linux windows macos Packages: \tpkgconfig nasm zlib gmp nettle curl sdl3 glew png jpeg webp openal ogg vorbis opus opusfile naclsdk wasisdk wasmtime @@ -1568,11 +1570,14 @@ case "${platform}" in 'all') platform_list="${all_platforms}" ;; -'build-linux') - platform_list="${linux_build_platforms}" +'linux') + platform_list="${all_linux_platforms}" ;; -'build-macos') - platform_list="${macos_build_platforms}" +'windows') + platform_list="${all_windows_platforms}" +;; +'macos') + platform_list="${all_macos_platforms}" ;; *) for known_platform in ${all_platforms} From 18a7b71b04060039c3f78535269046bc80717f52 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Wed, 3 Sep 2025 16:02:39 +0200 Subject: [PATCH 3/7] external_deps: improve build and install logging --- external_deps/build.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/external_deps/build.sh b/external_deps/build.sh index 02568aacb1..774c722172 100755 --- a/external_deps/build.sh +++ b/external_deps/build.sh @@ -1110,7 +1110,7 @@ build_depcheck() { for dll in $(find "${PREFIX}/bin" -type f -name '*.dll'); do # https://wiki.unvanquished.net/wiki/MinGW#Built-in_DLL_dependencies if objdump -p "${dll}" | grep -oP '(?<=DLL Name: )(libgcc_s|libstdc|libssp|libwinpthread).*'; then - echo "${dll} depends on above DLLs" + log WARNING "${dll} depends on above DLLs" good=false fi done @@ -1169,6 +1169,7 @@ list_build() { eval "package_list=(\${${list_name}_${PLATFORM//-/_}_packages})" for pkg in "${package_list[@]}"; do cd "${WORK_DIR}" + log STATUS "Processing target '${pkg}' for ${PLATFORM}" "build_${pkg}" done } @@ -1602,6 +1603,7 @@ do ( # Build packages for pkg in "${@}"; do cd "${WORK_DIR}" + log STATUS "Processing target '${pkg}' for ${PLATFORM}" "build_${pkg}" done ) done From 9e78e1bea6ef28dd4c94f7a1d0f470e248faf7bb Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Sat, 6 Sep 2025 15:16:23 +0200 Subject: [PATCH 4/7] external_deps: improve extract logging --- external_deps/build.sh | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/external_deps/build.sh b/external_deps/build.sh index 774c722172..b8f7646c34 100755 --- a/external_deps/build.sh +++ b/external_deps/build.sh @@ -93,38 +93,44 @@ log() { # Extract an archive into the given subdirectory of the build dir and cd to it # Usage: extract extract() { - rm -rf "${2}" - mkdir -p "${2}" - case "${1}" in + local archive_file="${1}"; shift + local extract_dir="${1}"; shift + + local archive_name="$(basename "${archive_file}")" + log STATUS "Extracting ${archive_name}" + + rm -rf "${extract_dir}" + mkdir -p "${extract_dir}" + case "${archive_file}" in *.tar.bz2) - tar xjf "${1}" -C "${2}" + tar xjf "${archive_file}" -C "${extract_dir}" ;; *.tar.xz) - tar xJf "${1}" -C "${2}" + tar xJf "${archive_file}" -C "${extract_dir}" ;; *.tar.gz|*.tgz) - tar xzf "${1}" -C "${2}" + tar xzf "${archive_file}" -C "${extract_dir}" ;; *.zip) - unzip -d "${2}" "${1}" + unzip -d "${extract_dir}" "${archive_file}" ;; *.cygtar.bz2) # Some Windows NaCl SDK packages have incorrect symlinks, so use # cygtar to extract them. - "${SCRIPT_DIR}/cygtar.py" -xjf "${1}" -C "${2}" + "${SCRIPT_DIR}/cygtar.py" -xjf "${archive_file}" -C "${extract_dir}" ;; *.dmg) local dmg_temp_dir="$(mktemp -d)" - hdiutil attach -mountpoint "${dmg_temp_dir}" "${1}" - cp -R "${dmg_temp_dir}/"* "${2}/" + hdiutil attach -mountpoint "${dmg_temp_dir}" "${archive_file}" + cp -R "${dmg_temp_dir}/"* "${extract_dir}/" hdiutil detach "${dmg_temp_dir}" rmdir "${dmg_temp_dir}" ;; *) - log ERROR "Unknown archive type for ${1}" + log ERROR "Unknown archive type for ${archive_name}" ;; esac - cd "${2}" + cd "${extract_dir}" } download() { From 66a011fb26a2b4c0c19dea0437eb47b0c9eb99bb Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Wed, 3 Sep 2025 16:08:51 +0200 Subject: [PATCH 5/7] external_deps: deduplicate build iterating --- external_deps/build.sh | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/external_deps/build.sh b/external_deps/build.sh index b8f7646c34..ef6bbeee9d 100755 --- a/external_deps/build.sh +++ b/external_deps/build.sh @@ -1169,17 +1169,22 @@ build_genlib() { esac } -list_build() { - local list_name="${1}" - local package_list - eval "package_list=(\${${list_name}_${PLATFORM//-/_}_packages})" - for pkg in "${package_list[@]}"; do +build() { + for pkg in "${@}" + do cd "${WORK_DIR}" log STATUS "Processing target '${pkg}' for ${PLATFORM}" "build_${pkg}" done } +list_build() { + local list_name="${1}" + local package_list + eval "package_list=(\${${list_name}_${PLATFORM//-/_}_packages})" + build "${package_list[@]}" +} + build_base() { list_build base } @@ -1605,11 +1610,5 @@ esac for PLATFORM in ${platform_list} do ( "setup_${PLATFORM}" - - # Build packages - for pkg in "${@}"; do - cd "${WORK_DIR}" - log STATUS "Processing target '${pkg}' for ${PLATFORM}" - "build_${pkg}" - done + build "${@}" ) done From 27e532e64fd37809ee34474fc9a27e46a864b016 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Mon, 8 Sep 2025 14:30:47 +0200 Subject: [PATCH 6/7] external_deps: reformat and reword the help message Print to stderr. Reformat the help message. Replace dynamic tabs with spaces. Also simplify an overengineered madness. Also we don't do zip anymore, tarball for everyone for a long time. --- external_deps/build.sh | 57 +++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/external_deps/build.sh b/external_deps/build.sh index ef6bbeee9d..d71f319f7e 100755 --- a/external_deps/build.sh +++ b/external_deps/build.sh @@ -1471,63 +1471,64 @@ all_windows_platforms='windows-amd64-mingw windows-amd64-msvc windows-i686-mingw all_macos_platforms='macos-amd64-default' all_platforms="${all_linux_platforms} ${all_windows_platforms} ${all_macos_platforms}" -errorHelp() { - sed -e 's/\\t/'$'\t''/g' <<-EOF - usage: $(basename "${BASH_SOURCE[0]}") [OPTION] +printHelp() { + # Please align to 4-space tabs. + cat >&2 <<-EOF + usage: $(basename "${BASH_SOURCE[0]}") [OPTION] Script to build dependencies for platforms which do not provide them Options: - \t--download-only — only download source packages, do not build them - \t--prefer-ours — attempt to download from unvanquished.net first + --download-only only download source packages, do not build them + --prefer-ours attempt to download from unvanquished.net first Platforms: - \t${all_platforms} + ${all_platforms} Virtual platforms: - \tlinux — ${all_linux_platforms} - \twindows — ${all_windows_platforms} - \tmacos — ${all_macos_platforms} - \tall — linux windows macos + linux ${all_linux_platforms} + windows ${all_windows_platforms} + macos ${all_macos_platforms} + all linux windows macos Packages: - \tpkgconfig nasm zlib gmp nettle curl sdl3 glew png jpeg webp openal ogg vorbis opus opusfile naclsdk wasisdk wasmtime + pkgconfig nasm zlib gmp nettle curl sdl3 glew png jpeg webp openal ogg vorbis opus opusfile naclsdk wasisdk wasmtime Virtual packages: - \tbase — build packages for pre-built binaries to be downloaded when building the game - \tall — build all supported packages that can possibly be involved in building the game - \tinstall — create a stripped down version of the built packages that CMake can use - \tpackage — create a zip/tarball of the dependencies so they can be distributed - \twipe — remove products of build process, excepting download cache but INCLUDING installed files. Must be last + base build packages for pre-built binaries to be downloaded when building the game + all build all supported packages that can possibly be involved in building the game + install create a stripped down version of the built packages that CMake can use + package create a tarball of the dependencies so they can be distributed + wipe remove products of build process, excepting download cache but INCLUDING installed files. Must be last Packages required for each platform: windows-amd64-msvc: windows-i686-msvc: - \tbase: ${base_windows_amd64_msvc_packages} - \tall: same + base ${base_windows_amd64_msvc_packages} + all same windows-amd64-mingw: windows-i686-mingw: - \tbase: ${base_windows_amd64_mingw_packages} - \tall: same + base ${base_windows_amd64_mingw_packages} + all same macos-amd64-default: - \tbase: ${base_macos_amd64_default_packages} - \tall: same + base ${base_macos_amd64_default_packages} + all same linux-amd64-default: - \tbase: ${base_linux_amd64_default_packages} - \tall: ${all_linux_amd64_default_packages} + base ${base_linux_amd64_default_packages} + all ${all_linux_amd64_default_packages} linux-i686-default: - \tbase: ${base_linux_i686_default_packages} - \tall: ${all_linux_i686_default_packages} + base ${base_linux_i686_default_packages} + all ${all_linux_i686_default_packages} linux-arm64-default: linux-armhf-default: - \tbase: ${base_linux_arm64_default_packages} - \tall: ${all_linux_arm64_default_packages} + base ${base_linux_arm64_default_packages} + all ${all_linux_arm64_default_packages} EOF false From b52345cfe85b73b6f75acf8d917e05ce8b5d9ebf Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Mon, 8 Sep 2025 15:00:16 +0200 Subject: [PATCH 7/7] external_deps: rework the help and error messages, also fix a bug --- external_deps/build.sh | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/external_deps/build.sh b/external_deps/build.sh index d71f319f7e..7ecc965e2a 100755 --- a/external_deps/build.sh +++ b/external_deps/build.sh @@ -1531,7 +1531,14 @@ printHelp() { all ${all_linux_arm64_default_packages} EOF - false + + exit +} + +syntaxError() { + log ERROR "${1}" || true + echo >&2 + printHelp } download_only='false' @@ -1552,8 +1559,11 @@ do require_theirs='true' shift ;; - '--'*) - helpError + '-h'|'--help') + printHelp + ;; + '-'*) + syntaxError 'Unknown option' ;; *) break @@ -1561,8 +1571,12 @@ do done # Usage -if [ "${#}" -lt "2" ]; then - errorHelp +if [ "${#}" -lt "1" ] +then + syntaxError 'Missing platform and package(s)' +elif [ "${#}" -lt "2" ] +then + syntaxError 'Missing package(s)' fi # Do not reuse self-built curl from external_deps custom PATH @@ -1603,7 +1617,7 @@ case "${platform}" in done if [ -z "${platform_list}" ] then - errorHelp + syntaxError 'Unknown platform' fi ;; esac