C++ アプリに JavaScript エンジン組み込みたい(JS で制御とか).
Duktape もいいけど,
グラフィックス処理などでパフォーマンスがほしいときもある.
hermes を考えます.
C++14 + cmake で依存ライブラリも一緒に入っている + MIT ライセンスで, 自前 C++ アプリに組み込みやすくなっています.
基本 add_subdirectory() でいけます.
ただ, hermes の CMakeLists.ext では global な add_definition
とかしているので, 自前アプリや他の submodule となにかかち合うかもしれませんので注意しておきましょう.
また, hermes ライブラリは add_target_libraries
に追加しても, うまくパスとおしてくれないようです. 自前でインクルードパス指定必要です.
binary(build)ディレクトリに hermes/Support/Config.h
が生成されるのでこれへのパスも通しておきます.
# 必要に応じて hermes の cmake オプション設定を上書き(override)
# ...
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/hermes hermes)
set(EXT_LIBRARIES
hermesVMRuntime
hermesCompilerDriver
hermesConsoleHost
hermesAST
hermesHBCBackend
hermesBackend
hermesOptimizer
hermesFrontend
hermesParser
hermesSourceMap
hermesSupport
dtoa
hermesInstrumentation
)
# hermes/Support/Config.h
target_include_directories(${TARGET} PUBLIC ${CMAKE_BINARY_DIR}/hermes/include)
target_include_directories(${TARGET} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/third_party/hermes/include)
とりあえずはこんな感じでしょうか.
あとは $hermes/tools/hermes/
あたりの repl サンプルを参考にすればいけるはず... です!