diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rwxr-xr-x | PKGBUILD | 67 | ||||
-rw-r--r-- | alchemy.install | 6 | ||||
-rwxr-xr-x | compile.bash | 210 |
4 files changed, 146 insertions, 139 deletions
diff --git a/.gitignore b/.gitignore index 805c26749a5f..896bfbc819e0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ src/ pkg/ *.bash *.tar.* +.envrc +.trunk @@ -10,56 +10,59 @@ pkgrel=1 pkgdesc="A Second Life client with focus on performance and code correctness. - Git Source build" arch=('x86_64') options=('!buildflags' '!lto' '!strip') -url=https://www.alchemyviewer.org +url="https://www.alchemyviewer.org" license=('LGPL') depends=(dbus-glib glu gtk3 libgl libiconv libidn libjpeg-turbo libpng libxss libxml2 mesa nss openal sdl2 vlc zlib) makedepends=('gcc' 'python-virtualenv' 'python-pip' 'git' 'xz') optdepends=( - 'alsa-lib: ALSA support' - 'freealut: OpenAL support' - 'gamemode: Gamemode support' - 'lib32-libidn11: SLVoice support' - 'lib32-libsndfile: SLVoice support' - 'lib32-util-linux: SLVoice support' - 'lib32-gstreamer0.10: SLVoice support' - 'libpulse: PulseAudio support' - 'mesa-libgl: Intel, Radeon, Nouveau support' - 'nvidia-libgl: NVIDIA support' - 'nvidia-utils: NVIDIA support' - 'wine: More up-to-date, less buggy SLVoice support') + 'alsa-lib: ALSA support' + 'freealut: OpenAL support' + 'gamemode: Gamemode support' + 'lib32-libidn11: SLVoice support' + 'lib32-libsndfile: SLVoice support' + 'lib32-util-linux: SLVoice support' + 'lib32-gstreamer0.10: SLVoice support' + 'libpulse: PulseAudio support' + 'mesa-libgl: Intel, Radeon, Nouveau support' + 'nvidia-libgl: NVIDIA support' + 'nvidia-utils: NVIDIA support' + 'wine: More up-to-date, less buggy SLVoice support') replaces=('alchemy-viewer-git') provides=('alchemy-viewer') install=alchemy.install source=("${pkgname}"::'git+https://git.alchemyviewer.org/alchemy/alchemy-next.git#branch='"${AL_BRANCH_OVERRIDE:-main}" - 'compile.bash') + 'compile.bash') sha256sums=('SKIP' - 'fbd63839b016543f8743577d6ab272cc2def20361c559b7fb21fac127356fe5b') + 'fbd63839b016543f8743577d6ab272cc2def20361c559b7fb21fac127356fe5b') pkgver() { - cd "${pkgname}" || exit 1 - ( - set -o pipefail - printf "%s.%s.%s" "$(cat indra/newview/VIEWER_VERSION.txt)" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" - ) + cd "${pkgname}" || exit 1 + ( + set -o pipefail + vwr_version=$(cat indra/newview/VIEWER_VERSION.txt) + rev=$(git rev-list --count HEAD) + short=$(git rev-parse --short HEAD) + printf "%s.%s.%s" "${vwr_version}" "${rev}" "${short}" + ) } prepare() { - cd "${pkgname}" || exit 1 - export USE_VENV=1 - ../compile.bash prepare + cd "${pkgname}" || exit 1 + export USE_VENV=1 + ../compile.bash prepare } build() { - cd "${pkgname}" || exit 1 - export USE_VENV=1 - ../compile.bash build + cd "${pkgname}" || exit 1 + export USE_VENV=1 + ../compile.bash build } package() { - mkdir -p "${pkgdir}/opt" - mkdir -p "${pkgdir}/usr/local/share/applications" - # Patch shortcut to avoid duplicated entries - sed -i 's;Name=Alchemy;Name=Alchemy (git build);' "${pkgname}/build-linux-64/newview/packaged/etc/refresh_desktop_app_entry.sh" - sed -i 's;alchemy-viewer\.desktop;'"${pkgname}\.desktop"';' "${pkgname}/build-linux-64/newview/packaged/etc/refresh_desktop_app_entry.sh" - mv "${pkgname}/build-linux-64/newview/packaged" "${pkgdir}/opt/${pkgname}" + mkdir -p "${pkgdir}/opt" + mkdir -p "${pkgdir}/usr/local/share/applications" + # Patch shortcut to avoid duplicated entries + sed -i 's;Name=Alchemy;Name=Alchemy (git build);' "${pkgname}/build-linux-64/newview/packaged/etc/refresh_desktop_app_entry.sh" + sed -i 's;alchemy-viewer\.desktop;'"${pkgname}\.desktop"';' "${pkgname}/build-linux-64/newview/packaged/etc/refresh_desktop_app_entry.sh" + mv "${pkgname}/build-linux-64/newview/packaged" "${pkgdir}/opt/${pkgname}" } diff --git a/alchemy.install b/alchemy.install index 7615fd639884..e9ab1b922578 100644 --- a/alchemy.install +++ b/alchemy.install @@ -1,8 +1,8 @@ #!/bin/bash post_install() { - bash /opt/alchemy-next-viewer-git/etc/refresh_desktop_app_entry.sh "/opt/alchemy-next-viewer-git" "/usr/local/share/applications/" - bash /opt/alchemy-next-viewer-git/etc/register_secondlifeprotocol.sh + bash /opt/alchemy-next-viewer-git/etc/refresh_desktop_app_entry.sh "/opt/alchemy-next-viewer-git" "/usr/local/share/applications/" + bash /opt/alchemy-next-viewer-git/etc/register_secondlifeprotocol.sh } post_upgrade() { - post_install $1 + post_install "$1" } diff --git a/compile.bash b/compile.bash index a32fd0cbe9d0..8817494fcd2e 100755 --- a/compile.bash +++ b/compile.bash @@ -2,124 +2,126 @@ set -e if command -v schedtool >/dev/null 2>&1; then - # Set current shell and all descendents as SCHED_BATCH, see schedtool(8) - schedtool -B $$ - prefix_cmd='schedtool -B -n20 -e ' + # Set current shell and all descendents as SCHED_BATCH, see schedtool(8) + schedtool -B $$ + prefix_cmd='schedtool -B -n20 -e ' fi venv() { - virtualenv ".venv" -p python3 - . ".venv/bin/activate" + virtualenv ".venv" -p python3 + . ".venv/bin/activate" } prepare() { - if [[ -n "$USE_VENV" ]]; then - venv - fi + if [[ -n "$USE_VENV" ]]; then + venv + fi - echo "Installing build toolchain..." - pip3 install --upgrade certifi --quiet - pip3 install --upgrade llbase --quiet - pip3 install --no-cache --upgrade autobuild --quiet - pip3 install --upgrade cmake ninja + echo "Installing build toolchain..." + pip3 install --upgrade certifi --quiet + pip3 install --upgrade llbase --quiet + pip3 install --no-cache --upgrade autobuild --quiet + pip3 install --upgrade cmake ninja } build() { - # we have a lot of files, relax ulimit to help performance - if [[ -n "$USE_VENV" ]]; then - . ".venv/bin/activate" - fi - set +e - ulimit -n 20000 - set -e - build_jobs=$(nproc) - if [[ -z "$NO_SMART_JOB_COUNT" ]]; then - if [[ ${build_jobs} -gt 1 ]]; then - jobs=1 - # The viewer requires an average of 2GB of memory per core to link - # Note: Behaviour change compared to the previous versions: - # This script will no longer try to allocate build memory into swap - # This is bad practice, and swap should be reserved to evict process - # memory from physical ram to make place for the current workset. - # This script will now try to check if swap is present and sufficent - # for the current used memory to be stored in swap before allocating, - # and will fallback to conservative allocation if swap is not available - gigperlinkprocess=2 - mempercorekb=$((gigperlinkprocess * 1048576)) - requiredmemorykb=$(($(nproc) * mempercorekb)) - free_output="$(free --kilo --total | tail -n+2 | tr -s ' ')" - physical_output=$(grep "Mem:" <<<"$free_output") - #total_output=$(grep Total: <<< "$free_output") - usedmemorykbphysical=$(cut -d ' ' -f 3 <<<"$physical_output") - totalmemorykbphysical=$(cut -d ' ' -f 2 <<<"$physical_output") - swap_output=$(grep Swap: <<<"$free_output") - # Determine available swap space - availableswapkb=0 - if [[ -n "$swap_output" ]]; then - availableswapkb=$(cut -d ' ' -f 4 <<<"$swap_output") - fi - availablememorykbphysical=$(cut -d ' ' -f 7 <<<"$free_output") - echo "Total memory: $totalmemorykbphysical (includes swap)" - echo "Available memory: $availablememorykbphysical" - echo "Required memory: $requiredmemorykb" - echo "Available physical memory on this system: $((availablememorykbphysical / 1024 / 1024)) GB" - echo "Estimated required memory to build with all cores: $((requiredmemorykb / 1024 / 1024)) GB" - if [[ ${requiredmemorykb} -gt ${availablememorykbphysical} ]]; then - echo "Warning: Not enough available physical memory to build with all cores" - if [[ ${usedmemorykbphysical} -lt ${availableswapkb} ]]; then - # use all physical ram as swap will do its job - echo "There is enough free swap to store the currently used memory" - jobs=$(((totalmemorykbphysical / 1024 / 1024) / gigperlinkprocess)) - else - # Not enough swap to hold ram contents, calculate manually - echo "Allocating build jobs according to available physical memory ("$((availablememorykbphysical / 1024 / 1024))"/"$((requiredmemorykb / 1024 / 1024))"GB)..." - # FIXME: Goes one iteration beyond what it should - while [[ $((jobs * mempercorekb)) -lt ${availablememorykbphysical} ]]; do - jobs=$((jobs + 1)) - echo -e "${jobs} jobs would consume $(((jobs * mempercorekb) / 1024 / 1024))GB" - done - # Back off one job count. Not sure why I have to do this but - # the loop is doing one extra iteration. - jobs=$((jobs - 1)) - fi - build_jobs=${jobs} - echo "Computed job count: ${build_jobs}" - fi - fi - fi - export AUTOBUILD_CPU_COUNT=$build_jobs - AL_CMAKE_CONFIG=( - -DLL_TESTS:BOOL=ON - -DDISABLE_FATAL_WARNINGS=ON - -DUSE_LTO:BOOL=OFF - -DVIEWER_CHANNEL="Alchemy Test" - ) - # I could not find the documentation on how to handle BUILDENV/OPTION in - # makepkg.conf. If you are reading this and know where it is, - # please send it my way. - # if [[ -n "$AL_NO_CCACHE" ]] || ! command -v ccache 2 > /dev/null 2>&1; then - # echo "ccache disabled" - # AL_CMAKE_CONFIG+=(-UCMAKE_CXX_COMPILER_LAUNCHER) - # else - # echo "ccache available and enabled" - # export CCACHE_SLOPPINESS="file_macro,locale,time_macros" - # export CCACHE_NOHASHDIR="true" - # AL_CMAKE_CONFIG+=(-DCMAKE_CXX_COMPILER_LAUNCHER=ccache) - # fi - $prefix_cmd autobuild configure -A 64 -c ReleaseOS -- "${AL_CMAKE_CONFIG[@]}" - echo "Building with ${AUTOBUILD_CPU_COUNT} jobs (adjusted)" - $prefix_cmd autobuild build -A64 -c ReleaseOS --no-configure + # we have a lot of files, relax ulimit to help performance + if [[ -n "$USE_VENV" ]]; then + . ".venv/bin/activate" + fi + set +e + ulimit -n 20000 + set -e + build_jobs=$(nproc) + if [[ -z "$NO_SMART_JOB_COUNT" ]]; then + if [[ ${build_jobs} -gt 1 ]]; then + jobs=1 + # The viewer requires an average of 2GB of memory per core to link + # Note: Behaviour change compared to the previous versions: + # This script will no longer try to allocate build memory into swap + # This is bad practice, and swap should be reserved to evict process + # memory from physical ram to make place for the current workset. + # This script will now try to check if swap is present and sufficent + # for the current used memory to be stored in swap before allocating, + # and will fallback to conservative allocation if swap is not available + gigperlinkprocess=2 + mempercorekb=$((gigperlinkprocess * 1048576)) + requiredmemorykb=$(($(nproc) * mempercorekb)) + free_output="$(free --kilo --total | tail -n+2 | tr -s ' ')" + physical_output=$(grep "Mem:" <<<"$free_output") + #total_output=$(grep Total: <<< "$free_output") + usedmemorykbphysical=$(cut -d ' ' -f 3 <<<"$physical_output") + totalmemorykbphysical=$(cut -d ' ' -f 2 <<<"$physical_output") + swap_output=$(grep Swap: <<<"$free_output") + # Determine available swap space + availableswapkb=0 + if [[ -n "$swap_output" ]]; then + availableswapkb=$(cut -d ' ' -f 4 <<<"$swap_output") + fi + availablememorykbphysical=$(cut -d ' ' -f 7 <<<"$free_output") + echo "Total memory: $totalmemorykbphysical (includes swap)" + echo "Available memory: $availablememorykbphysical" + echo "Required memory: $requiredmemorykb" + echo "Available physical memory on this system: $((availablememorykbphysical / 1024 / 1024)) GB" + echo "Estimated required memory to build with all cores: $((requiredmemorykb / 1024 / 1024)) GB" + if [[ ${requiredmemorykb} -gt ${availablememorykbphysical} ]]; then + echo "Warning: Not enough available physical memory to build with all cores" + if [[ ${usedmemorykbphysical} -lt ${availableswapkb} ]]; then + # use all physical ram as swap will do its job + echo "There is enough free swap to store the currently used memory" + jobs=$(((totalmemorykbphysical / 1024 / 1024) / gigperlinkprocess)) + else + # Not enough swap to hold ram contents, calculate manually + echo "Allocating build jobs according to available physical memory ("$((availablememorykbphysical / 1024 / 1024))"/"$((requiredmemorykb / 1024 / 1024))"GB)..." + # FIXME: Goes one iteration beyond what it should + while [[ $((jobs * mempercorekb)) -lt ${availablememorykbphysical} ]]; do + jobs=$((jobs + 1)) + echo -e "${jobs} jobs would consume $(((jobs * mempercorekb) / 1024 / 1024))GB" + done + # Back off one job count. Not sure why I have to do this but + # the loop is doing one extra iteration. + jobs=$((jobs - 1)) + fi + build_jobs=${jobs} + echo "Computed job count: ${build_jobs}" + fi + fi + fi + export AUTOBUILD_CPU_COUNT=$build_jobs + AL_CMAKE_CONFIG=( + -DLL_TESTS:BOOL=ON + -DDISABLE_FATAL_WARNINGS=ON + -DUSE_LTO:BOOL=OFF + -DVIEWER_CHANNEL="Alchemy Test" + ) + # I could not find the documentation on how to handle BUILDENV/OPTION in + # makepkg.conf. If you are reading this and know where it is, + # please send it my way. + # if [[ -n "$AL_NO_CCACHE" ]] || ! command -v ccache 2 > /dev/null 2>&1; then + # echo "ccache disabled" + # AL_CMAKE_CONFIG+=(-UCMAKE_CXX_COMPILER_LAUNCHER) + # else + # echo "ccache available and enabled" + # export CCACHE_SLOPPINESS="file_macro,locale,time_macros" + # export CCACHE_NOHASHDIR="true" + # AL_CMAKE_CONFIG+=(-DCMAKE_CXX_COMPILER_LAUNCHER=ccache) + # fi + $prefix_cmd autobuild configure -A 64 -c ReleaseOS -- "${AL_CMAKE_CONFIG[@]}" + echo "Building with ${AUTOBUILD_CPU_COUNT} jobs (adjusted)" + $prefix_cmd autobuild build -A64 -c ReleaseOS --no-configure } cleanbuild() { - rm -rf build-linux-64 - git pull --prune - build + rm -rf build-linux-64 + git pull --prune + build } if [[ -n "$1" ]]; then - $1 + $1 else - echo "Running unattended batch build..." - prepare - build + echo "Running unattended batch build..." + prepare + build fi + +# vi: set ai softtabstop=2 shiftwidth=2 tabstop=2 expandtab: |