ggerganov commited on
Commit
19b5bd5
·
1 Parent(s): 606a6bc

Add CMake support

Browse files
.gitignore CHANGED
@@ -2,3 +2,5 @@ sync.sh
2
  main
3
  stream
4
  *.o
 
 
 
2
  main
3
  stream
4
  *.o
5
+ .cache
6
+ build/
CMakeLists.txt ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ cmake_minimum_required (VERSION 3.0)
2
+ project(whisper.cpp VERSION 0.1.0)
3
+
4
+ set(CMAKE_EXPORT_COMPILE_COMMANDS "on")
5
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
6
+ set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
7
+
8
+ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
9
+ set(WHISPER_STANDALONE ON)
10
+ include(cmake/GitVars.cmake)
11
+ include(cmake/BuildTypes.cmake)
12
+ else()
13
+ set(WHISPER_STANDALONE OFF)
14
+ endif()
15
+
16
+ # options
17
+
18
+ option(WHISPER_ALL_WARNINGS "whisper: enable all compiler warnings" ON)
19
+ option(WHISPER_ALL_WARNINGS_3RD_PARTY "whisper: enable all compiler warnings in 3rd party libs" OFF)
20
+
21
+ option(WHISPER_SANITIZE_THREAD "whisper: enable thread sanitizer" OFF)
22
+ option(WHISPER_SANITIZE_ADDRESS "whisper: enable address sanitizer" OFF)
23
+ option(WHISPER_SANITIZE_UNDEFINED "whisper: enable undefined sanitizer" OFF)
24
+
25
+ option(WHISPER_BUILD_TESTS "whisper: build tests" ${WHISPER_STANDALONE})
26
+
27
+ option(WHISPER_SUPPORT_SDL2 "whisper: support for libSDL2" OFF)
28
+
29
+ # sanitizers
30
+
31
+ if (WHISPER_SANITIZE_THREAD)
32
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread")
33
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
34
+ endif()
35
+
36
+ if (WHISPER_SANITIZE_ADDRESS)
37
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
38
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
39
+ endif()
40
+
41
+ if (WHISPER_SANITIZE_UNDEFINED)
42
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
43
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
44
+ endif()
45
+
46
+ #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math")
47
+ #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
48
+
49
+ # dependencies
50
+
51
+ set(CMAKE_C_STANDARD 11)
52
+ set(CMAKE_CXX_STANDARD 11)
53
+
54
+ find_package(Threads REQUIRED)
55
+
56
+ if (WHISPER_SUPPORT_SDL2)
57
+ # SDL2
58
+
59
+ find_package(SDL2 REQUIRED)
60
+
61
+ string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES)
62
+
63
+ message(STATUS "SDL2_INCLUDE_DIRS = ${SDL2_INCLUDE_DIRS}")
64
+ message(STATUS "SDL2_LIBRARIES = ${SDL2_LIBRARIES}")
65
+ endif()
66
+
67
+ # main
68
+
69
+ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
70
+ set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
71
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo")
72
+ endif ()
73
+
74
+ if (WHISPER_ALL_WARNINGS)
75
+ if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
76
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
77
+ -Wall \
78
+ -Wextra \
79
+ -Wpedantic \
80
+ -Wshadow \
81
+ -Wcast-qual \
82
+ -Wstrict-prototypes \
83
+ -Wpointer-arith \
84
+ ")
85
+ else()
86
+ # todo : windows
87
+ endif()
88
+ endif()
89
+
90
+ # compiler flags
91
+
92
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=vla")
93
+ #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-math-errno -ffinite-math-only -funsafe-math-optimizations")
94
+
95
+ message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
96
+
97
+ if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64")
98
+ message(STATUS "ARM detected")
99
+ else()
100
+ message(STATUS "x86 detected")
101
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx -mavx2 -mfma -mf16c")
102
+ endif()
103
+
104
+ # ggml
105
+
106
+ set(TARGET ggml)
107
+
108
+ add_library(${TARGET} STATIC
109
+ ggml.c
110
+ )
111
+
112
+ target_include_directories(${TARGET} PUBLIC
113
+ .
114
+ )
115
+
116
+ target_link_libraries(${TARGET} PRIVATE m ${CMAKE_THREAD_LIBS_INIT})
117
+
118
+ if (BUILD_SHARED_LIBS)
119
+ target_link_libraries(${TARGET} PUBLIC
120
+ ${CMAKE_DL_LIBS}
121
+ )
122
+
123
+ target_compile_definitions(${TARGET} PUBLIC
124
+ WHISPER_SHARED
125
+ )
126
+ endif()
127
+
128
+ target_compile_definitions(${TARGET} PUBLIC
129
+ ${WHISPER_EXTRA_FLAGS}
130
+ )
131
+
132
+ # whisper
133
+
134
+ set(TARGET whisper)
135
+
136
+ add_library(${TARGET} SHARED
137
+ whisper.cpp
138
+ )
139
+
140
+ target_include_directories(${TARGET} PUBLIC
141
+ .
142
+ )
143
+
144
+ target_link_libraries(${TARGET} PRIVATE ggml ${CMALE_THREAD_LIBS_INIT})
145
+
146
+ if (BUILD_SHARED_LIBS)
147
+ target_link_libraries(${TARGET} PUBLIC
148
+ ${CMAKE_DL_LIBS}
149
+ )
150
+
151
+ target_compile_definitions(${TARGET} PUBLIC
152
+ WHISPER_SHARED
153
+ )
154
+ endif()
155
+
156
+ target_compile_definitions(${TARGET} PUBLIC
157
+ ${WHISPER_EXTRA_FLAGS}
158
+ )
159
+
160
+ install(TARGETS ${TARGET}
161
+ LIBRARY DESTINATION lib
162
+ ARCHIVE DESTINATION lib/static
163
+ )
164
+
165
+ # main
166
+
167
+ set(TARGET main)
168
+
169
+ add_executable(${TARGET} main.cpp)
170
+
171
+ target_link_libraries(${TARGET} PRIVATE whisper)
172
+
173
+ # stream
174
+
175
+ set(TARGET stream)
176
+
177
+ add_executable(${TARGET} stream.cpp)
178
+
179
+ target_include_directories(${TARGET} PRIVATE ${SDL2_INCLUDE_DIRS})
180
+
181
+ target_link_libraries(${TARGET} PRIVATE whisper ${SDL2_LIBRARIES})
182
+
183
+ # tests
184
+
185
+ if (WHISPER_BUILD_TESTS)
186
+ enable_testing()
187
+ add_subdirectory(tests)
188
+ endif ()
cmake/BuildTypes.cmake ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Add new build types
2
+
3
+ # ReleaseGG - Release with enabled asserts
4
+
5
+ SET(CMAKE_CXX_FLAGS_RELEASEGG
6
+ "-O3"
7
+ CACHE STRING "Flags used by the c++ compiler during release builds with enabled asserts."
8
+ FORCE )
9
+ SET(CMAKE_C_FLAGS_RELEASEGG
10
+ "-O3"
11
+ CACHE STRING "Flags used by the compiler during release builds with enabled asserts."
12
+ FORCE )
13
+ SET(CMAKE_EXE_LINKER_FLAGS_RELEASEGG
14
+ ""
15
+ CACHE STRING "Flags used for linking binaries during release builds with enabled asserts."
16
+ FORCE )
17
+ SET(CMAKE_SHARED_LINKER_FLAGS_RELEASEGG
18
+ ""
19
+ CACHE STRING "Flags used by the shared libraries linker during release builds with enabled asserts."
20
+ FORCE )
21
+ MARK_AS_ADVANCED(
22
+ CMAKE_CXX_FLAGS_RELEASEGG
23
+ CMAKE_C_FLAGS_RELEASEGG
24
+ CMAKE_EXE_LINKER_FLAGS_RELEASEGG
25
+ CMAKE_SHARED_LINKER_FLAGS_RELEASEGG )
26
+
27
+ # RelWithDebInfoGG - RelWithDebInfo with enabled asserts
28
+
29
+ SET(CMAKE_CXX_FLAGS_RELWITHDEBINFOGG
30
+ "-O2 -g"
31
+ CACHE STRING "Flags used by the c++ compiler during release builds with debug symbols and enabled asserts."
32
+ FORCE )
33
+ SET(CMAKE_C_FLAGS_RELWITHDEBINFOGG
34
+ "-O2 -g"
35
+ CACHE STRING "Flags used by the compiler during release builds with debug symbols and enabled asserts."
36
+ FORCE )
37
+ SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFOGG
38
+ ""
39
+ CACHE STRING "Flags used for linking binaries during release builds with debug symbols and enabled asserts."
40
+ FORCE )
41
+ SET(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFOGG
42
+ ""
43
+ CACHE STRING "Flags used by the shared libraries linker during release builds with debug symbols and enabled asserts."
44
+ FORCE )
45
+ MARK_AS_ADVANCED(
46
+ CMAKE_CXX_FLAGS_RELWITHDEBINFOGG
47
+ CMAKE_C_FLAGS_RELWITHDEBINFOGG
48
+ CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFOGG
49
+ CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFOGG )
50
+
51
+ if (NOT XCODE AND NOT MSVC AND NOT CMAKE_BUILD_TYPE)
52
+ set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
53
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" "ReleaseGG" "RelWithDebInfoGG")
54
+ endif()
cmake/GitVars.cmake ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ find_package(Git)
2
+
3
+ # the commit's SHA1
4
+ execute_process(COMMAND
5
+ "${GIT_EXECUTABLE}" describe --match=NeVeRmAtCh --always --abbrev=8
6
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
7
+ OUTPUT_VARIABLE GIT_SHA1
8
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
9
+
10
+ # the date of the commit
11
+ execute_process(COMMAND
12
+ "${GIT_EXECUTABLE}" log -1 --format=%ad --date=local
13
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
14
+ OUTPUT_VARIABLE GIT_DATE
15
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
16
+
17
+ # the subject of the commit
18
+ execute_process(COMMAND
19
+ "${GIT_EXECUTABLE}" log -1 --format=%s
20
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
21
+ OUTPUT_VARIABLE GIT_COMMIT_SUBJECT
22
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
tests/CMakeLists.txt ADDED
File without changes