aboutsummaryrefslogtreecommitdiff
path: root/third-party
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2020-02-07 10:41:02 +0100
committerGitHub <noreply@github.com>2020-02-07 10:41:02 +0100
commit120a4c8e253a9c7f4fcd25351d4cb12ca99b4f3e (patch)
tree26311a11f79d7c67f7590ace4009bb730752974c /third-party
parent017b25101a3bb428d96ee956cbe32c4fe6dcc00d (diff)
parentef2e6522c53d562928060a4872020fb8f32c8ff8 (diff)
downloadrneovim-120a4c8e253a9c7f4fcd25351d4cb12ca99b4f3e.tar.gz
rneovim-120a4c8e253a9c7f4fcd25351d4cb12ca99b4f3e.tar.bz2
rneovim-120a4c8e253a9c7f4fcd25351d4cb12ca99b4f3e.zip
Merge pull request #11757 from bfredl/treesitter_runtime
treesitter: add standard search path for parsers + bundle c parser properly
Diffstat (limited to 'third-party')
-rw-r--r--third-party/CMakeLists.txt8
-rw-r--r--third-party/cmake/BuildTreesitterParsers.cmake28
-rw-r--r--third-party/cmake/TreesitterParserCMakeLists.txt19
3 files changed, 55 insertions, 0 deletions
diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt
index 46bc689471..cff063e894 100644
--- a/third-party/CMakeLists.txt
+++ b/third-party/CMakeLists.txt
@@ -42,6 +42,7 @@ option(USE_BUNDLED_LUV "Use the bundled version of luv." ${USE_BUNDLED})
#XXX(tarruda): Lua is only used for debugging the functional test client, no
# build it unless explicitly requested
option(USE_BUNDLED_LUA "Use the bundled version of lua." OFF)
+option(USE_BUNDLED_TS_PARSERS "Use the bundled treesitter parsers." ${USE_BUNDLED})
if(USE_BUNDLED AND MSVC)
option(USE_BUNDLED_GETTEXT "Use the bundled version of gettext." ON)
@@ -199,6 +200,9 @@ set(LIBICONV_SHA256 ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc891
set(UTF8PROC_URL https://github.com/JuliaStrings/utf8proc/archive/v2.2.0.tar.gz)
set(UTF8PROC_SHA256 3f8fd1dbdb057ee5ba584a539d5cd1b3952141c0338557cb0bdf8cb9cfed5dbf)
+set(TREESITTER_C_URL https://github.com/tree-sitter/tree-sitter-c/archive/6002fcd.tar.gz)
+set(TREESITTER_C_SHA256 46f8d44fa886d9ddb92571bb6fa8b175992c8758eca749cb1217464e512b6e97)
+
if(USE_BUNDLED_UNIBILIUM)
include(BuildUnibilium)
endif()
@@ -254,6 +258,10 @@ if(USE_BUNDLED_UTF8PROC)
include(BuildUtf8proc)
endif()
+if(USE_BUNDLED_TS_PARSERS)
+ include(BuildTreesitterParsers)
+endif()
+
if(WIN32)
include(GetBinaryDeps)
diff --git a/third-party/cmake/BuildTreesitterParsers.cmake b/third-party/cmake/BuildTreesitterParsers.cmake
new file mode 100644
index 0000000000..690a8fbed1
--- /dev/null
+++ b/third-party/cmake/BuildTreesitterParsers.cmake
@@ -0,0 +1,28 @@
+ExternalProject_Add(treesitter-c
+PREFIX ${DEPS_BUILD_DIR}
+URL ${TREESITER_C_URL}
+DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/treesitter-c
+DOWNLOAD_COMMAND ${CMAKE_COMMAND}
+ -DPREFIX=${DEPS_BUILD_DIR}
+ -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/treesitter-c
+ -DURL=${TREESITTER_C_URL}
+ -DEXPECTED_SHA256=${TREESITTER_C_SHA256}
+ -DTARGET=treesitter-c
+ -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
+BUILD_IN_SOURCE 1
+CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/TreesitterParserCMakeLists.txt
+ ${DEPS_BUILD_DIR}/src/treesitter-c/CMakeLists.txt
+ COMMAND ${CMAKE_COMMAND} ${DEPS_BUILD_DIR}/src/treesitter-c/CMakeLists.txt
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+ -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
+ # Pass toolchain
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ -DPARSERLANG=c
+
+BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE}
+INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE})
diff --git a/third-party/cmake/TreesitterParserCMakeLists.txt b/third-party/cmake/TreesitterParserCMakeLists.txt
new file mode 100644
index 0000000000..2808a9ee14
--- /dev/null
+++ b/third-party/cmake/TreesitterParserCMakeLists.txt
@@ -0,0 +1,19 @@
+cmake_minimum_required(VERSION 2.8.12)
+# some parsers have c++ scanner, problem?
+project(parser C) # CXX
+
+add_library(parser
+ MODULE
+ src/parser.c
+)
+set_target_properties(
+ parser
+ PROPERTIES
+ POSITION_INDEPENDENT_CODE ON
+ OUTPUT_NAME ${PARSERLANG}
+ PREFIX ""
+)
+
+include_directories(src)
+
+install(TARGETS parser LIBRARY DESTINATION lib/nvim/parser)