使用 Emscripten 为 WebAssembly 交叉编译#
先决条件#
您需要按照正常的构建说明安装 CMake 和编译器等。在使用 Emscripten 构建之前,您还需要安装 Emscripten 并使用以下命令激活它(有关详细信息,请参阅 https://emscripten.webassembly.net.cn/docs/getting_started/downloads.html)。
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
# replace <version> with the desired EMSDK version.
# e.g. for Pyodide 0.24, you need EMSDK version 3.1.45
./emsdk install <version>
./emsdk activate <version>
source ./emsdk_env.sh
如果您想为 Pyodide 构建 PyArrow,则需要通过 pip
安装 pyodide-build
,并且需要使用与 Pyodide 构建相同的 Python 版本,以及相同的 emsdk 工具版本。
# install Pyodide build tools.
# e.g. for version 0.24 of Pyodide:
pip install pyodide-build==0.24
然后使用 ninja-release-emscripten
CMake 预设构建,如下所示
emcmake cmake --preset "ninja-release-emscripten"
ninja install
这将安装一个构建的 libarrow
静态库版本到 Emscripten sysroot 缓存中,这意味着您可以构建依赖于它的内容,并且它们将找到 libarrow
。
例如,如果您想为 Pyodide 构建,请运行上面的命令,然后转到 arrow/python
并运行
pyodide build
它应该在 dist
子目录中创建一个针对当前启用的 Pyodide 版本(即与当前安装的 pyodide-build
相对应的版本)的 wheel。
手动构建#
如果您想手动为 Emscripten 构建,请查看 arrow/cpp
目录中的 CMakePresets.json
文件以了解您需要覆盖的项目列表。特别是,您将需要
将构建依赖项设置为
BUNDLED
,以便它使用正确交叉编译的构建依赖项。使用
emcmake cmake
而不是仅使用cmake
来设置CMAKE_TOOLCHAIN_FILE
。您很可能需要将
ARROW_ENABLE_THREADING
设置为OFF
,以针对单线程 Emscripten 环境(如 Pyodide)构建。ARROW_FLIGHT
以及任何其他使用网络的内容可能无法正常工作。ARROW_JEMALLOC
和ARROW_MIMALLOC
也可能需要设置为OFF
将
ARROW_BUILD_STATIC
设置为ON
并且将ARROW_BUILD_SHARED
设置为OFF
最有可能成功。