在 AArch64 / ARM64 架构平台编译 Blender

该文章已过时,请等待更新。

白嫖了一台 Jetson Nano,想试试这玩意儿的运算能力,正好也在玩 Blender,所以就想在板子上跑跑。
然而,官方镜像所用 Ubuntu 18.04 只有 2.79b。
我都已经用 2.93 了啊喂!
于是,故事开始了……

很可怕吗,是的很可怕……

程序下载

如果你不想编译,请下载这个文件然后跌跌撞撞奔向评论区 (?):

食用方法:

  • 将压缩包内blender-aarch64-2.93.5文件夹解压到你想要的位置。
  • 内含configcycles kernel cache,可解压到$HOME目录。

当前系统环境

  • 开发板:Jetson Nano 2GB。
  • CPU 架构:ARMv8 (AArch64)。
  • 搭载系统:Ubuntu 18.04.6 LTS。
  • CUDA:10.2

编译前准备工作

来看下 Blender 对编译器的要求 [1]

编译器官方使用版本最低支持版本
Linux GCC9.3.19.3
Linux Clang-8.0
macOS Xcode11.510.0
Windows Visual Studio20192017

除此以外,Blender 的某些依赖需要根据情况修改编译配置,以及更高版本的编译工具。在此直接列个表好了:

依赖问题 / 额外要求
OpenSSL-m64参数不可用
TBB-mrtm参数不可用;未更新代码
OpenEXRCMake >= 3.12[2]
Embree能够访问 GitHub 的强力网络
SQLite合并最新config.guess
GMP--enable-fat参数与--disable-assembly参数冲突 [3]
OpenAL需要libpulse-dev
Theora合并最新config.guess
MesaMeson >= 0.52.0[4]
OIDN不支持 Linux ARM[5]
ISPCOIDN 的依赖项
某些其他依赖没有对 AArch64 的判断

太难受了,好在我在developer.blender.org找到了一个针对 aarch64 的 commit[6],就在此基础上修改好啦。

另外,如果需要添加 CUDA 支持,需要正确配置合适版本的 GCC[7]

CUDA 版本GCC 最高支持版本
11.1, 11.2, 11.310
119
10.1, 10.28
9.2, 10.07
9.0, 9.16
85.3
74.9
5.5, 64.8
4.2, 54.6
4.14.5
4.04.4

哦对了,因为众所周知的原因,可能需要非常手段来解决下载速度慢的问题。

可能额外需要 32G 左右的空间。

检查并安装新版编译工具

不需要安装 Clang,在编译依赖的时候会自动编译 Clang。
另外,由于我的开发板支持 CUDA,所以我会一并配置 CUDA 相关选项,还请不要无脑复制

检查编译工具版本:

1
2
3
gcc --version
cmake --version
meson -v

新建文件夹用于存放源码:

1
mkdir src && cd src

安装 CMake:

1
2
3
wget https://github.com/Kitware/CMake/releases/download/v3.21.3/cmake-3.21.3-linux-aarch64.tar.gz
tar -zxf cmake-3.21.3-linux-aarch64.tar.gz
sudo cp -fr cmake-3.21.3-linux-aarch64/ /usr/local/cmake-3.21.3

编译 / 安装 GCC[8]

1
sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev libisl-dev
1
2
3
4
5
6
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-11.2.0/gcc-11.2.0.tar.xz
tar -Jxf gcc-11.2.0.tar.xz
mkdir gcc-build && cd gcc-build
../gcc-11.2.0/configure --prefix=/usr/local/gcc-11.2.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
make -j4
sudo make install

安装 Meson:

1
2
3
4
wget https://github.com/mesonbuild/meson/releases/download/0.59.2/meson-0.59.2.tar.gz
tar -zxf meson-0.59.2.tar.gz
sudo cp -fr meson-0.59.2/ /usr/local/meson-0.59.2
sudo ln -s /usr/local/meson-0.59.2/meson.py /usr/local/bin/meson

配置环境(这里写成了一个 shell,便于以后调用):

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

CUDA_HOME=/usr/local/cuda-10.2
GCC_HOME=/usr/local/gcc-11.2.0
CMAKE_HOME=/usr/local/cmake-3.21.3

CUDA_LIB=$CUDA_HOME/targets/aarch64-linux/lib
GCC_LIB=$GCC_HOME/lib/gcc/aarch64-unknown-linux-gnu/11.2.0:$GCC_HOME/lib64:$GCC_HOME/libexec/gcc/aarch64-unknown-linux-gnu/11.2.0

export CUDA_HOME
export PATH=$CUDA_HOME/bin:$GCC_HOME/bin:$CMAKE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_LIB:$GCC_LIB:$LD_LIBRARY_PATH

替换默认 GCC:

1
2
sudo update-alternatives --install /usr/bin/cc cc /usr/local/gcc-11.2.0/bin/gcc 30
sudo update-alternatives --install /usr/bin/c++ c++ /usr/local/gcc-11.2.0/bin/g++ 30

最后再检查一次版本:

1
2
3
gcc --version
cmake --version
meson -v

为 CUDA 设置 GCC(可选):

1
2
ln -s /usr/bin/gcc-7 /usr/local/cuda-10.2/gcc
ln -s /usr/bin/g++-7 /usr/local/cuda-10.2/g++

下载依赖(可选)

可以下载已经编译好的库,也可以下载源码包自己编译。

当然,你也可以通过在 Blender 源码目录内运行make deps来下载并编译依赖,但是下载过程太难受了。

下载编译好的库(强烈推荐):

搭了个小服务器,如果网站挂了,请联系我。

1
2
wget https://cn-zz-bgp-1.natfrp.cloud:63134/files/blender/blender-prebuilt-lib-aarch64-2.93.tar.xz
tar -Jxf blender-prebuilt-lib-aarch64-2.93.tar.xz

从官方下载依赖源码:

1
2
3
wget https://download.blender.org/source/blender-with-libraries-2.93.0.tar.xz
mkdir -p build_linux/deps/
tar -Jxf blender-with-libraries-2.93.0.tar.xz -C build_linux/deps/ packages

由于接下来会修改依赖,所以要下载额外的依赖源码。

下载额外依赖源码:

1
2
wget https://cn-zz-bgp-1.natfrp.cloud:63134/files/blender/blender-extra-libraries-aarch64-2.93.tar.xz
tar -Jxf blender-extra-libraries-aarch64-2.93.tar.xz -C build_linux/deps/

下载 Blender 源码

这里用的是 2.93.5 的源码:

1
2
wget https://download.blender.org/source/blender-2.93.5.tar.xz
tar -Jxf blender-2.93.5.tar.xz

修改源码

下载补丁文件:

1
wget https://cn-zz-bgp-1.natfrp.cloud:63134/files/blender/patch_2_93_5_01.diff

将补丁应用于源码:

1
patch -d blender-2.93.5 -p1 < patch_2_93_5_01.diff

编译依赖(可选)

如果已经下载了编译好的库,请跳过这一步。

使用 apt 下载依赖中的依赖:

1
sudo apt-get install libpulse-dev libncurses5-dev

我忘了是否需要 libncurses5-dev 了,以后测试完补上。

1
sudo apt-get install libpulse-dev libncurses5-dev rhash libc6-dev-armhf-cross libc6-dev-i386-cross libc6-dev-i386-amd64-cross

编译:

1
2
cd blender-2.93.5
make deps

需要等很长很长时间(我的开发板用了一天左右),而且容易出现奇奇怪怪的错误。

编译 Blender

这里使用 CMake 中的 CCMake 工具编译:

1
2
3
cd ..
mkdir blender-build && cd blender-build
ccmake ../blender-2.93.5

c进行第一次配置,然后会多出来一堆选项,根据英文描述和实际需要修改即可。以下选项仅供参考:

选项个人修改值
CYCLES_TEST_DEVICESCUDA
WITH_CYCLES_CUDA_BINARIESON
WITH_OPENIMAGEDENOISEOFF
CUDA_HOST_COMPILER/usr/bin/gcc-7
CUDA_SDK_ROOT_DIR/usr/local/cuda-10.2/samples/common

如果没看到相关选项,请重新按c配置一遍或按t切换到高级选项;每次修改选项后需要再次配置,确认无误后可以按g生成 Makefile。

有些选项我忘了,以后补上。

最后编译即可。注意:如果内存不大,最好不要使用-j参数!

1
2
make
make install

编译完成后,可在./bin目录找到文件。

后期打包与测试

只需要将./bin目录里的所有文件打包分发即可。

实机测试:

实机测试

如果使用 SSH X11 转发,请使用-Y参数。

结语

很不容易,断断续续整了差不多半个月,而且其中还要应付考试……
人麻了,就这样。
如果之后出现问题再补吧。

参考


在 AArch64 / ARM64 架构平台编译 Blender
https://blog.fqilin.top/building-blender-on-aarch64/
作者
F_Qilin
发布于
2021年10月27日
许可协议