🗑️ 删除`CMakeLists.txt`对`vcpkg`的支持
✨ 新增`conan`包管理,并配置多平台`profile` 🔧 变更`CMakeLists`的设置
This commit is contained in:
parent
41ef82b1aa
commit
99f735f2df
|
|
@ -2,6 +2,5 @@
|
||||||
vscode/node_modules
|
vscode/node_modules
|
||||||
vscode/out
|
vscode/out
|
||||||
lsp-server/build
|
lsp-server/build
|
||||||
lsp-server/test/test_ast/build
|
lsp-server/.conan
|
||||||
lsp-server/test/test_symbol/build
|
lsp-server/CMakeUserPresets.json
|
||||||
lsp-server/test/test_lsp_any/build
|
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,10 @@
|
||||||
cmake_minimum_required(VERSION 4.0)
|
cmake_minimum_required(VERSION 4.0)
|
||||||
|
|
||||||
project(tsl-server)
|
project(tsl-server LANGUAGES C CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 23)
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}")
|
|
||||||
message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
|
|
||||||
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
|
||||||
|
|
||||||
if(DEFINED CMAKE_TOOLCHAIN_FILE)
|
|
||||||
message(STATUS ">>> CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}")
|
|
||||||
endif()
|
|
||||||
if(DEFINED VCPKG_TARGET_TRIPLET)
|
|
||||||
message(STATUS ">>> VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# 设置默认构建类型
|
# 设置默认构建类型
|
||||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||||
set(CMAKE_BUILD_TYPE
|
set(CMAKE_BUILD_TYPE
|
||||||
|
|
@ -25,105 +14,11 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||||
"MinSizeRel" "RelWithDebInfo")
|
"MinSizeRel" "RelWithDebInfo")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# MinGW/MSYS2 静态链接
|
option(BUILD_TESTS "Build tests" ON)
|
||||||
if(MINGW)
|
|
||||||
add_link_options(-static -static-libgcc -static-libstdc++)
|
add_subdirectory(src)
|
||||||
elseif(UNIX AND NOT APPLE) # Linux 静态链接
|
|
||||||
add_link_options(-static-libgcc -static-libstdc++)
|
if(BUILD_TESTS)
|
||||||
endif()
|
enable_testing()
|
||||||
|
add_subdirectory(test)
|
||||||
if(WIN32)
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a")
|
|
||||||
else()
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(glaze CONFIG REQUIRED)
|
|
||||||
find_package(spdlog CONFIG REQUIRED)
|
|
||||||
find_package(fmt CONFIG REQUIRED)
|
|
||||||
find_package(Taskflow REQUIRED)
|
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
|
||||||
find_package(Threads REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(DEFINED CMAKE_TOOLCHAIN_FILE)
|
|
||||||
find_package(unofficial-tree-sitter CONFIG REQUIRED)
|
|
||||||
set(TREESITTER_TARGET unofficial::tree-sitter::tree-sitter)
|
|
||||||
else()
|
|
||||||
# find_package(PkgConfig REQUIRED) pkg_check_modules(TREESITTER tree-sitter)
|
|
||||||
find_library(TREESITTER_LIBRARY tree-sitter) # use ${TREESITTER_LIBRARY}
|
|
||||||
set(TREESITTER_TARGET ${TREESITTER_LIBRARY})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT TARGET spdlog::spdlog_header_only)
|
|
||||||
message(WARNING "spdlog header-only target not found, using shared library")
|
|
||||||
endif()
|
|
||||||
if(NOT TARGET fmt::fmt-header-only)
|
|
||||||
message(WARNING "fmt header-only target not found, using shared library")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
||||||
set(SOURCES
|
|
||||||
src/main.cpp
|
|
||||||
src/utils/args_parser.cpp
|
|
||||||
src/utils/string.cpp
|
|
||||||
src/core/dispacther.cpp
|
|
||||||
src/core/server.cpp
|
|
||||||
src/scheduler/async_executor.cpp
|
|
||||||
src/language/ast/deserializer.cpp
|
|
||||||
src/language/ast/detail.cpp
|
|
||||||
src/language/ast/tree_sitter_utils.cpp
|
|
||||||
src/language/symbol/builder.cpp
|
|
||||||
src/language/symbol/location_index.cpp
|
|
||||||
src/language/symbol/relations.cpp
|
|
||||||
src/language/symbol/store.cpp
|
|
||||||
src/language/symbol/scope.cpp
|
|
||||||
src/language/symbol/table.cpp
|
|
||||||
src/language/symbol/builder.cpp
|
|
||||||
src/language/keyword/repo.cpp
|
|
||||||
src/provider/base/bootstrap.cpp
|
|
||||||
src/provider/base/interface.cpp
|
|
||||||
src/provider/initialize/initialize.cpp
|
|
||||||
src/provider/initialized/initialized.cpp
|
|
||||||
src/provider/text_document/did_open.cpp
|
|
||||||
src/provider/text_document/did_change.cpp
|
|
||||||
src/provider/text_document/did_close.cpp
|
|
||||||
src/provider/text_document/completion.cpp
|
|
||||||
# src/provider/text_document/semantic_tokens.cpp
|
|
||||||
src/provider/shutdown/shutdown.cpp
|
|
||||||
src/provider/exit/exit.cpp
|
|
||||||
src/provider/cancel_request/cancel_request.cpp
|
|
||||||
src/provider/trace/set_trace.cpp
|
|
||||||
src/provider/completion_item/resolve.cpp
|
|
||||||
src/service/base/bootstrap.cpp
|
|
||||||
src/service/utils/text_coordinates.cpp
|
|
||||||
src/service/detail/document/text_document.cpp
|
|
||||||
src/service/detail/symbol/conversion.cpp
|
|
||||||
src/service/detail/symbol/repository/editing.cpp
|
|
||||||
src/service/detail/symbol/repository/workspace.cpp
|
|
||||||
src/service/detail/symbol/repository/system.cpp
|
|
||||||
src/service/document.cpp
|
|
||||||
src/service/symbol.cpp
|
|
||||||
src/service/parser.cpp
|
|
||||||
src/tree-sitter/parser.c
|
|
||||||
src/tree-sitter/scanner.c)
|
|
||||||
|
|
||||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE src)
|
|
||||||
|
|
||||||
target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_HEADER_ONLY
|
|
||||||
FMT_HEADER_ONLY)
|
|
||||||
|
|
||||||
target_link_libraries(
|
|
||||||
${PROJECT_NAME}
|
|
||||||
PRIVATE glaze::glaze Taskflow::Taskflow spdlog::spdlog_header_only
|
|
||||||
fmt::fmt-header-only ${TREESITTER_TARGET} # 使用变量,避免条件判断
|
|
||||||
$<$<PLATFORM_ID:Linux>:Threads::Threads> # 使用生成器表达式
|
|
||||||
)
|
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
|
||||||
target_compile_options(
|
|
||||||
${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic $<$<CONFIG:Debug>:-g -O0>
|
|
||||||
$<$<CONFIG:Release>:-O3>)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
[settings]
|
||||||
|
os=Linux
|
||||||
|
arch=x86_64
|
||||||
|
compiler=gcc
|
||||||
|
compiler.version=15
|
||||||
|
compiler.libcxx=libstdc++11
|
||||||
|
compiler.cppstd=23
|
||||||
|
build_type=Release
|
||||||
|
|
||||||
|
[conf]
|
||||||
|
tools.build:compiler_executables={"c": "gcc", "cpp": "g++"}
|
||||||
|
tools.cmake.cmaketoolchain:generator=Ninja
|
||||||
|
tools.cmake.cmake_layout:build_folder=.
|
||||||
|
tools.cmake.cmake_layout:build_folder_vars=[]
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Windows cross (MinGW GCC 14) from Linux host
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
os=Windows
|
||||||
|
arch=x86_64
|
||||||
|
compiler=gcc
|
||||||
|
compiler.version=14
|
||||||
|
compiler.libcxx=libstdc++11
|
||||||
|
compiler.threads=posix
|
||||||
|
compiler.exception=seh
|
||||||
|
compiler.cppstd=23
|
||||||
|
build_type=Release
|
||||||
|
|
||||||
|
[conf]
|
||||||
|
tools.build:compiler_executables={"c": "x86_64-w64-mingw32-gcc", "cpp": "x86_64-w64-mingw32-g++"}
|
||||||
|
tools.gnu:host_triplet=x86_64-w64-mingw32
|
||||||
|
tools.cmake.cmaketoolchain:generator=Ninja
|
||||||
|
tools.cmake.cmaketoolchain:system_name=Windows
|
||||||
|
tools.cmake.cmaketoolchain:system_processor=x86_64
|
||||||
|
tools.cmake.cmake_layout:build_folder=.
|
||||||
|
tools.cmake.cmake_layout:build_folder_vars=[]
|
||||||
|
tools.cmake.cmaketoolchain:system_version=11
|
||||||
|
|
||||||
|
[buildenv]
|
||||||
|
RC=x86_64-w64-mingw32-windres
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Windows MSYS2 UCRT, GCC 14 (adjust paths if msys2 is elsewhere)
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
os=Windows
|
||||||
|
os.subsystem=msys2
|
||||||
|
arch=x86_64
|
||||||
|
compiler=gcc
|
||||||
|
compiler.version=14
|
||||||
|
compiler.libcxx=libstdc++11
|
||||||
|
compiler.threads=posix
|
||||||
|
compiler.exception=seh
|
||||||
|
compiler.cppstd=23
|
||||||
|
build_type=Release
|
||||||
|
|
||||||
|
[conf]
|
||||||
|
tools.build:compiler_executables={"c": "C:/Programs/msys2/ucrt64/bin/gcc.exe", "cpp": "C:/Programs/msys2/ucrt64/bin/g++.exe"}
|
||||||
|
tools.gnu:host_triplet=x86_64-w64-mingw32
|
||||||
|
tools.cmake.cmaketoolchain:generator=Ninja
|
||||||
|
tools.cmake.cmaketoolchain:system_name=Windows
|
||||||
|
tools.cmake.cmaketoolchain:system_processor=x86_64
|
||||||
|
tools.cmake.cmake_layout:build_folder=.
|
||||||
|
tools.cmake.cmake_layout:build_folder_vars=[]
|
||||||
|
tools.cmake.cmaketoolchain:system_version=11
|
||||||
|
|
||||||
|
[buildenv]
|
||||||
|
MSYSTEM=UCRT64
|
||||||
|
CHERE_INVOKING=1
|
||||||
|
PKG_CONFIG_PATH=C:/Programs/msys2/ucrt64/lib/pkgconfig
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
[requires]
|
||||||
|
glaze/6.0.1
|
||||||
|
spdlog/1.16.0
|
||||||
|
fmt/12.0.0
|
||||||
|
taskflow/3.10.0
|
||||||
|
tree-sitter/0.25.9
|
||||||
|
|
||||||
|
[generators]
|
||||||
|
CMakeDeps
|
||||||
|
CMakeToolchain
|
||||||
|
|
||||||
|
[options]
|
||||||
|
spdlog/*:header_only=True
|
||||||
|
fmt/*:header_only=True
|
||||||
|
|
||||||
|
[layout]
|
||||||
|
cmake_layout
|
||||||
|
|
||||||
|
# Quick build (only test_ast):
|
||||||
|
# CONAN_HOME=/tmp/conan-home conan install . \
|
||||||
|
# -pr:h conan/profiles/linux-x86_64-gcc-15 \
|
||||||
|
# -pr:b conan/profiles/linux-x86_64-gcc-15 \
|
||||||
|
# -of build/arch-server --build=missing
|
||||||
|
# cmake -S . -B build/arch-server \
|
||||||
|
# -DCMAKE_TOOLCHAIN_FILE=$PWD/build/arch-server/Release/generators/conan_toolchain.cmake \
|
||||||
|
# -DBUILD_TESTS=ON
|
||||||
|
# cmake --build build/arch-server --target test_ast
|
||||||
|
|
||||||
|
# Cross build to Windows (MinGW from Linux):
|
||||||
|
# CONAN_HOME=/tmp/conan-home conan install . \
|
||||||
|
# -pr:h conan/profiles/windows-x86_64-gcc-15-cross \
|
||||||
|
# -pr:b conan/profiles/linux-x86_64-gcc-15 \
|
||||||
|
# -of build/win-cross --build=missing
|
||||||
|
# cmake -S . -B build/win-cross \
|
||||||
|
# -DCMAKE_TOOLCHAIN_FILE=$PWD/build/win-cross/Release/generators/conan_toolchain.cmake \
|
||||||
|
# -DBUILD_TESTS=ON
|
||||||
|
# cmake --build build/win-cross --target test_ast
|
||||||
|
|
@ -0,0 +1,103 @@
|
||||||
|
message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}")
|
||||||
|
message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
|
||||||
|
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
||||||
|
|
||||||
|
if(DEFINED CMAKE_TOOLCHAIN_FILE)
|
||||||
|
message(STATUS ">>> CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# MinGW/MSYS2 静态链接
|
||||||
|
if(MINGW)
|
||||||
|
add_link_options(-static -static-libgcc -static-libstdc++)
|
||||||
|
elseif(UNIX AND NOT APPLE) # Linux 静态链接
|
||||||
|
add_link_options(-static-libgcc -static-libstdc++)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a")
|
||||||
|
else()
|
||||||
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_package(glaze CONFIG REQUIRED)
|
||||||
|
find_package(spdlog CONFIG REQUIRED)
|
||||||
|
find_package(fmt CONFIG REQUIRED)
|
||||||
|
find_package(Taskflow CONFIG REQUIRED)
|
||||||
|
find_package(tree-sitter CONFIG REQUIRED)
|
||||||
|
|
||||||
|
if(UNIX AND NOT APPLE)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT TARGET spdlog::spdlog_header_only)
|
||||||
|
message(WARNING "spdlog header-only target not found, using shared library")
|
||||||
|
endif()
|
||||||
|
if(NOT TARGET fmt::fmt-header-only)
|
||||||
|
message(WARNING "fmt header-only target not found, using shared library")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(SOURCES
|
||||||
|
main.cpp
|
||||||
|
utils/args_parser.cpp
|
||||||
|
utils/string.cpp
|
||||||
|
core/dispacther.cpp
|
||||||
|
core/server.cpp
|
||||||
|
scheduler/async_executor.cpp
|
||||||
|
language/ast/deserializer.cpp
|
||||||
|
language/ast/detail.cpp
|
||||||
|
language/ast/tree_sitter_utils.cpp
|
||||||
|
language/symbol/builder.cpp
|
||||||
|
language/symbol/index/location.cpp
|
||||||
|
language/symbol/index/scope.cpp
|
||||||
|
language/symbol/graph/call.cpp
|
||||||
|
language/symbol/graph/inheritance.cpp
|
||||||
|
language/symbol/graph/reference.cpp
|
||||||
|
language/symbol/store.cpp
|
||||||
|
language/symbol/table.cpp
|
||||||
|
language/keyword/repo.cpp
|
||||||
|
provider/base/bootstrap.cpp
|
||||||
|
provider/base/interface.cpp
|
||||||
|
provider/initialize/initialize.cpp
|
||||||
|
provider/initialized/initialized.cpp
|
||||||
|
provider/text_document/did_open.cpp
|
||||||
|
provider/text_document/did_change.cpp
|
||||||
|
provider/text_document/did_close.cpp
|
||||||
|
provider/text_document/completion.cpp
|
||||||
|
# provider/text_document/semantic_tokens.cpp
|
||||||
|
provider/shutdown/shutdown.cpp
|
||||||
|
provider/exit/exit.cpp
|
||||||
|
provider/cancel_request/cancel_request.cpp
|
||||||
|
provider/trace/set_trace.cpp
|
||||||
|
provider/completion_item/resolve.cpp
|
||||||
|
service/base/bootstrap.cpp
|
||||||
|
service/utils/text_coordinates.cpp
|
||||||
|
service/detail/document/text_document.cpp
|
||||||
|
service/detail/symbol/conversion.cpp
|
||||||
|
service/detail/symbol/utils.cpp
|
||||||
|
service/detail/symbol/repository/editing.cpp
|
||||||
|
service/detail/symbol/repository/workspace.cpp
|
||||||
|
service/detail/symbol/repository/system.cpp
|
||||||
|
service/document.cpp
|
||||||
|
service/symbol.cpp
|
||||||
|
service/parser.cpp
|
||||||
|
tree-sitter/parser.c
|
||||||
|
tree-sitter/scanner.c)
|
||||||
|
|
||||||
|
add_executable(${PROJECT_NAME} ${SOURCES})
|
||||||
|
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_HEADER_ONLY
|
||||||
|
FMT_HEADER_ONLY)
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
${PROJECT_NAME}
|
||||||
|
PRIVATE glaze::glaze Taskflow::Taskflow spdlog::spdlog_header_only
|
||||||
|
fmt::fmt-header-only tree-sitter::tree-sitter
|
||||||
|
$<$<PLATFORM_ID:Linux>:Threads::Threads> # 使用生成器表达式
|
||||||
|
)
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||||
|
target_compile_options(
|
||||||
|
${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic $<$<CONFIG:Debug>:-g -O0>
|
||||||
|
$<$<CONFIG:Release>:-O3>)
|
||||||
|
endif()
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
# MinGW/MSYS2 静态链接
|
||||||
|
if(MINGW)
|
||||||
|
add_link_options(-static -static-libgcc -static-libstdc++)
|
||||||
|
elseif(UNIX AND NOT APPLE) # Linux 静态链接
|
||||||
|
add_link_options(-static-libgcc -static-libstdc++)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a")
|
||||||
|
else()
|
||||||
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/test_ast/CMakeLists.txt)
|
||||||
|
add_subdirectory(test_ast)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/test_lsp_any/CMakeLists.txt)
|
||||||
|
add_subdirectory(test_lsp_any)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/test_symbol/CMakeLists.txt)
|
||||||
|
add_subdirectory(test_symbol)
|
||||||
|
endif()
|
||||||
|
|
@ -1,73 +1,23 @@
|
||||||
cmake_minimum_required(VERSION 4.0)
|
cmake_minimum_required(VERSION 4.0)
|
||||||
|
|
||||||
project(test_ast)
|
project(test_ast LANGUAGES C CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 23)
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}")
|
|
||||||
message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
|
|
||||||
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
|
||||||
|
|
||||||
if (DEFINED CMAKE_TOOLCHAIN_FILE)
|
|
||||||
message(STATUS ">>> CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}")
|
|
||||||
endif()
|
|
||||||
if (DEFINED VCPKG_TARGET_TRIPLET)
|
|
||||||
message(STATUS ">>> VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# 设置默认构建类型
|
|
||||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
||||||
set(CMAKE_BUILD_TYPE
|
|
||||||
"Release"
|
|
||||||
CACHE STRING "Build type" FORCE)
|
|
||||||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
|
|
||||||
"MinSizeRel" "RelWithDebInfo")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# MinGW/MSYS2 静态链接
|
|
||||||
if(MINGW)
|
|
||||||
add_link_options(-static -static-libgcc -static-libstdc++)
|
|
||||||
elseif(UNIX AND NOT APPLE) # Linux 静态链接
|
|
||||||
add_link_options(-static-libgcc -static-libstdc++)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a")
|
|
||||||
else()
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(glaze CONFIG REQUIRED)
|
find_package(glaze CONFIG REQUIRED)
|
||||||
find_package(spdlog CONFIG REQUIRED)
|
find_package(spdlog CONFIG REQUIRED)
|
||||||
find_package(fmt CONFIG REQUIRED)
|
find_package(fmt CONFIG REQUIRED)
|
||||||
find_package(Taskflow REQUIRED)
|
find_package(Taskflow CONFIG REQUIRED)
|
||||||
|
find_package(tree-sitter CONFIG REQUIRED)
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEFINED CMAKE_TOOLCHAIN_FILE)
|
|
||||||
find_package(unofficial-tree-sitter CONFIG REQUIRED)
|
|
||||||
set(TREESITTER_TARGET unofficial::tree-sitter::tree-sitter)
|
|
||||||
else()
|
|
||||||
# find_package(PkgConfig REQUIRED)
|
|
||||||
# pkg_check_modules(TREESITTER tree-sitter)
|
|
||||||
find_library(TREESITTER_LIBRARY tree-sitter) # use ${TREESITTER_LIBRARY}
|
|
||||||
set(TREESITTER_TARGET ${TREESITTER_LIBRARY})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT TARGET spdlog::spdlog_header_only)
|
|
||||||
message(WARNING "spdlog header-only target not found, using shared library")
|
|
||||||
endif()
|
|
||||||
if(NOT TARGET fmt::fmt-header-only)
|
|
||||||
message(WARNING "fmt header-only target not found, using shared library")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
||||||
set(SOURCES
|
set(SOURCES
|
||||||
./test.cpp
|
test.cpp
|
||||||
./debug_printer.cpp
|
debug_printer.cpp
|
||||||
../../src/language/ast/deserializer.cpp
|
../../src/language/ast/deserializer.cpp
|
||||||
../../src/language/ast/detail.cpp
|
../../src/language/ast/detail.cpp
|
||||||
../../src/language/ast/tree_sitter_utils.cpp
|
../../src/language/ast/tree_sitter_utils.cpp
|
||||||
|
|
@ -76,25 +26,19 @@ set(SOURCES
|
||||||
../../src/tree-sitter/parser.c)
|
../../src/tree-sitter/parser.c)
|
||||||
|
|
||||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
add_executable(${PROJECT_NAME} ${SOURCES})
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE src)
|
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_HEADER_ONLY
|
target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_HEADER_ONLY
|
||||||
FMT_HEADER_ONLY)
|
FMT_HEADER_ONLY)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
target_link_libraries(
|
||||||
glaze::glaze
|
${PROJECT_NAME}
|
||||||
Taskflow::Taskflow
|
PRIVATE glaze::glaze Taskflow::Taskflow spdlog::spdlog_header_only
|
||||||
spdlog::spdlog_header_only
|
fmt::fmt-header-only tree-sitter::tree-sitter
|
||||||
fmt::fmt-header-only
|
$<$<PLATFORM_ID:Linux>:Threads::Threads>)
|
||||||
${TREESITTER_TARGET} # 使用变量,避免条件判断
|
|
||||||
$<$<PLATFORM_ID:Linux>:Threads::Threads> # 使用生成器表达式
|
|
||||||
)
|
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
target_compile_options(
|
||||||
-Wall -Wextra -Wpedantic
|
${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic $<$<CONFIG:Debug>:-g -O0>
|
||||||
$<$<CONFIG:Debug>:-g -O0>
|
$<$<CONFIG:Release>:-O3>)
|
||||||
$<$<CONFIG:Release>:-O3>
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,72 +1,32 @@
|
||||||
cmake_minimum_required(VERSION 4.0)
|
cmake_minimum_required(VERSION 4.0)
|
||||||
|
|
||||||
project(test_lsp_any)
|
project(test_lsp_any LANGUAGES C CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 23)
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}")
|
|
||||||
message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
|
|
||||||
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
|
||||||
|
|
||||||
if (DEFINED CMAKE_TOOLCHAIN_FILE)
|
|
||||||
message(STATUS ">>> CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}")
|
|
||||||
endif()
|
|
||||||
if (DEFINED VCPKG_TARGET_TRIPLET)
|
|
||||||
message(STATUS ">>> VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# 设置默认构建类型
|
|
||||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
||||||
set(CMAKE_BUILD_TYPE
|
|
||||||
"Release"
|
|
||||||
CACHE STRING "Build type" FORCE)
|
|
||||||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
|
|
||||||
"MinSizeRel" "RelWithDebInfo")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# MinGW/MSYS2 静态链接
|
|
||||||
if(MINGW)
|
|
||||||
add_link_options(-static -static-libgcc -static-libstdc++)
|
|
||||||
elseif(UNIX AND NOT APPLE) # Linux 静态链接
|
|
||||||
add_link_options(-static-libgcc -static-libstdc++)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a")
|
|
||||||
else()
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(glaze CONFIG REQUIRED)
|
find_package(glaze CONFIG REQUIRED)
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
||||||
set(SOURCES
|
set(SOURCES
|
||||||
./common_test.cpp
|
common_test.cpp
|
||||||
./facade_test.cpp
|
facade_test.cpp
|
||||||
./lsp_any_test.cpp
|
lsp_any_test.cpp
|
||||||
./test_framework.cpp
|
test_framework.cpp
|
||||||
./test_main.cpp
|
test_main.cpp
|
||||||
./transformer_test.cpp
|
transformer_test.cpp)
|
||||||
)
|
|
||||||
|
|
||||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
add_executable(${PROJECT_NAME} ${SOURCES})
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE src)
|
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
target_link_libraries(${PROJECT_NAME} PRIVATE glaze::glaze
|
||||||
glaze::glaze
|
$<$<PLATFORM_ID:Linux>:Threads::Threads>)
|
||||||
$<$<PLATFORM_ID:Linux>:Threads::Threads> # 使用生成器表达式
|
|
||||||
)
|
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
target_compile_options(
|
||||||
-Wall -Wextra -Wpedantic
|
${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic $<$<CONFIG:Debug>:-g -O0>
|
||||||
$<$<CONFIG:Debug>:-g -O0>
|
$<$<CONFIG:Release>:-O3>)
|
||||||
$<$<CONFIG:Release>:-O3>
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,100 +1,52 @@
|
||||||
cmake_minimum_required(VERSION 4.0)
|
cmake_minimum_required(VERSION 4.0)
|
||||||
|
|
||||||
project(test_symbol)
|
project(test_symbol LANGUAGES C CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 23)
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}")
|
|
||||||
message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
|
|
||||||
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
|
||||||
|
|
||||||
if (DEFINED CMAKE_TOOLCHAIN_FILE)
|
|
||||||
message(STATUS ">>> CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}")
|
|
||||||
endif()
|
|
||||||
if (DEFINED VCPKG_TARGET_TRIPLET)
|
|
||||||
message(STATUS ">>> VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# 设置默认构建类型
|
|
||||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
||||||
set(CMAKE_BUILD_TYPE
|
|
||||||
"Release"
|
|
||||||
CACHE STRING "Build type" FORCE)
|
|
||||||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
|
|
||||||
"MinSizeRel" "RelWithDebInfo")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# MinGW/MSYS2 静态链接
|
|
||||||
if(MINGW)
|
|
||||||
add_link_options(-static -static-libgcc -static-libstdc++)
|
|
||||||
elseif(UNIX AND NOT APPLE) # Linux 静态链接
|
|
||||||
add_link_options(-static-libgcc -static-libstdc++)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib" ".dll.a")
|
|
||||||
else()
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(glaze CONFIG REQUIRED)
|
find_package(glaze CONFIG REQUIRED)
|
||||||
find_package(spdlog CONFIG REQUIRED)
|
find_package(spdlog CONFIG REQUIRED)
|
||||||
find_package(fmt CONFIG REQUIRED)
|
find_package(fmt CONFIG REQUIRED)
|
||||||
find_package(Taskflow REQUIRED)
|
find_package(Taskflow CONFIG REQUIRED)
|
||||||
|
find_package(tree-sitter CONFIG REQUIRED)
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEFINED CMAKE_TOOLCHAIN_FILE)
|
|
||||||
find_package(unofficial-tree-sitter CONFIG REQUIRED)
|
|
||||||
set(TREESITTER_TARGET unofficial::tree-sitter::tree-sitter)
|
|
||||||
else()
|
|
||||||
# find_package(PkgConfig REQUIRED)
|
|
||||||
# pkg_check_modules(TREESITTER tree-sitter)
|
|
||||||
find_library(TREESITTER_LIBRARY tree-sitter) # use ${TREESITTER_LIBRARY}
|
|
||||||
set(TREESITTER_TARGET ${TREESITTER_LIBRARY})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT TARGET spdlog::spdlog_header_only)
|
|
||||||
message(WARNING "spdlog header-only target not found, using shared library")
|
|
||||||
endif()
|
|
||||||
if(NOT TARGET fmt::fmt-header-only)
|
|
||||||
message(WARNING "fmt header-only target not found, using shared library")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
||||||
set(SOURCES
|
set(SOURCES
|
||||||
./test.cpp
|
test.cpp
|
||||||
./debug_printer.cpp
|
debug_printer.cpp
|
||||||
../../src/utils/string.cpp
|
../../src/utils/string.cpp
|
||||||
../../src/language/ast/deserializer.cpp
|
../../src/language/ast/deserializer.cpp
|
||||||
../../src/language/ast/detail.cpp
|
../../src/language/ast/detail.cpp
|
||||||
../../src/language/ast/tree_sitter_utils.cpp
|
../../src/language/ast/tree_sitter_utils.cpp
|
||||||
../../src/language/symbol/builder.cpp
|
../../src/language/symbol/builder.cpp
|
||||||
|
../../src/language/symbol/store.cpp
|
||||||
|
../../src/language/symbol/table.cpp
|
||||||
|
../../src/language/symbol/index/location.cpp
|
||||||
|
../../src/language/symbol/index/scope.cpp
|
||||||
|
../../src/language/symbol/graph/call.cpp
|
||||||
|
../../src/language/symbol/graph/inheritance.cpp
|
||||||
|
../../src/language/symbol/graph/reference.cpp
|
||||||
../../src/tree-sitter/scanner.c
|
../../src/tree-sitter/scanner.c
|
||||||
../../src/tree-sitter/parser.c)
|
../../src/tree-sitter/parser.c)
|
||||||
|
|
||||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
add_executable(${PROJECT_NAME} ${SOURCES})
|
||||||
target_include_directories(${PROJECT_NAME} PRIVATE src)
|
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_HEADER_ONLY
|
target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_HEADER_ONLY
|
||||||
FMT_HEADER_ONLY)
|
FMT_HEADER_ONLY)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
target_link_libraries(
|
||||||
glaze::glaze
|
${PROJECT_NAME}
|
||||||
Taskflow::Taskflow
|
PRIVATE glaze::glaze Taskflow::Taskflow spdlog::spdlog_header_only
|
||||||
spdlog::spdlog_header_only
|
fmt::fmt-header-only tree-sitter::tree-sitter
|
||||||
fmt::fmt-header-only
|
$<$<PLATFORM_ID:Linux>:Threads::Threads>)
|
||||||
${TREESITTER_TARGET} # 使用变量,避免条件判断
|
|
||||||
$<$<PLATFORM_ID:Linux>:Threads::Threads> # 使用生成器表达式
|
|
||||||
)
|
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
target_compile_options(
|
||||||
-Wall -Wextra -Wpedantic
|
${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic $<$<CONFIG:Debug>:-g -O0>
|
||||||
$<$<CONFIG:Debug>:-g -O0>
|
$<$<CONFIG:Release>:-O3>)
|
||||||
$<$<CONFIG:Release>:-O3>
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue