1 Star 4 Fork 0

Gitee 极速下载 / ChatGLM-cpp

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/li-plus/chatglm.cpp
克隆/下载
CMakeLists.txt 4.88 KB
一键复制 编辑 原始数据 按行查看 历史
Jiahao Li 提交于 2024-03-17 10:41 . Add sm89 by default for rtx 4090 (#282)
cmake_minimum_required(VERSION 3.12)
project(ChatGLM.cpp VERSION 0.0.1 LANGUAGES CXX)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib CACHE STRING "")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib CACHE STRING "")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin CACHE STRING "")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall")
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif ()
# third-party libraries
add_compile_definitions(GGML_CUDA_MMV_Y=2) # for large vocab
include_directories(third_party/ggml/include/ggml third_party/ggml/src)
add_subdirectory(third_party/ggml)
set(SPM_ENABLE_SHARED OFF CACHE BOOL "chatglm: disable sentencepiece shared libraries by default")
set(SPM_ENABLE_TCMALLOC OFF CACHE BOOL "chatglm: disable tcmalloc by default")
include_directories(third_party/sentencepiece/src)
add_subdirectory(third_party/sentencepiece)
if (GGML_CUBLAS)
add_compile_definitions(GGML_USE_CUBLAS)
enable_language(CUDA)
# ref: https://stackoverflow.com/questions/28932864/which-compute-capability-is-supported-by-which-cuda-versions
set(CUDA_ARCH_LIST "52;61;70;75")
if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "11.0")
set(CUDA_ARCH_LIST "${CUDA_ARCH_LIST};80")
endif ()
if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "11.1")
set(CUDA_ARCH_LIST "${CUDA_ARCH_LIST};86")
endif ()
if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "11.8")
set(CUDA_ARCH_LIST "${CUDA_ARCH_LIST};89;90")
endif ()
set(CUDA_ARCHITECTURES ${CUDA_ARCH_LIST} CACHE STRING "chatglm: cuda architectures to compile")
set_property(TARGET ggml PROPERTY CUDA_ARCHITECTURES ${CUDA_ARCHITECTURES})
endif ()
if (GGML_METAL)
add_compile_definitions(GGML_USE_METAL)
configure_file(third_party/ggml/src/ggml-metal.metal ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/ggml-metal.metal COPYONLY)
endif ()
if (GGML_PERF)
add_compile_definitions(GGML_PERF)
endif ()
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
file(GLOB CPP_SOURCES
${PROJECT_SOURCE_DIR}/*.h
${PROJECT_SOURCE_DIR}/*.cpp)
set_source_files_properties(${CPP_SOURCES} PROPERTIES COMPILE_FLAGS "-pedantic-errors")
add_library(chatglm STATIC chatglm.cpp)
target_link_libraries(chatglm PUBLIC ggml sentencepiece-static)
# c++ examples
option(CHATGLM_ENABLE_EXAMPLES "chatglm: enable c++ examples" ON)
if (CHATGLM_ENABLE_EXAMPLES)
add_executable(main main.cpp)
target_link_libraries(main PRIVATE chatglm)
find_package(OpenMP)
if (OpenMP_CXX_FOUND)
set(CHATGLM_OPENMP_TARGET OpenMP::OpenMP_CXX)
endif ()
add_executable(perplexity tests/perplexity.cpp)
target_link_libraries(perplexity PRIVATE chatglm ${CHATGLM_OPENMP_TARGET})
endif ()
# GoogleTest
option(CHATGLM_ENABLE_TESTING "chatglm: enable testing" OFF)
if (CHATGLM_ENABLE_TESTING)
enable_testing()
# ref: https://github.com/google/googletest/blob/main/googletest/README.md
include(FetchContent)
FetchContent_Declare(
googletest
# Specify the commit you depend on and update it regularly.
URL https://github.com/google/googletest/archive/refs/heads/main.zip
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
include(GoogleTest)
# Now simply link against gtest or gtest_main as needed. Eg
add_executable(chatglm_test chatglm_test.cpp)
target_link_libraries(chatglm_test PRIVATE chatglm gtest_main)
gtest_discover_tests(chatglm_test)
endif ()
option(CHATGLM_ENABLE_PYBIND "chatglm: enable python binding" OFF)
if (CHATGLM_ENABLE_PYBIND)
set_target_properties(chatglm ggml sentencepiece-static PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
add_subdirectory(third_party/pybind11)
pybind11_add_module(_C chatglm_pybind.cpp)
target_link_libraries(_C PRIVATE chatglm)
endif ()
# lint
file(GLOB PY_SOURCES
${PROJECT_SOURCE_DIR}/chatglm_cpp/*.py
${PROJECT_SOURCE_DIR}/examples/*.py
${PROJECT_SOURCE_DIR}/tests/*.py
${PROJECT_SOURCE_DIR}/convert.py
${PROJECT_SOURCE_DIR}/setup.py)
add_custom_target(lint
COMMAND clang-format -i ${CPP_SOURCES}
COMMAND isort ${PY_SOURCES}
COMMAND black ${PY_SOURCES} --verbose)
# check all
add_custom_target(check
COMMAND cmake --build build -j
COMMAND ./build/bin/chatglm_test
COMMAND python3 setup.py develop
COMMAND python3 -m pytest tests/test_chatglm_cpp.py -v
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
# mypy
add_custom_target(mypy
mypy chatglm_cpp examples --exclude __init__.pyi
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
# stub
add_custom_target(stub
pybind11-stubgen chatglm_cpp -o .
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
add_definitions("/wd4267 /wd4244 /wd4305 /Zc:strictStrings /utf-8")
endif ()
C/C++
1
https://gitee.com/mirrors/ChatGLM-cpp.git
git@gitee.com:mirrors/ChatGLM-cpp.git
mirrors
ChatGLM-cpp
ChatGLM-cpp
main

搜索帮助