aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt76
1 files changed, 76 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..990b901
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,76 @@
+cmake_minimum_required(VERSION 3.13)
+
+project(tree-sitter-wmap
+ VERSION "1.0.0"
+ DESCRIPTION "Parser for wmap Formatted Wardley Maps"
+ HOMEPAGE_URL "https://git.sr.ht/~rbdr/tree-sitter-wmap"
+ 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 15 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()
+
+include(GNUInstallDirs)
+
+find_program(TREE_SITTER_CLI tree-sitter DOC "Tree-sitter CLI")
+
+add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/grammar.json"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/node-types.json"
+ DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/grammar.js"
+ COMMAND "${TREE_SITTER_CLI}" generate grammar.js --no-parser
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ COMMENT "Generating grammar.json")
+
+add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/parser.c"
+ BYPRODUCTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tree_sitter/parser.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/tree_sitter/alloc.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/tree_sitter/array.h"
+ 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-wmap src/parser.c)
+if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/scanner.c)
+ target_sources(tree-sitter-wmap PRIVATE src/scanner.c)
+endif()
+target_include_directories(tree-sitter-wmap
+ PRIVATE src
+ INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/bindings/c>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+
+target_compile_definitions(tree-sitter-wmap PRIVATE
+ $<$<BOOL:${TREE_SITTER_REUSE_ALLOCATOR}>:TREE_SITTER_REUSE_ALLOCATOR>
+ $<$<CONFIG:Debug>:TREE_SITTER_DEBUG>)
+
+set_target_properties(tree-sitter-wmap
+ PROPERTIES
+ C_STANDARD 11
+ POSITION_INDEPENDENT_CODE ON
+ SOVERSION "${TREE_SITTER_ABI_VERSION}.${PROJECT_VERSION_MAJOR}"
+ DEFINE_SYMBOL "")
+
+configure_file(bindings/c/tree-sitter-wmap.pc.in
+ "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-wmap.pc" @ONLY)
+
+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-wmap.pc"
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+install(TARGETS tree-sitter-wmap
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
+
+file(GLOB QUERIES queries/*.scm)
+install(FILES ${QUERIES}
+ DESTINATION "${CMAKE_INSTALL_DATADIR}/tree-sitter/queries/wmap")
+
+add_custom_target(ts-test "${TREE_SITTER_CLI}" test
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ COMMENT "tree-sitter test")