セットアップ #
バイナリをダウンロードする場合 #
- 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 等への対応
ソースコードからビルドする場合 #
- clang,ninja,cmake,goをダウンロードして、PATH 環境変数に設定してください。
git clone https://github.com/on-keyday/brgen.git
を実行cd brgen
を実行. build.sh
(mac,linux,git bash(windows))またはbuild.bat
(cmd.exe(windows))を実行tool
ディレクトリに実行可能ファイルが入っていることを確認tool/src2json --version
でバージョンが確認できます(TODO(on-keyday):現在、プログラムのバージョンはリリースのバージョンと同期していません)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.sh
のBRGEN_RUST_ENABLED
が1
に設定されている箇所を0
にしてください
experimental #
S2J_USE_NETWORK
環境変数を1
に設定してビルドすることで src2json を http 経由で利用できるようになるモードが使用できるようになります。
このモードを利用する際は初回ビルド時にクローンされるutils
ディレクトリ内で. build shared Release fnet
と. build shared Release fnetserv
を実行して、libfnet
とlibfnetserv
をビルドする必要があります。
現在、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 環境では動く可能性が高いですが、他環境での動作は保証されません。