使用 Emscripten 為 WebAssembly 進行交叉編譯#
先決條件#
您需要依照正常的建置指示安裝 CMake 和編譯器等。在使用 Emscripten 建置之前,您還需要安裝 Emscripten 並使用以下命令啟用它(詳情請參閱 https://emscripten.dev.org.tw/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.26, you need EMSDK version 3.1.58
# the versions can be found in the Makefile.envs file in the Pyodide repo:
# https://github.com/pyodide/pyodide/blob/10b484cfe427e076c929a55dc35cfff01ea8d3bc/Makefile.envs
./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.26 of Pyodide, pyodide-build 0.26 and later work
pip install "pyodide-build>=0.26"
然後使用 ninja-release-emscripten
CMake 預設集進行建置,如下所示
emcmake cmake --preset "ninja-release-emscripten"
ninja install
這會將已建置的靜態函式庫版本 libarrow
安裝到 Emscripten sysroot 快取中,這表示您可以建置依賴它的項目,並且它們會找到 libarrow
。
例如,如果您想為 Pyodide 建置,請執行上述命令,然後前往 arrow/python
並執行
pyodide build
它應該會在 dist
子目錄中建立一個針對目前啟用的 Pyodide 版本的 wheel 檔案。
手動建置#
如果您想手動為 Emscripten 建置,請查看 arrow/cpp
目錄中的 CMakePresets.json
檔案,以取得您需要覆寫的項目列表。特別是您需要
將建置依賴項設定為
BUNDLED
,以便它使用正確交叉編譯的建置依賴項。使用
emcmake cmake
而不是僅使用cmake
來設定CMAKE_TOOLCHAIN_FILE
。對於目標為單執行緒 Emscripten 環境(例如 Pyodide)的建置,您需要將
ARROW_ENABLE_THREADING
設定為OFF
。ARROW_FLIGHT
和任何其他使用網路的功能可能無法運作。ARROW_JEMALLOC
和ARROW_MIMALLOC
可能也需要設定為OFF
最有可能運作的方式是將
ARROW_BUILD_STATIC
設定為ON
,並將ARROW_BUILD_SHARED
設定為OFF
。