🗑️ 删除`CMakeLists.txt`对`vcpkg`的支持

 新增`conan`包管理,并配置多平台`profile`

🔧 变更`CMakeLists`的设置
This commit is contained in:
csh 2025-11-17 17:41:43 +08:00
parent 41ef82b1aa
commit 99f735f2df
11 changed files with 289 additions and 308 deletions

5
.gitignore vendored
View File

@ -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

View File

@ -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()

View File

@ -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=[]

View File

@ -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

View File

@ -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

37
lsp-server/conanfile.txt Normal file
View File

@ -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

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()