This patch allows users to include the parser by the same path from local build as well as installed location. Previously it was not possible to include the header prior to installing the built parser.
66 lines
2.8 KiB
CMake
66 lines
2.8 KiB
CMake
cmake_minimum_required(VERSION 3.13)
|
|
|
|
project(tree-sitter-PARSER_NAME
|
|
VERSION "PARSER_VERSION"
|
|
DESCRIPTION "PARSER_DESCRIPTION"
|
|
HOMEPAGE_URL "PARSER_URL"
|
|
LANGUAGES C)
|
|
|
|
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
|
|
option(TREE_SITTER_REUSE_ALLOCATOR "Reuse the library allocator" OFF)
|
|
|
|
set(TREE_SITTER_ABI_VERSION ABI_VERSION_MAX CACHE STRING "Tree-sitter ABI version")
|
|
if(NOT ${TREE_SITTER_ABI_VERSION} MATCHES "^[0-9]+$")
|
|
unset(TREE_SITTER_ABI_VERSION CACHE)
|
|
message(FATAL_ERROR "TREE_SITTER_ABI_VERSION must be an integer")
|
|
endif()
|
|
|
|
find_program(TREE_SITTER_CLI tree-sitter DOC "Tree-sitter CLI")
|
|
|
|
add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/parser.c"
|
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/grammar.json"
|
|
COMMAND "${TREE_SITTER_CLI}" generate src/grammar.json
|
|
--abi=${TREE_SITTER_ABI_VERSION}
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
COMMENT "Generating parser.c")
|
|
|
|
add_library(tree-sitter-PARSER_NAME src/parser.c)
|
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/scanner.c)
|
|
target_sources(tree-sitter-PARSER_NAME PRIVATE src/scanner.c)
|
|
endif()
|
|
target_include_directories(tree-sitter-PARSER_NAME
|
|
PRIVATE src
|
|
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/bindings/c>
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
|
|
|
target_compile_definitions(tree-sitter-PARSER_NAME PRIVATE
|
|
$<$<BOOL:${TREE_SITTER_REUSE_ALLOCATOR}>:TREE_SITTER_REUSE_ALLOCATOR>
|
|
$<$<CONFIG:Debug>:TREE_SITTER_DEBUG>)
|
|
|
|
set_target_properties(tree-sitter-PARSER_NAME
|
|
PROPERTIES
|
|
C_STANDARD 11
|
|
POSITION_INDEPENDENT_CODE ON
|
|
SOVERSION "${TREE_SITTER_ABI_VERSION}.${PROJECT_VERSION_MAJOR}"
|
|
DEFINE_SYMBOL "")
|
|
|
|
configure_file(bindings/c/tree-sitter-PARSER_NAME.pc.in
|
|
"${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-PARSER_NAME.pc" @ONLY)
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bindings/c/tree_sitter"
|
|
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
|
FILES_MATCHING PATTERN "*.h")
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-PARSER_NAME.pc"
|
|
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig")
|
|
install(TARGETS tree-sitter-PARSER_NAME
|
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
|
|
|
|
file(GLOB QUERIES queries/*.scm)
|
|
install(FILES ${QUERIES}
|
|
DESTINATION "${CMAKE_INSTALL_DATADIR}/tree-sitter/queries/PARSER_NAME")
|
|
|
|
add_custom_target(ts-test "${TREE_SITTER_CLI}" test
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
COMMENT "tree-sitter test")
|