forked from rodrigomatta/s2.cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
157 lines (133 loc) · 4.36 KB
/
CMakeLists.txt
File metadata and controls
157 lines (133 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
cmake_minimum_required(VERSION 3.14)
project(s2cpp LANGUAGES C CXX)
if (WIN32)
add_definitions(-DWIN32_LEAN_AND_MEAN)
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
option(S2_VULKAN "Build with Vulkan backend" OFF)
option(S2_CUDA "Build with CUDA backend" OFF)
option(S2_METAL "Build with Metal backend" OFF)
option(S2_BUILD_SHARED_LIBRARIES "Build S2 shared and static library targets" OFF)
option(S2_AUTO_APPLY_LOCAL_PATCHES "Automatically apply local patches from patches/*.patch during build" ON)
if(S2_METAL AND NOT APPLE)
message(FATAL_ERROR "S2_METAL is only supported on Apple platforms.")
endif()
set(GGML_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GGML_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
if(S2_AUTO_APPLY_LOCAL_PATCHES)
if(WIN32)
find_program(S2_PATCH_EXECUTABLE git)
else()
find_program(S2_PATCH_EXECUTABLE patch)
endif()
if(NOT S2_PATCH_EXECUTABLE)
message(FATAL_ERROR "S2_AUTO_APPLY_LOCAL_PATCHES=ON requires the 'patch' executable")
endif()
add_custom_target(s2_apply_local_patches
COMMAND ${CMAKE_COMMAND}
-DS2_PATCH_ROOT=${CMAKE_CURRENT_SOURCE_DIR}
-DS2_PATCH_EXECUTABLE=${S2_PATCH_EXECUTABLE}
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/apply_local_patches.cmake
COMMENT "Applying local source patches"
VERBATIM
)
endif()
if(S2_VULKAN)
set(GGML_VULKAN ON CACHE BOOL "" FORCE)
else()
set(GGML_VULKAN OFF CACHE BOOL "" FORCE)
endif()
if(S2_CUDA)
set(GGML_CUDA ON CACHE BOOL "" FORCE)
else()
set(GGML_CUDA OFF CACHE BOOL "" FORCE)
endif()
if(S2_METAL)
set(GGML_METAL ON CACHE BOOL "" FORCE)
else()
set(GGML_METAL OFF CACHE BOOL "" FORCE)
endif()
add_subdirectory(ggml)
if(TARGET s2_apply_local_patches)
foreach(_target ggml ggml-base ggml-cpu ggml-cuda ggml-vulkan ggml-metal)
if(TARGET ${_target})
add_dependencies(${_target} s2_apply_local_patches)
endif()
endforeach()
endif()
set(S2_CORE_SOURCES
src/s2_audio.cpp
src/s2_tokenizer.cpp
src/s2_log.cpp
src/s2_sampler.cpp
src/s2_model.cpp
src/s2_codec.cpp
src/s2_prompt.cpp
src/s2_generate.cpp
src/s2_pipeline.cpp
src/s2_server.cpp
src/s2_voice.cpp
)
function(s2_configure_target target_name)
target_include_directories(${target_name} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/third_party
${CMAKE_CURRENT_SOURCE_DIR}/ggml/include
${CMAKE_CURRENT_SOURCE_DIR}/ggml/src
)
target_link_libraries(${target_name} PRIVATE ggml)
if(S2_VULKAN)
target_compile_definitions(${target_name} PRIVATE GGML_USE_VULKAN)
endif()
if(S2_CUDA)
target_compile_definitions(${target_name} PRIVATE GGML_USE_CUDA)
endif()
if(S2_METAL)
target_compile_definitions(${target_name} PRIVATE GGML_USE_METAL)
endif()
if(UNIX AND NOT APPLE)
target_link_libraries(${target_name} PRIVATE pthread m)
endif()
if(WIN32)
target_link_libraries(${target_name} PRIVATE ws2_32 wsock32)
endif()
endfunction()
add_executable(s2 ${S2_CORE_SOURCES} src/main.cpp)
s2_configure_target(s2)
if(TARGET s2_apply_local_patches)
add_dependencies(s2 s2_apply_local_patches)
endif()
if(S2_BUILD_SHARED_LIBRARIES)
set(S2_LIBRARY_SOURCES
${S2_CORE_SOURCES}
src/s2_export_api.cpp
)
add_library(s2_shared SHARED ${S2_LIBRARY_SOURCES})
set_target_properties(s2_shared PROPERTIES OUTPUT_NAME s2)
s2_configure_target(s2_shared)
target_compile_definitions(s2_shared PRIVATE S2_LIBRARY)
if(TARGET s2_apply_local_patches)
add_dependencies(s2_shared s2_apply_local_patches)
endif()
add_library(s2_static STATIC ${S2_LIBRARY_SOURCES})
set_target_properties(s2_static PROPERTIES OUTPUT_NAME s2_static)
s2_configure_target(s2_static)
target_compile_definitions(s2_static PRIVATE S2_LIBRARY S2_STATIC)
if(TARGET s2_apply_local_patches)
add_dependencies(s2_static s2_apply_local_patches)
endif()
install(TARGETS s2_shared
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
install(TARGETS s2_static
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin)
endif()
install(TARGETS s2 RUNTIME DESTINATION bin)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
DESTINATION include
FILES_MATCHING PATTERN "*.h")