Raspberry Pi でJUCEをビルドする -Raspbian Jessie対応-
Raspberry Pi (Raspbian)でJUCEのプロジェクトをビルドしたので、レシピを紹介します。
寝て起きたら、JUCE Demoのビルドが終わり、ラズパイ上でJUCE Demoが動くことを確認 pic.twitter.com/X0Rrp11bF3
— COx2 ))))@技術書典5 く03 (@CO_CO_) May 5, 2017
同梱のVSTプラグイン/ ホストのサンプルプロジェクトをビルドしました。
PCと遜色なく快適に動きますし、MIDI入出力、音声入出力が可能なので、省電力なVSTシンセサイザ/エフェクトとして使用することができます。
ラズパイ上でVSTプラグイン、VSTホストをビルドしてみた。JUCEライブラリのサンプルなんだけど、VST SDKを別途DL,パス設定しなくてもビルドが通るという不思議(???)
VSTホスト内でシンセサイザを動かしているのと、
スタンドアロン版も同時に起動している #JUCE pic.twitter.com/CV6jpDeGwA— COx2 ))))@技術書典5 く03 (@CO_CO_) May 5, 2017
レシピ
ROLI社のFabianがJUCE Forumにレシピをポストしてくれました。
ターミナルから以下のコマンドを実行するとビルドします。
※cdコマンドのディレクトリは各自の環境に合わせて入力してください。
// JUCEリポジトリをクローン
$ git clone https://github.com/WeAreROLI/JUCE.git
// 依存パッケージをインストール
$ sudo apt-get install clang freeglut3-dev g++ libasound2-dev libcurl4-openssl-dev libfreetype6-dev libjack-jackd2-dev libx11-dev libxcomposite-dev libxcursor-dev libxinerama-dev libxrandr-dev mesa-common-dev webkit2gtk-4.0 ladspa-sdk
// 作業ディレクトリに移動
$ cd JUCE/extras/Projucer/Builds/LinuxMakefile
// GCCでコンパイルする場合
$ make CXX=g++ "TARGET_ARCH=-march=armv7-a" -j4
// LLVM-Clangでコンパイルする場合
$ make CXX=clang++ -j4
1.準備
先ずはJUCEをダウンロードしましょう。公式ダウンロードサイト、Windows/macOS/Linuxから選択することができますが、Linux向けを選択すれば良いです。
※Linux用のProjucerが同梱されていますがx86をターゲットにしているため、CPUアーキテクチャが異なるRaspberry Pi (ARM)上では動作しません。Raspberry Pi用のProjucerは上記レシピでビルドすることができます。
GitHubからクローンする場合は、ターミナルを開いて次のコマンドを実行します。
$ git clone https://github.com/WeAreROLI/JUCE.git
2. 依存パッケージのインストール
$ sudo apt-get install clang freeglut3-dev g++ libasound2-dev libcurl4-openssl-dev libfreetype6-dev libjack-jackd2-dev libx11-dev libxcomposite-dev libxcursor-dev libxinerama-dev libxrandr-dev mesa-common-dev webkit2gtk-4.0 ladspa-sdk
JUCEライブラリのビルドに必要な依存パッケージをインストールします。ついでにLLVM-Clangコンパイラをインストールしています。なお、GCCでもコンパイルできることを確認しています。
※GCCでビルドする場合、こちらのバグに当たってしまうことを確認しています。GCCでビルドする際は”make”コマンドのオプションに “TARGET_ARCH=-march=armv7-a” を追加すると正常にビルドが実行されます。
3.作業ディレクトリへの移動
$ cd JUCE/extras/Projucer/Builds/LinuxMakefile
LinuxMakefileが置かれたディレクトリに移動します。
※ディレクトリは各自の環境に合わせて入力してください。
※サンプルプロジェクトの一部に”LinuxMakefile”用プロジェクトが同梱されています。
4. コンパイル
4-1.GCCでコンパイルする場合
$ make CXX=g++ "TARGET_ARCH=-march=armv7-a" -j4
LinuxMakefileからビルドを実行します。
ビルドモードは”Debug”がデフォルトです。
各種オプションについては以下の通りです。
・CXX=g++
… LinuxMakefileオプションです。C++コンパイラにg++を使用します
・ -j4
… makeコマンドのオプションです。同時に実行できるジョブの数(並行処理の数)を指定します。必須ではありませんが、CPUのコア数を有効利用できます。
※Raspbian Jessieの場合は、こちらのバグに当たるためアーキテクチャをコマンドから指定する必要があります。Raspbian Stretchでは解消されたようです。
4-2.LLVM-Clangでコンパイルする場合
$ make CXX=clang++ -j4
LinuxMakefileからビルドを実行します。
ビルドモードは”Debug”がデフォルトです。
各種オプションについては以下の通りです。
・CXX=clang++
… LinuxMakefileオプションです。C++コンパイラにclang++を使用します
・ -j4
… makeコマンドのオプションです。同時に実行できるジョブの数(並行処理の数)を指定します。必須ではありませんが、Raspberry Piのコア数を有効利用できます。
5.補足:Releaseビルド時のコマンド
// GCCでコンパイルする場合 $ make CXX=g++ -j4 CONFIG=Release // LLVM-Clangでコンパイルする場合 $ make CXX=clang++ "TARGET_ARCH=-march=armv7-a" -j4 CONFIG=Release
・CONFIG=Release
… LinuxMakefileオプションです。”Release”モードでビルドします。
筆者にて動作確認した環境
◆ハードウェア
・Raspberry Pi 2 Model B
・Raspberry Pi 3 Model B
◆OS
・Raspbian Jessie With Pixel (Debian 8系)
◆JUCE バージョン
・JUCE 5.3.2