mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 18:55:14 -07:00
688b961d13
Problem: Installing treesitter parser is hard (harder than climbing to heaven). Solution: Add optional support for wasm parsers with `wasmtime`. Notes: * Needs to be enabled by setting `ENABLE_WASMTIME` for tree-sitter and Neovim. Build with `make CMAKE_EXTRA_FLAGS=-DENABLE_WASMTIME=ON DEPS_CMAKE_FLAGS=-DENABLE_WASMTIME=ON` * Adds optional Rust (obviously) and C11 dependencies. * Wasmtime comes with a lot of features that can negatively affect Neovim performance due to library and symbol table size. Make sure to build with minimal features and full LTO. * To reduce re-compilation times, install `sccache` and build with `RUSTC_WRAPPER=<path/to/sccache> make ...`
25 lines
926 B
CMake
25 lines
926 B
CMake
if(ENABLE_WASMTIME)
|
|
if(USE_BUNDLED_WASMTIME)
|
|
set(WASMTIME_CACHE_ARGS "-DCMAKE_C_FLAGS:STRING=-I${DEPS_INSTALL_DIR}/include/wasmtime -I${DEPS_INSTALL_DIR}/include")
|
|
else()
|
|
find_package(Wasmtime 24.0.0 EXACT REQUIRED)
|
|
set(WASMTIME_CACHE_ARGS "-DCMAKE_C_FLAGS:STRING=-I${WASMTIME_INCLUDE_DIR}")
|
|
endif()
|
|
string(APPEND WASMTIME_CACHE_ARGS " -DTREE_SITTER_FEATURE_WASM")
|
|
set(WASMTIME_ARGS -D CMAKE_C_STANDARD=11)
|
|
endif()
|
|
|
|
get_externalproject_options(treesitter ${DEPS_IGNORE_SHA})
|
|
ExternalProject_Add(treesitter
|
|
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/treesitter
|
|
PATCH_COMMAND ${CMAKE_COMMAND} -E copy
|
|
${CMAKE_CURRENT_SOURCE_DIR}/cmake/TreesitterCMakeLists.txt
|
|
${DEPS_BUILD_DIR}/src/treesitter/CMakeLists.txt
|
|
CMAKE_ARGS ${DEPS_CMAKE_ARGS} ${WASMTIME_ARGS}
|
|
CMAKE_CACHE_ARGS ${WASMTIME_CACHE_ARGS}
|
|
${EXTERNALPROJECT_OPTIONS})
|
|
|
|
if(USE_BUNDLED_WASMTIME)
|
|
add_dependencies(treesitter wasmtime)
|
|
endif()
|