# Building

## ESP32(M5Stack)

開発環境は以下のリンクを参照ください。

> M5Stack Library - <https://github.com/m5stack/M5Stack>

最初に上記ライブラリに含まれるサンプルスケッチをビルド、書き込みを行ってください。

### MWM5ライブラリのインストール

MWM5ライブラリは <https://github.com/monowireless/mwm5> で配布しています。ソースファイル一式をダウンロードしてください。本ドキュメント記載時点に一致するバージョンは[変更履歴](https://mwm5.twelite.info/changes)に記載があります。

変更履歴にある zip ファイルをダウンロードして、開発環境の指定するlibraryディレクトリに展開するか、開発環境の「zip形式のライブラリのインストール」を行ってください。アンインストールはライブラリディレクトリを削除します。

### 外部ライブラリ

* PS2Keyboard - [ http://www.pjrc.com/teensy/td\_libs\_PS2Keyboard.html](http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html)\
  esp32/PS2Keyboard.7z をライブラリディレクトリに展開してください。ビルド時に必要になります。\
  PS2Keyboard プロジェクトの成果物に対して 1) 日本語レイアウトのキーボード対応 2) カーソルキー等の取り扱いの微調整を実施しています。修正内容はソースコードを参照ください。

## Windows10

Windows10ではVisual Studio 2019でビルドを行っています。また MingW32 用のビルド定義も含めています。

#### MingW64

以下が必要になります。

* make
* gcc9 (gcc-9, g++-9)

## macOS

以下が必要になります。

* make\
  XCodeに付随します。OS バージョンにもよりますが、ターミナルで make と入力すればインストーラーが起動します。
* gcc9 (gcc-9, g++-9) \
  homebrew のパッケージをダウンロードして利用します。

{% hint style="info" %}
macOS 10.15 (Catalina) では、clangを用いることも可能です。オプション`OSX_COMPILERTYPE=clang`を追加してmakeしてください。

※ C++17 の filesystem ライブラリがバージョン依存になります。10.15以前ではビルドできず、またビルドしたバイナリを10.14以前で動作させることもできません。
{% endhint %}

## Linux

以下が必要になります。

* gcc9 (gcc-9, g++-9)
* SDL2 開発者向けライブラリ (`libsdl2-dev`)\
  SDL2 のライブラリやヘッダファイルは、ソースパッケージに添付していますが、依存ライブラリのリンクに必要です。

## ビルド方法

### M5Stack

以下を参考にしてください

> M5Stack Library - <https://github.com/m5stack/M5Stack>

TWELITE\_Stage アプリは examples/TWELITE\_Stage にあります。M5Stackライブラリ導入後、このフォルダに対してビルドしてください。

### Windows Visual Studio

1. プロジェクト MWM5.sln を開きます。
2. Sketch＞TWELITE\_Stage をスタートアッププロジェクトにします。\
   必須ではありませんが、デバッガを起動する際などにこのプロジェクトが選択されます。
3. Debug/Release のいずれかを選択します。
4. 32bit/64bit のいずれかを選択します。
5. Sketch＞TWELITE\_Stage を右クリックしてビルドを選択します。
6. 実行形式は msc\Release msc\Debug などのディレクトリに格納されます。

### macOS, Linux, Windows (MingW64)

1. コマンドプロンプト、シェルを開きます。
2. make, gcc-9, g++-9 が動作することを確認します。
3. {ソースコードを展開したディレクトリ}`/examples/`{ビルドしたいプロジェクト:例 TWELITE\_Stage}`/build` に移動します。
4. make を実行します。

#### make オプション

| オプション                   | 内容                             |
| ----------------------- | ------------------------------ |
| DEBUG\_BUILD=1          | デバッグビルドを行います。デバッガを使用する場合に使います。 |
| OSX\_COMPILERTYPE=clang | clang でビルドします (OS X のみ)        |

#### make ファイルについて

make のルール本体は {ソースコードを展開したディレクトリ}`/mkfiles` 以下に格納しています。

| ファイル名          | 内容               |
| -------------- | ---------------- |
| mwm5.mk        | コンパイルするファイルなどの定義 |
| rules.mk       | コンパイルのルール        |
| arch.mk        | 実行OSの判定          |
| arch\_linux.mk | Linux用の諸定義       |
| arch\_mac.mk   | macOS用の諸定義       |
| arch\_win.mk   | MingW64用の諸定義     |

## デバッグについて

VSCode用のTWELITE STAGE 用のデバッガ起動定義(`.vscode/launch.json`)を含めています。環境に合わせて利用ください。

#### 参考OS X用の定義

```
{
    "name": "(lldb/mac) TWELITE_Stage",
    "type": "cppdbg",
    "request": "launch",
    "program": "${workspaceFolder}/examples/TWELITE_Stage/build/TWELITE_Stage-debug.command",
    "args": [],
    "stopAtEntry": true,
    // "cwd": "${workspaceFolder}",
    "cwd": "${workspaceFolder}/../MWSDK",
    "environment": [],
    "externalConsole": false,
    "MIMode": "lldb"
}
```

* `stopAtEntry`は、`main()`の先頭で停止する設定で false でも構わない。
* `externalConsole`は、`false`でないと起動しない。
* `cwd`は、TWELITE STAGEの場合 MWSDKディレクトリを指定する。
