グラフ電卓TI-Nspireのネイティブ開発環境「Ndless SDK」を導入した話
2021-03-13追記
本記事に書かれているSDKの導入手順をDocker化しました。 本記事の情報は古いので、こちらの新しい記事をご覧になることをおすすめします。
はじめに:『Ndless SDK』とは
この記事は、関数電卓TI-NspireのC/C++開発環境『Ndless SDK』を、Ubuntu 17.04環境上で構築する際に私が踏んだ手順をまとめたものです。
Ndlessとは、TI社のグラフ関数電卓TI-Nspireシリーズを「脱獄」させ、ARMアセンブリ言語やC言語で書かれたプログラムを動かせるようにするための、サードパーティ製ソフトウェアです。
専用の開発環境(Ndless SDK)を使えば、誰でも電卓用のソフトウェアをパソコン上で開発して、Ndlessが導入されている電卓本体に転送し、電卓上でソフトウェアを実行することができます。
Ndless SDKで開発したソフトウェアをネットで公開しているユーザーも多く、科学技術計算ソフト・ゲームソフト・便利系ソフトなど、たくさんのユーザーがたくさんのソフトウェアを公開しています。
参考資料
- https://hackspire.org/index.php/C_and_assembly_development_introduction(開発者による導入手順の解説)
- https://tiplanet.org/forum/viewtopic.php?t=20686&p=223523(開発者によるWindows Subsystem for Linuxでの導入手順の解説 ※フォーラム上の書き込み)
- https://github.com/ndless-nspire/Ndless.git(NdlessのGitHubリポジトリ)
1. 必要なパッケージを導入する
上記の参考資料2.によれば、SDKの導入に必要なパッケージは以下のコマンド入力でまとめて導入できるようです:
sudo apt-get install git build-essential binutils libgmp-dev libmpfr-dev libmpc-dev zlib1g zlib1g-dev zlib1g-dbg libboost-dev libboost-program-options-dev libboost-program-options1.58-dev libboost-program-options1.58.0 libboost1.58-dev wget texinfo libpython2.7-dev bison flex php7.0-cli
厄介なのは、参考資料1.で指定されていないパッケージも導入する必要があるということ。
パッケージがひとつでも欠けていると正しくSDKを導入できないようなので注意が必要です。
2018年1月現在では、libboost-program-options1.58-devとlibboost-program-options1.58.0はapt-get経由での導入ができなくなっています(新規バージョンは導入可能)。
1.58をわざわざwgetで落としてくるのも面倒だったため、僕は1.62をapt-getで導入しましたが、バージョンの違いによるエラーは現状発生していません。
2. 本家リポジトリをcloneする
適当なディレクトリに本家リポジトリをgit cloneして導入します。ここではホームディレクトリ(/home/username)直下に導入します。
具体的には、コマンドラインで以下を実行します:
cd ~ git clone --recursive https://github.com/ndless-nspire/Ndless.git
※--recursiveをつけ忘れないよう注意、つけないと正しく導入できません!
3. build_toolchain.shを編集する
/Ndless/ndless-sdk/toolchain
にあるbuild_toolchain.sh
をお手元のテキストエディタで開きます。
そして、以下の通りに編集します:
・31行目のOPTIONS_GDB="--target=${TARGET} --prefix=${PREFIX} --enable-interwork --enable-multilib --disable-werror --with-python"
から、末尾の--with-pythonを削除
・51行目(if ! gcc -lpython2.7 test.c -o test; then error=1; echo 'libpython2.7 (python-devel/python2.7-dev) dependency seems to be missing!'; fi
の部分)を丸ごとコメントアウト
要するにPython関連の記述を消せってことですね。
編集が済んだら保存してエディタを閉じましょう。
4. build_toolchain.shを実行する
再びターミナルに戻り、編集したbuild_toolchain.sh
を実行します:
cd ~/Ndless/ndless-sdk/toolchain ./build_toolchain.sh
このシェルスクリプトを実行すると、ARM開発用のツールチェーンが自動でダウンロード・導入されます。
処理が終わるまで待ちましょう。
完了までそこそこ時間がかかるので(回線速度やパソコンのスペックにもよるが僕の場合は40分ほどかかりました)、ターミナル画面がすごい勢いでスクロールしていくのを眺めて待ちましょう。
必要なパッケージがちゃんと入っていて、なおかつ処理が正常に終了したら、このような出力がされます:
Done! Don 't forget to add' / home / username / Ndless / Ndless-sdk / toolchain / install / bin 'to your $ PATH along with / home / username / Ndless / Ndless-sdk / toolchain /../bin.
こんな感じの表示が出た人、おめでとう!一旦ターミナルを閉じて次のステップに進みましょう。
出なかった人、頑張れ!パッケージが足りないか、build_toolchain.shの編集をしくじったか、何かしらやらかしているはずなので、前に戻ってもっかいやり直しましょう。
「それでも───俺は、間違えてなどいなかった───」というそこのあなたは、本家リポジトリにIssueを投げて開発者に直接質問することをおすすめします。
5. パスを通す
ターミナルを閉じて、build_toolchain.sh実行後の表示にある通りにPATHを通します。
具体的には、~/.bashrc
の末尾に以下を追加します:
export PATH="/home/username/Ndless/ndless-sdk/toolchain/install/bin:/home/username/Ndless/ndless-sdk/bin:${PATH}"
ここで、/home/username/
の部分はgit cloneした場所に合わせて変えて下さい。
これはOS側の問題だと思いますが、「/home/username/Ndlessを~/Ndlessと書いたらうまくPATHが通らなかった」という報告が上がっているので、ホームディレクトリの場合は/home/username/Ndless
としておくのが無難そうです。
参考資料1.には~/.bash_profileに追加するようにとの指定がありますが、僕の環境では~/.bash_profileだとうまくPATHを通せませんでした(~/.bashrcに追加したら通せた)。
6. makeする
再びターミナルを開いてNdlessディレクトリ直下に移動し、makeします:
cd Ndless make
ここまで特にしくじっているところがなければ、makeは正常に完了し、こんな感じの出力をしてきます:
(前略) make [ 3 ]: Leaving directory '/home/username/Ndless/ndless/src/installer-4.5' make [ 2 ]: Leaving directory '/home/username/Ndless/ndless/src' make [ 1 ]: Leaving directory '/home/username/Ndless/ndless'
PATHがちゃんと通っていないと正常にmakeが完了しません。
7. 動作確認
1.〜6.のステップが済んだら、コマンドラインでnspire-gcc
と入力してみて下さい。
以下のように出力されたらSDK導入は完了です!:
arm-none-eabi-gcc: fatal error : no input files compilation terminated.
ここまで完了した皆様、お疲れ様でした!
8. 付属のテスト用コードをコンパイルする(おまけ)
【そのうち書きます】