# Building

## ESP32(M5Stack)

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

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

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

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

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

変更履歴にある 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 のライブラリやヘッダファイルは、ソースパッケージに添付していますが、依存ライブラリのリンクに必要です

```
参考: Ubuntu18.04 でのgcc-9導入

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-9
sudo apt install g++-9
```

## ビルド方法

### 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ディレクトリを指定する。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mwm5.twelite.info/0.9-1/getting-started/sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
