coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

Raspberry Pi に、llvm の lld をインストールする。Cython も入れてみる。

2024-11-28 22:05:12 | インストールと設定
前回インストールした llvm , clang に続いて、lld もインストールしてみました。

https://lld.llvm.org/

によれば、(DeepL で翻訳)

LLDはLLVMプロジェクトのリンカーで、システム・リンカーのドロップイン・リプレースメントであり、システム・リンカーよりもはるかに高速に動作する。また、ツールチェーン開発者にとって便利な機能も提供する。

ですね。

lld 単独で build しようとすると、うまくいきませんでした。llvm は基本的に llvm-project の中のものと密接に関連しているようで、
ここでも llvm-project-19.1.0.src/ の下で行う必要があるようです。しかも、新しい build 用ディレクトリを作成して build すると、llvm 関連も再び make しているようにみえたので、最初にbuildするときに使った build-proj ディレクトリを使うのがよさそうです。前回作成した build-proj ディレクトリを使います。

$ cd build-proj
$ cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS=lld -DCMAKE_INSTALL_PREFIX=/usr/local/python ../llvm
............
-- Configuring done (18.2s)
-- Generating done (39.1s)
-- Build files have been written to: /home/espiya/src/llvm-project-19.1.0.src/build-proj
$

$ make
.....................................
[100%] Built target yaml2obj
[100%] Built target ExampleIRTransforms
[100%] Built target Bye
[100%] Built target InlineAdvisorPlugin
[100%] Built target InlineOrderPlugin
[100%] Built target TestPlugin
[100%] Built target DoublerPlugin
[100%] Built target DynamicLibraryLib
[100%] Built target PipSqueak
[100%] Built target SecondLib
[100%] Built target benchmark
[100%] Built target benchmark_main
[100%] Built target llvm-locstats
$

# make install
......
-- Up-to-date: /usr/local/python/include/llvm/TargetParser/ARMTargetParserDef.inc
-- Up-to-date: /usr/local/python/include/llvm/TargetParser/AArch64TargetParserDef.inc
-- Up-to-date: /usr/local/python/include/llvm/TargetParser/RISCVTargetParserDef.inc
-- Installing: /usr/local/python/lib/cmake/llvm/LLVMConfigExtensions.cmake
#

$ which lld
/usr/local/python/bin/lld
$
$ lld --version
lld is a generic driver.
Invoke ld.lld (Unix), ld64.lld (macOS), lld-link (Windows), wasm-ld (WebAssembly) instead
$ ld.lld --version
LLD 19.1.0 (compatible with GNU linkers)
$


ここまででインストールできた、llvm を使って、Python 3.13.0 の --enable-experimental-jit オプション付きで build してみましが、やはりうまくいきませんでした。

しかたがないので、別の Python 高速化ツールを考えました。 Cython にしました。(以下は、 Firefox で翻訳しました。)

https://pypi.org/project/Cython/

Cython 言語を使用すると、Python 自体と同じくらい簡単に、Python 言語用の C 拡張機能を作成できます。 Cython は Pyrex をベースにしたソース コード トランスレータですが、より最先端の機能と最適化をサポートしています。

Cython 言語は Python 言語のスーパーセットです (ほぼすべての Python コードも有効な Cython コードです)。ただし、Cython はオプションの静的型付けをサポートしており、C 関数をネイティブに呼び出し、C++ クラスで操作し、変数とクラス属性で高速な C 型を宣言します。これにより、コンパイラーは Cython コードから非常に効率的な C コードを生成できます。

このため、Cython は、外部 C/C++ ライブラリ用のグルー コードや、Python コードの実行を高速化する高速 C モジュールを作成するのに理想的な言語になります。

ワンタイムビルドの場合には注意してください。 CI/テストの場合、PyPI で提供されるホイール パッケージのいずれかでカバーされておらず、当社が提供する純粋な Python ホイールが使用されていないプラットフォームでは、コンパイルされていない (遅い) バージョンの完全なソース ビルドよりも大幅に高速です。


こちらのインストールは pip3 が使えるので簡単です。本当に使えるかどうかはまだ分かりません。

$ pip3 install Cython
Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting Cython
Downloading Cython-3.0.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.metadata (3.2 kB)
Downloading Cython-3.0.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.3 MB)
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 3.3/3.3 MB 14.8 MB/s eta 0:00:00
Installing collected packages: Cython
Successfully installed Cython-3.0.11
$ which cython
/home/espiya/.local/bin/cython
$ cython --version
Cython version 3.0.11
$


使い方は以下を参考にして、今後機会があれば試してみたいと思います。

https://cython.readthedocs.io/en/latest/src/tutorial/
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Raspberry Pi に LLVM + Clang 19.1.0 をインストールする。

2024-11-15 23:07:37 | コンピュータ言語
Python3 のインストールでも分かるように、clang と llvm もこれからは必要そうです。
そこで、今使っている Raspberry Pi に llvm と clang をインストールしてみます。
最新のものは 19.1.0 でした。

先に、関連ありそうなパッケージを入れておきます。

# apt install cmake
# apt install ninja-buil
# apt install llvm llvm-dev
# apt install clang

$ /usr/bin/cmake --version
cmake version 3.25.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).
$
$ /usr/bin/clang --version
Debian clang version 14.0.6
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
$

ですね。

念のために、最初に cmake を最新にしておきます。
環境設定は例によって、python3.sh というファイル使います。

$ source ~/python3.sh

$ wget https://github.com/Kitware/CMake/releases/doload/v3.31.0/cmake-3.31.0.tar.gz
$ tar xvf cmake-3.31.0.tar.gz
$ cd cmake-3.31.0

$ ./configure --prefix=/usr/local/python
......
-- Configuring done (126.3s)
-- Generating done (2.9s)
-- Build files have been written to: /home/espiya/src/cmake/cmake-3.31.0
---------------------------------------------
CMake has bootstrapped. Now run gmake.
$


make でなくて gmake と言っていますが、

$ which gmake
/usr/bin/gmake
$ ls -l /usr/bin/gmake
lrwxrwxrwx 1 root root 4 Apr 10 2021 /usr/bin/gmake -> make
$

make コマンドです。 make して、インストールします。

$ gmake

# gmake install


確認します。

$ cmake --version
cmake version 3.31.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).
$


これで、cmake は最新になりました。

これを使って、llvm と clang をインストールしてみます。実は、Raspberry Pi でこれは非常に大変で、色々ためしてみたのですが、中々うまくいかないので苦労しました。最終的には、

https://clang.llvm.org/get_started.html

を参考にしました。

$ wget https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.0/llvm-project-19.1.0.src.tar.xz
$ wget https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.0/llvm-project-19.1.0.src.tar.xz.sig
$
$ gpg --verify llvm-project-19.1.0.src.tar.xz.sig
gpg: assuming signed data in 'llvm-project-19.1.0.src.tar.xz'
gpg: Signature made Tue 17 Sep 2024 12:42:39 BST
gpg:      using RSA key D574BD5D1D0E98895E3BF90044F2485E45D59042
gpg: Good signature from "Tobias Hieta '<tobias@hieta.se>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:      There is no indication that the signature belongs to the owner.
Primary key fingerprint: D574 BD5D 1D0E 9889 5E3B F900 44F2 485E 45D5 9042
$


$ tar xvf llvm-project-19.1.0.src.tar.xz
$
$ cd llvm-project-19.1.0.src
$ mkdir build-proj
$ cd build-proj


$ cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/python -G "Unix Makefiles" ../llvm
...........
-- Configuring done (52.2s)
-- Generating done (27.7s)
-- Build files have been written to: /home/espiya/src/llvm-project-19.1.0.src/build-proj
$


$ make
.............
[100%] Linking CXX static library ../../../lib/libbenchmark.a
[100%] Built target benchmark
[100%] Building CXX object third-party/benchmark/src/CMakeFiles/benchmark_main.ir/benchmark_main.cc.o
[100%] Linking CXX static library ../../../lib/libbenchmark_main.a
[100%] Built target benchmark_main
[100%] Copying llvm-locstats into /home/espiya/src/llvm-project-19.1.0.src/buil-proj/./bin
[100%] Built target llvm-locstats
$


このマシンでは、1日以上かかりました。 〇〇% と表示されるので一応目安になります。テストもできます。

$ make check-clang
...........
[100%] Running the Clang regression tests
llvm-lit: /home/espiya/src/llvm-project-19.1.0.src/llvm/utils/lit/lit/llvm/config.py:508: note: using clang: /home/espiya/src/llvm-project-19.1.0.src/build-proj/bin/clang

Testing Time: 3883.81s

Total Discovered Tests: 37989
Skipped : 10 (0.03%)
Unsupported : 150 (0.39%)
Passed : 37802 (99.51%)
Expectedly Failed: 27 (0.07%)
[100%] Built target check-clang
$

こちらも 1時間以上かかりました。

/usr/local/python へのインストール方法は書いていないのですが、普通に make で良さそうです。

# make install
......
-- Up-to-date: /usr/local/python/include/llvm/CodeGen
-- Installing: /usr/local/python/include/llvm/CodeGen/GenVT.inc
-- Up-to-date: /usr/local/python/include/llvm/TargetParser
-- Installing: /usr/local/python/include/llvm/TargetParser/ARMTargetParserDef.inc
-- Installing: /usr/local/python/include/llvm/TargetParser/AArch64TargetParserDef.inc
-- Installing: /usr/local/python/include/llvm/TargetParser/RISCVTargetParserDef.inc
-- Installing: /usr/local/python/lib/cmake/llvm/LLVMConfigExtensions.cmake
#

$ clang --version
clang version 19.1.0
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/python/bin
$


これで、clang 19.1.0 が使えるようになりました。時間はかかりましたが、Raspberry Pi でもビルドできたのが良かったです。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする