Raspberry PI OS (64-bit) で最新のClangを使う
Raspberry PI OS (64-bit) で最新のClangを使う
すでにいろいろなところで同じ内容のことが書かれていると思うが、数年ぶりに自分で実施したのでここに記載する。
公式のclang+llvmを使う
ここではArch64のClang+llvmのバイナリをこちらからダウンロードする。これを記載時の最新版は15.0.1なので、clang+llvm-15.0.1-aarch64-linux-gnu.tar.xz
をダウンロードした。
バイナリのダウンロード
以下のような方法でダンロードしたファイルを展開する。
$ mkdir workplace && cd workplace $ tar -Jxvf clang+llvm-15.0.1-aarch64-linux-gnu.tar.xz
バイナリの移動
展開したバイナリを好きな場所に移動する。
$ sudo mv clang+llvm-15.0.1-aarch64-linux-gnu /usr/local/clang-15.0.1-official
環境変数の設定
このままではコンパイラを実行できないので、シェルの環境変数の$PATHと$LD_LIBRARY_PATHにパスをセットする。
以下のコマンドまたはエディタでパスを追加する。ただ記載を間違えたときは、間違っていた箇所を修正してもう一度sourceコマンドを実行するのではなく、いったんログアウトしてログインし直す。
$ cd ~ $ echo 'export PATH=/usr/local/clang-15.0.1-official/bin:$PATH' >> .bashrc $ echo 'export LD_LIBRARY_PATH=/usr/local/clang-15.0.1-official/lib:$LD_LIBRARY_PATH' >> .bashrc $ source ~/.bashrc
パスの確認
最後にパスが通っているか確認する。
$ which clang
/usr/local/clang-15.0.1-official/bin/clang
自分でclangをビルドする
前述の公式からダウンロードしたバイナリをそのまま使ってもよいが、やはり自分でビルドしないと気持ちがわるいので、次に説明する方法でビルドすることにした。
ninjaのビルド
clangをビルドにするにはninjaが必要なので、はじめにninjaが使えるようにする。ビルドの方法はソースファイルのREADME.md にすべて書いてあるが、以下にcmakeを使う方法の抜粋を記載する。
ソース
$ cd ~/workplace
$ git clone https://github.com/ninja-build/ninja.git
Cmake&ビルド
$ cd ninja $ cmake -Bbuild-cmake $ cmake --build build-cmake $ make
テスト
ビルドした結果を以下の方法でチェックすることができる。
$ ./build-cmake/ninja_test
インストール
いつも通りインストールする。デフォルトのインストール先は/usr/local/binでした。
$ sudo make install $ sudo ldconfig
clangのビルド 1回目
ソース
$ git clone https://github.com/llvm/llvm-project.git $ cd llvm-project $ git tag -l
Cmake
今回のビルドの条件は以下のオプションの通りで、clangだけでなく、libcxx、libcxxabi、lldも同時にビルドする。インストール先は/usr/local/clang-15.0.1-1st
である。
$ CC=/usr/local/clang-15.0.1-official/bin/clang CXX=/usr/local/clang-15.0.1-official/bin/clang++ cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;lld" -DCMAKE_INSTALL_PREFIX=/usr/local/clang-15.0.1-1st -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD=AArch64 ../llvm
ビルド&インストール
$ ninja -j$(nproc) $ sudo ninja install $ sudo ldconfig
環境変数の設定
シェルの環境変数をいまビルドしたclangをインストールしたパスに変更し、環境変数を反映する
PATH=/usr/local/clang-15.0.1-1st/bin:$PATH LD_LIBRARY_PATH=/usr/local/clang-15.0.1-1st/lib:$LD_LIBRARY_PATH
clangのビルド2回目
Cmake
先ほどビルドしたファイルを削除してもう一度ビルドし直す。ビルドの条件はインストール先以外は同じである。
$ cd ~/workplace/llvm-project $ rm -rf build #前回の削除 $ mkdir build && cd build $ CC=/usr/local/clang-15.0.1-1st/bin/clang CXX=/usr/local/clang-15.0.1-1st/bin/clang++ cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;lld" -DCMAKE_INSTALL_PREFIX=/usr/local/clang-15.0.1 -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD=AArch64 ../llvm
ビルド&インストール
$ ninja -j$(nproc) $ sudo ninja install $ sudo ldconfig
環境変数の設定
シェルの環境変数をいまビルドしたclangのパスに変更する
PATH=/usr/local/clang-15.0.1/bin:$PATH LD_LIBRARY_PATH=/usr/local/clang-15.0.1/lib:$LD_LIBRARY_PATH
STM32 Nucleo BoardでMicropythonを楽しむ
Micropythonをビルドしてボードにインストールする
はじめに
遅ればせながらMicropythonに興味が出てきた。まずはSTマイクロエレクトロニクスのSTM32 Nucleo BoardにMicropythonを入れて動かすことからを始める。
使用したボード
STM32 Nucleo Board STM32F446RET
主なCPUの仕様
購入先
ソースからコンパイルする
開発環境 *1
- Intel Core i7-6700 CPU 3.40GHz
- Windows 10, 64-bit (Build 18362) 10.0.18362
- VMware Workstation 15 Player 15.5.2 build-15785246
- Ubuntu 16.04 LTS 64-bit
必要な開発ツール *1
Micropythonのビルドに必要な開発ツール
- git
- gcc (cross compiler)
- build-essential
- cmake (3.4.2 or later)
- pkg-config
- libusb-1.0
そのほか
- screen or picocom などのターミナルソフト
パッケージのインストール *3
私の環境では以下のパッケージをインストールした。足りないパッケージをインストールする
sudo apt-get install libffi-dev
sudo apt-get install gcc-arm-none-eabi
sudo apt-get install cmake
sudo apt-get install libusb-1.0.0-dev
sudo apt-get install screen
書き込みユーティリティ *1 *3
ビルドしたmicropythonのバイナリをボードに書き込むツールStlink Toolsをビルドする。すべてのユーザが使えるようにインストールする場合である。
git clone https://github.com/texane/stlink.git cd stlink make release make debug cd build/Release sudo make install sudo ldconfig
ビルド *2
ここでMicropythonをソースからビルドする。対象とするボードに合わせてmakeするが、どのボードが対応しているかは、treeコマンドを実行するとわかる。自分のボードにあったボード名でビルドする
# get source git clone https://github.com/micropython/micropython # This command should be executed from the root directory of this repository. cd micropython make -C mpy-cross # All other commands below should be executed from the ports/stm32/ directory. cd ports/stm32/ make submodules # this command to find your board tree -d boards/ # select board name & exectute make make BOARD=NUCLEO_F446RE # write binary to flash ram on board, use stlink tool sudo make BOARD=NUCLEO_F446RE deploy-stlink
テスト *2
PC上のubuntuからターミナルソフトを使ってボード上のMicropythonにアクセスする
screenの場合
# ctl+ a, k でターミナル終了 sudo screen /dev/ttyACM0 115200
picocomの場合
# ctl+a, ctl+x でターミナル終了 sudo picocom --b 115200 /dev/ttyACM0
参考文献
*2 README.md
*3 寝台急行はまなす
ブログをはじめるにあたって
コンピュータやその周辺の新しい技術に興味があるので、この分野で自分が楽しいと感じてはじめたことや調べたことについて書いていこうと思います。特に今はシングルボードコンピュータやFPGAなどに興味があります。
このブログをはじめようと思ったきっかけは月並みな理由ですが、今まで他の人の情報をもらってばかりでいた自分が少しでも他の方に役立てればいいなと思ったことと、自分がやったことを少しでも記録に残したいと思ったからです。まだはじめたばかりでうまく書けるかわかりませんし、いつまで続くかもわかりませんが、思い立った時に少しずつ書いていこうと思います。