Skip to content

Commit 374101f

Browse files
authored
cmake : enable building llama.cpp using system libggml (#12321)
* cmake: Factor out compiler flag function from ggml llama.cpps's build requires it, too, and we may want to make use of it without add_subdirectory(ggml). * cmake: Enable building against system ggml This facilitates package maintenance for Linux distributions, where the libggml library most likely will be shipped as an individual package upon which a llama.cpp package depends.
1 parent b3c9a65 commit 374101f

File tree

4 files changed

+38
-28
lines changed

4 files changed

+38
-28
lines changed

CMakeLists.txt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ else()
2929
set(LLAMA_STANDALONE OFF)
3030
endif()
3131

32+
option(LLAMA_USE_SYSTEM_GGML "Use system libggml" OFF)
33+
3234
if (EMSCRIPTEN)
3335
set(BUILD_SHARED_LIBS_DEFAULT OFF)
3436

@@ -145,7 +147,13 @@ endif()
145147
# 3rd-party
146148
#
147149

148-
if (NOT TARGET ggml)
150+
if (LLAMA_USE_SYSTEM_GGML)
151+
message(STATUS "Using system-provided libggml, skipping ggml build")
152+
find_package(ggml REQUIRED)
153+
add_library(ggml ALIAS ggml::ggml)
154+
endif()
155+
156+
if (NOT TARGET ggml AND NOT LLAMA_USE_SYSTEM_GGML)
149157
add_subdirectory(ggml)
150158
# ... otherwise assume ggml is added by a parent CMakeLists.txt
151159
endif()

cmake/common.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
include("ggml/cmake/common.cmake")
2+
13
function(llama_add_compile_flags)
24
if (LLAMA_FATAL_WARNINGS)
35
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")

ggml/cmake/common.cmake

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
function(ggml_get_flags CCID CCVER)
2+
set(C_FLAGS "")
3+
set(CXX_FLAGS "")
4+
5+
if (CCID MATCHES "Clang")
6+
set(C_FLAGS -Wunreachable-code-break -Wunreachable-code-return)
7+
set(CXX_FLAGS -Wunreachable-code-break -Wunreachable-code-return -Wmissing-prototypes -Wextra-semi)
8+
9+
if (
10+
(CCID STREQUAL "Clang" AND CCVER VERSION_GREATER_EQUAL 3.8.0) OR
11+
(CCID STREQUAL "AppleClang" AND CCVER VERSION_GREATER_EQUAL 7.3.0)
12+
)
13+
list(APPEND C_FLAGS -Wdouble-promotion)
14+
endif()
15+
elseif (CCID STREQUAL "GNU")
16+
set(C_FLAGS -Wdouble-promotion)
17+
set(CXX_FLAGS -Wno-array-bounds)
18+
19+
if (CCVER VERSION_GREATER_EQUAL 8.1.0)
20+
list(APPEND CXX_FLAGS -Wextra-semi)
21+
endif()
22+
endif()
23+
24+
set(GF_C_FLAGS ${C_FLAGS} PARENT_SCOPE)
25+
set(GF_CXX_FLAGS ${CXX_FLAGS} PARENT_SCOPE)
26+
endfunction()

ggml/src/CMakeLists.txt

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
include(CheckCXXCompilerFlag)
2+
include("../cmake/common.cmake")
23

34
add_compile_definitions(GGML_SCHED_MAX_COPIES=${GGML_SCHED_MAX_COPIES})
45

@@ -24,33 +25,6 @@ if (NOT MSVC)
2425
endif()
2526
endif()
2627

27-
function(ggml_get_flags CCID CCVER)
28-
set(C_FLAGS "")
29-
set(CXX_FLAGS "")
30-
31-
if (CCID MATCHES "Clang")
32-
set(C_FLAGS -Wunreachable-code-break -Wunreachable-code-return)
33-
set(CXX_FLAGS -Wunreachable-code-break -Wunreachable-code-return -Wmissing-prototypes -Wextra-semi)
34-
35-
if (
36-
(CCID STREQUAL "Clang" AND CCVER VERSION_GREATER_EQUAL 3.8.0) OR
37-
(CCID STREQUAL "AppleClang" AND CCVER VERSION_GREATER_EQUAL 7.3.0)
38-
)
39-
list(APPEND C_FLAGS -Wdouble-promotion)
40-
endif()
41-
elseif (CCID STREQUAL "GNU")
42-
set(C_FLAGS -Wdouble-promotion)
43-
set(CXX_FLAGS -Wno-array-bounds)
44-
45-
if (CCVER VERSION_GREATER_EQUAL 8.1.0)
46-
list(APPEND CXX_FLAGS -Wextra-semi)
47-
endif()
48-
endif()
49-
50-
set(GF_C_FLAGS ${C_FLAGS} PARENT_SCOPE)
51-
set(GF_CXX_FLAGS ${CXX_FLAGS} PARENT_SCOPE)
52-
endfunction()
53-
5428
if (GGML_FATAL_WARNINGS)
5529
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
5630
list(APPEND C_FLAGS -Werror)

0 commit comments

Comments
 (0)