diff options
author | Xavier Cho | 2023-05-09 13:27:25 +0900 |
---|---|---|
committer | Xavier Cho | 2023-05-09 13:27:25 +0900 |
commit | e9573e2d4727e39207ad668b883699138cf34bb7 (patch) | |
tree | 6ec1683ed7ecd7e216d0f47bca436725d7f0cec1 | |
parent | bb983567c12849a0d604ab748f204146c87e43a8 (diff) | |
download | aur-e9573e2d4727e39207ad668b883699138cf34bb7.tar.gz |
Fix Embree patch and compatibility with Python 3.11
* Replaced ninja with makepkg-cg.
* Compatibility with Python 3.11 and GCC 12.
* Support for MaterialX and Intel OpenCL FPGA kernels.
(Most of those are from stativ's blender-git AUR package:
https://aur.archlinux.org/packages/blender-git)
-rw-r--r-- | .SRCINFO | 16 | ||||
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | PKGBUILD | 112 | ||||
-rw-r--r-- | embree.patch | 17 | ||||
-rw-r--r-- | python11.patch | 32 |
5 files changed, 138 insertions, 40 deletions
@@ -1,6 +1,6 @@ pkgbase = upbge-git pkgdesc = Uchronia Project Blender Game Engine fork of Blender Game Engine - pkgver = 128141.37504273e18 + pkgver = 129501.11ca6b54643 pkgrel = 1 url = https://upbge.org/ install = upbge.install @@ -9,11 +9,9 @@ pkgbase = upbge-git license = GPL makedepends = git makedepends = subversion - makedepends = make makedepends = cmake makedepends = clang makedepends = boost - makedepends = ninja makedepends = mesa makedepends = llvm makedepends = wayland @@ -46,6 +44,14 @@ pkgbase = upbge-git optdepends = cuda: CUDA support in Cycles optdepends = optix>=7.1.0: OptiX support in Cycles optdepends = openpgl: Path guiding support in Cycles + optdepends = materialx: MaterialX materials + optdepends = level-zero-headers: Intel OpenCL FPGA kernels (all four needed) + optdepends = intel-compute-runtime: Intel OpenCL FPGA kernels (all four needed) + optdepends = intel-graphics-compiler: Intel OpenCL FPGA kernels (all four needed) + optdepends = intel-oneapi-basekit: Intel OpenCL FPGA kernels (all four needed) + optdepends = gcc12: Compile CUDA support in Cycles + optdepends = gcc12-libs: Compile CUDA support in Cycles + optdepends = makepkg-cg: Control resources during compilation optdepends = usd: USD export Scene provides = blender conflicts = blender @@ -55,6 +61,7 @@ pkgbase = upbge-git source = blender-translations.git::git+https://projects.blender.org/blender/blender-translations.git source = blender-dev-tools.git::git+https://projects.blender.org/blender/blender-dev-tools.git source = upbge.desktop + source = python11.patch source = usd_python.patch source = SelectCudaComputeArch.patch source = embree.patch @@ -64,8 +71,9 @@ pkgbase = upbge-git sha256sums = SKIP sha256sums = SKIP sha256sums = b5c9bf4fa265389db4b3f23e96d74cc86c51d908b8943eb80967614d8af1ea1a + sha256sums = ae81c77dd41736bbcf65e31fa77477979b214004be3423e10eddef7af3f12dff sha256sums = 5b98624ec2ce39fdb33836527343d026edbb63c948850b20c1c20c019d24f434 sha256sums = 155c04f971d3f45618a89fa73d91e21ba493ae24029475e18192c49c3fcd8cb4 - sha256sums = 6e7392cfb159165dfd63e0cc7858e1ffdabc2aae4126288aca6a15082d3c7efc + sha256sums = e34fa6034ca065cdddc380ef7fb1ab094349203dc6d63b2526cdf4740b1eaf02 pkgname = upbge-git diff --git a/.gitignore b/.gitignore index 8eb7df3001c4..f499e2929632 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,6 @@ !embree.patch !SelectCudaComputeArch.patch !usd_python.patch +!python11.patch !.SRCINFO !.gitignore @@ -3,7 +3,7 @@ #shellcheck disable=SC2015 pkgname=upbge-git -pkgver=128141.37504273e18 +pkgver=129501.11ca6b54643 pkgrel=1 pkgdesc="Uchronia Project Blender Game Engine fork of Blender Game Engine" arch=("i686" "x86_64") @@ -14,8 +14,16 @@ depends=("alembic" "embree" "libgl" "python" "python-numpy" "openjpeg2" "libharu optdepends=("cuda: CUDA support in Cycles" "optix>=7.1.0: OptiX support in Cycles" "openpgl: Path guiding support in Cycles" + "materialx: MaterialX materials" + "level-zero-headers: Intel OpenCL FPGA kernels (all four needed)" + "intel-compute-runtime: Intel OpenCL FPGA kernels (all four needed)" + "intel-graphics-compiler: Intel OpenCL FPGA kernels (all four needed)" + "intel-oneapi-basekit: Intel OpenCL FPGA kernels (all four needed)" + "gcc12: Compile CUDA support in Cycles" + "gcc12-libs: Compile CUDA support in Cycles" + "makepkg-cg: Control resources during compilation" "usd: USD export Scene") -makedepends=("git" "subversion" "make" "cmake" "clang" "boost" "ninja" "mesa" "llvm" wayland{,-protocols} +makedepends=("git" "subversion" "cmake" "clang" "boost" "mesa" "llvm" wayland{,-protocols} "libxkbcommon") provides=("blender") conflicts=("blender") @@ -34,6 +42,7 @@ source=( "blender-translations.git::git+https://projects.blender.org/blender/blender-translations.git" "blender-dev-tools.git::git+https://projects.blender.org/blender/blender-dev-tools.git" upbge.desktop + python11.patch usd_python.patch SelectCudaComputeArch.patch embree.patch) @@ -44,9 +53,10 @@ sha256sums=( "SKIP" "SKIP" "b5c9bf4fa265389db4b3f23e96d74cc86c51d908b8943eb80967614d8af1ea1a" + "ae81c77dd41736bbcf65e31fa77477979b214004be3423e10eddef7af3f12dff" "5b98624ec2ce39fdb33836527343d026edbb63c948850b20c1c20c019d24f434" "155c04f971d3f45618a89fa73d91e21ba493ae24029475e18192c49c3fcd8cb4" - "6e7392cfb159165dfd63e0cc7858e1ffdabc2aae4126288aca6a15082d3c7efc") + "e34fa6034ca065cdddc380ef7fb1ab094349203dc6d63b2526cdf4740b1eaf02") pkgver() { cd "$srcdir/upbge" @@ -61,22 +71,53 @@ prepare() { fi ((DISABLE_USD)) || git -C "$srcdir/upbge" apply -v "${srcdir}"/usd_python.patch git -C "$srcdir/upbge" apply -v "${srcdir}"/embree.patch + git -C "$srcdir/upbge" apply -v "${srcdir}"/python11.patch } build() { _pyver=$(python -c "from sys import version_info; print(\"%d.%d\" % (version_info[0],version_info[1]))") msg "Python version detected: ${_pyver}" + # determine whether we can install python modules + if [[ -n "$_pyver" ]]; then + _CMAKE_FLAGS+=( -DWITH_PYTHON=$_pyver \ + -DWITH_PYTHON_MODULE=OFF \ + -DWITH_PYTHON_INSTALL=ON \ + -DWITH_PYTHON_SAFETY=ON ) + fi + + export CC=`which gcc-12` + export CXX=`which g++-12` + export CUDAHOSTCXX="$CC" + + _CMAKE_FLAGS+=( -DWITH_CLANG=ON \ + -DWITH_CYCLES=ON ) + + # check for oneapi + export _ONEAPI_CLANG=/opt/intel/oneapi/compiler/latest/linux/bin-llvm/clang + export _ONEAPI_CLANGXX=/opt/intel/oneapi/compiler/latest/linux/bin-llvm/clang++ + [[ -f "$_ONEAPI_CLANG" ]] && ( + _CMAKE_FLAGS+=( -DWITH_CYCLES_DEVICE_ONEAPI=ON \ + -DWITH_CYCLES_ONEAPI_BINARIES=ON \ + -DWITH_CLANG=ON ) + ) + [[ -f /opt/bin/clang ]] && _CMAKE_FLAGS+=( -DLLVM_ROOT_DIR=/opt/lib ) + # determine whether we can precompile CUDA kernels _CUDA_PKG=$(pacman -Qq cuda 2>/dev/null) || true if [ "$_CUDA_PKG" != "" ]; then - _CMAKE_FLAGS+=( -DWITH_CYCLES_CUDA_BINARIES=ON - -DCUDA_TOOLKIT_ROOT_DIR=/opt/cuda ) - [ -f "/usr/lib/ccache/bin/nvcc-ccache" ] && export CUDA_NVCC_EXECUTABLE=/usr/lib/ccache/bin/nvcc-ccache + CUDAHOSTCXX=`which gcc-12` + # https://wiki.blender.org/wiki/Building_Blender/GPU_Binaries + _CMAKE_FLAGS+=( -DWITH_CYCLES_CUDA_BINARIES=ON \ + -DWITH_COMPILER_ASAN=OFF \ + -DCMAKE_CUDA_HOST_COMPILER=`which gcc-12` ) + fi - if _cuda_gcc=$(basename "$(readlink /opt/cuda/bin/gcc)") ; then - [ -L "/usr/lib/ccache/bin/$_cuda_gcc" ] && export CUDAHOSTCXX=/usr/lib/ccache/bin/"$_cuda_gcc" - fi + # check for materialx + _MX_PKG=$(pacman -Qq materialx 2>/dev/null) || true + if [ "$_MX_PKG" != "" ]; then + _CMAKE_FLAGS+=( -DWITH_MATERIALX=ON ) + PATH="/usr/materialx:$PATH" fi # check for optix @@ -93,30 +134,45 @@ build() { -DUSD_ROOT=/usr ) fi - cmake -G "Ninja" -S "$srcdir/upbge" -B "$srcdir/build" \ - -C "$srcdir/upbge/build_files/cmake/config/blender_release.cmake" \ - -DWITH_GAMEENGINE=ON \ - -DWITH_PLAYER=ON \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_BUILD_TYPE=Release \ - -DWITH_INSTALL_PORTABLE=OFF \ - -DWITH_SYSTEM_GLEW=ON \ - -DWITH_PYTHON_INSTALL=OFF \ - -DWITH_FFTW3=ON \ - -DWITH_CODEC_FFMPEG=ON \ - -DWITH_MOD_OCEANSIM=ON \ - -DXR_OPENXR_SDK_ROOT_DIR=/usr \ - -DPYTHON_VERSION="${_pyver}" \ - "${_CMAKE_FLAGS[@]}" - export NINJA_STATUS="[%p | %f<%r<%u | %cbps ] " -# shellcheck disable=SC2086 # allow MAKEFLAGS to split when multiple flags provided. - ninja -C "$srcdir/build" ${MAKEFLAGS:--j$(nproc)} + (2>&1 CUDAHOSTCXX="$CUDAHOSTCXX" cmake -S "$srcdir/upbge" -B build --fresh \ + -C "${srcdir}/upbge/build_files/cmake/config/blender_release.cmake" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DWITH_STATIC_LIBS=OFF \ + -DWITH_INSTALL_PORTABLE=OFF \ + -DWITH_LIBS_PRECOMPILED=OFF \ + -DWITH_GAMEENGINE=ON \ + -DWITH_PLAYER=ON \ + -DWITH_PYTHON_INSTALL=OFF \ + -DWITH_FFTW3=ON \ + -DWITH_CODEC_FFMPEG=ON \ + -DWITH_MOD_OCEANSIM=ON \ + -DXR_OPENXR_SDK_ROOT_DIR=/usr \ + -DPYTHON_VERSION="${_pyver}" \ + ${_CMAKE_FLAGS[@]}) #> "$srcdir/../cmake_out" + #--trace-expand \ + + cd build + + MAKE_CMD="make ${MAKEFLAGS:--j1}" + + USING_MAKEPKG_CG="$(systemctl --user -t slice | grep -o makepkg-cg-`id -u`-'[[:digit:]]\+'.slice'[[:space:]]\+'loaded'[[:space:]]\+'active)" || true + MAKEPKG_CG_WARNING=$( + cat << 'EOF' +If you use systemd, consider trying `makepkg-cg`. +This build is otherwise very likely to use more RAM than +the system has, especially with a high `-j`! +EOF + ) + [[ -z "$USING_MAKEPKG_CG" ]] && warning "$MAKEPKG_CG_WARNING" + + $MAKE_CMD } package() { export DESTDIR="$pkgdir" - ninja -C "$srcdir/build" install + make -C "$srcdir/build" install #undo rpath clean in cmake_install ( faster than patching CMakeLists.txt) cp "$srcdir/build/bin/blender" "$pkgdir/usr/bin/blender" diff --git a/embree.patch b/embree.patch index 6aaad01275cb..5afa3bf3cfb0 100644 --- a/embree.patch +++ b/embree.patch @@ -1,23 +1,24 @@ diff --git a/build_files/cmake/Modules/FindEmbree.cmake b/build_files/cmake/Modules/FindEmbree.cmake -index 90cf23d3e13..f625efaa542 100644 +index c7f9bc5b220..4e3bcdca897 100644 --- a/build_files/cmake/Modules/FindEmbree.cmake +++ b/build_files/cmake/Modules/FindEmbree.cmake -@@ -10,5 +10,8 @@ +@@ -10,6 +10,9 @@ # EMBREE_ROOT_DIR, The base directory to search for Embree. # This can also be an environment variable. # EMBREEFOUND, If false, do not try to use Embree. +# +# also defined, but not for general use are +# EMBREE_LIBRARY, where to find the Embree library. - + # If EMBREE_ROOT_DIR was defined in the environment, use it. -@@ -63,14 +66,23 @@ FOREACH(COMPONENT ${_embree_FIND_COMPONENTS}) + IF(NOT EMBREE_ROOT_DIR AND NOT $ENV{EMBREE_ROOT_DIR} STREQUAL "") +@@ -103,14 +106,23 @@ FOREACH(COMPONENT ${_embree_FIND_COMPONENTS}) + LIST(APPEND _embree_LIBRARIES "${EMBREE_${UPPERCOMPONENT}_LIBRARY}") ENDFOREACH() - +FIND_LIBRARY(EMBREE_LIBRARY + NAMES -+ embree3 ++ embree4 + HINTS + ${_embree_SEARCH_DIRS} + PATH_SUFFIXES @@ -38,10 +39,10 @@ index 90cf23d3e13..f625efaa542 100644 ENDIF() diff --git a/intern/cycles/blender/CMakeLists.txt b/intern/cycles/blender/CMakeLists.txt -index 2316800e21e..591841152e2 100644 +index ceb024ba5e7..d3320545c1f 100644 --- a/intern/cycles/blender/CMakeLists.txt +++ b/intern/cycles/blender/CMakeLists.txt -@@ -67,6 +67,12 @@ if(WITH_CYCLES_LOGGING) +@@ -80,6 +80,12 @@ if(WITH_CYCLES_LOGGING) ) endif() diff --git a/python11.patch b/python11.patch new file mode 100644 index 000000000000..f617f1d2a227 --- /dev/null +++ b/python11.patch @@ -0,0 +1,32 @@ +diff --git a/source/gameengine/GameLogic/SCA_PythonController.cpp b/source/gameengine/GameLogic/SCA_PythonController.cpp +index c66bcc722d4..a2c0eee4efc 100644 +--- a/source/gameengine/GameLogic/SCA_PythonController.cpp ++++ b/source/gameengine/GameLogic/SCA_PythonController.cpp +@@ -36,7 +36,6 @@ + + #ifdef WITH_PYTHON + # include "compile.h" +-# include "eval.h" + # include "py_capi_utils.h" + #endif // WITH_PYTHON + +diff --git a/source/gameengine/VideoTexture/Texture.cpp b/source/gameengine/VideoTexture/Texture.cpp +index bbf4fbb2965..34a58799880 100644 +--- a/source/gameengine/VideoTexture/Texture.cpp ++++ b/source/gameengine/VideoTexture/Texture.cpp +@@ -445,11 +445,11 @@ EXP_PYMETHODDEF_DOC(Texture, refresh, "Refresh texture from source") + * "refresh" method), because the depsgraph has not been warned yet. */ + bool needs_notifier = m_source && ( + #ifdef WITH_FFMPEG +- _Py_IS_TYPE(&m_source->ob_base, &VideoFFmpegType) || +- _Py_IS_TYPE(&m_source->ob_base, &ImageFFmpegType) || ++ Py_IS_TYPE(&m_source->ob_base, &VideoFFmpegType) || ++ Py_IS_TYPE(&m_source->ob_base, &ImageFFmpegType) || + #endif // WITH_FFMPEG +- _Py_IS_TYPE(&m_source->ob_base, &ImageMixType) || +- _Py_IS_TYPE(&m_source->ob_base, &ImageViewportType)); ++ Py_IS_TYPE(&m_source->ob_base, &ImageMixType) || ++ Py_IS_TYPE(&m_source->ob_base, &ImageViewportType)); + if (needs_notifier) { + /* This update notifier will be flushed next time + * BKE_scene_graph_update_tagged will be called */ |