1include("ggml/cmake/common.cmake")
2
3function(llama_add_compile_flags)
4 if (LLAMA_FATAL_WARNINGS)
5 if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
6 list(APPEND C_FLAGS -Werror)
7 list(APPEND CXX_FLAGS -Werror)
8 elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
9 add_compile_options(/WX)
10 endif()
11 endif()
12
13 if (LLAMA_ALL_WARNINGS)
14 if (NOT MSVC)
15 list(APPEND C_FLAGS -Wshadow -Wstrict-prototypes -Wpointer-arith -Wmissing-prototypes
16 -Werror=implicit-int -Werror=implicit-function-declaration)
17
18 list(APPEND CXX_FLAGS -Wmissing-declarations -Wmissing-noreturn)
19
20 list(APPEND WARNING_FLAGS -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function)
21
22 list(APPEND C_FLAGS ${WARNING_FLAGS})
23 list(APPEND CXX_FLAGS ${WARNING_FLAGS})
24
25 ggml_get_flags(${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION})
26
27 add_compile_options("$<$<COMPILE_LANGUAGE:C>:${C_FLAGS};${GF_C_FLAGS}>"
28 "$<$<COMPILE_LANGUAGE:CXX>:${CXX_FLAGS};${GF_CXX_FLAGS}>")
29 else()
30 # todo : msvc
31 set(C_FLAGS "" PARENT_SCOPE)
32 set(CXX_FLAGS "" PARENT_SCOPE)
33 endif()
34 endif()
35
36 if (NOT MSVC)
37 if (LLAMA_SANITIZE_THREAD)
38 message(STATUS "Using -fsanitize=thread")
39
40 add_compile_options(-fsanitize=thread)
41 link_libraries (-fsanitize=thread)
42 endif()
43
44 if (LLAMA_SANITIZE_ADDRESS)
45 message(STATUS "Using -fsanitize=address")
46
47 add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
48 link_libraries (-fsanitize=address)
49 endif()
50
51 if (LLAMA_SANITIZE_UNDEFINED)
52 message(STATUS "Using -fsanitize=undefined")
53
54 add_compile_options(-fsanitize=undefined)
55 link_libraries (-fsanitize=undefined)
56 endif()
57 endif()
58endfunction()