Setup

セットアップ #

バイナリをダウンロードする場合 #

  • windows(x64),mac,linux(x64,arm),android(arm,termux)のビルド済みバイナリを配布しています
  • 現在(2024/5/10)の最新バージョンはv0.0.6です
    • バージョン update 頻度は今現在は作者の気分次第です。
  • WebPlayground は常に main ブランチの最新版が反映されています
  • VSCode 拡張で LSP サーバーを提供しています。現在は 上記リリースページ での提供です。
    • vscode 拡張とは別に各プラットフォーム向け実行ファイルをダウンロードしてください
    • .vscode/settings.json の"brgen-lsp.src2json"設定にダウンロードした中の tool/src2json(.exe)へのパスを指定してください。

TODO(on-keyday): apt-get,brew,winget 等への対応

ソースコードからビルドする場合 #

  1. clang,ninja,cmake,goをダウンロードして、PATH 環境変数に設定してください。
  2. git clone https://github.com/on-keyday/brgen.gitを実行
  3. cd brgenを実行
  4. . build.sh(mac,linux,git bash(windows))またはbuild.bat(cmd.exe(windows))を実行
  5. toolディレクトリに実行可能ファイルが入っていることを確認
  6. tool/src2json --versionでバージョンが確認できます(TODO(on-keyday):現在、プログラムのバージョンはリリースのバージョンと同期していません)
  7. tool/brgenを実行するとignore/exampleディレクトリにコードが生成されます

internals #

src2json,json2cpp2 は C++で書かれています。 brgen 及び json2go は Go 言語で書かれています。

C++の依存ライブラリとして https://github.com/on-keyday/utils.git を使用しています(ビルド時に自動でクローンされます)

またテスト用として gtestを使用しています。(ビルド時に同上)

build.sh(及びbuild.bat)では内部で cmake と ninja を呼び出しています。

デフォルトのコンパイラは clang, clang++, gc(go compiler)です。

build.shの呼び出し前にFUTILS_{C,CXX}_COMPILER環境変数に C/C++コンパイラのパスを設定するとビルドの際にそのコンパイラを C/C++コンパイラとして使用するようになります。

build.sh呼び出し前にGO_COMPILER環境変数に Go コンパイラのパスを設定するとビルドの際にそのコンパイラを Go コンパイラとして使用するようになります

現在デフォルトで cmptest や json2rust で Rust を使ったビルドが行われます。 無効にしたい場合はbuild.shBRGEN_RUST_ENABLED1に設定されている箇所を0にしてください

experimental #

S2J_USE_NETWORK環境変数を1に設定してビルドすることで src2json を http 経由で利用できるようになるモードが使用できるようになります。 このモードを利用する際は初回ビルド時にクローンされるutilsディレクトリ内で. build shared Release fnet. build shared Release fnetservを実行して、libfnetlibfnetservをビルドする必要があります。 現在、windows 環境では動く可能性が高いですが、他環境での動作は保証されません。

S2J_LIB環境変数を1に設定してビルドすることで src2json を共有ライブラリの形でビルドできます。 現在 MacOS(Darwin) 以外の環境ではデフォルトで有効化されています。 公開する関数はlibs2j_call関数で引数に argc,argv,capability(利用機能の制限),io_callback,io_callback_data を取ります。詳しくはソースコードを御覧ください。 argc,argv は C 言語の main 関数に渡されるものと同じ要件に従ったものを渡してください(つまり argv[argc]==nullptr であることを要求します) 現在、windows 環境では動く可能性が高いですが、他環境での動作は保証されません。