CMakeLists.txt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. cmake_minimum_required(VERSION 3.8)
  2. project("llama.cpp")
  3. set(CMAKE_CXX_STANDARD 20)
  4. set(CMAKE_CXX_STANDARD_REQUIRED true)
  5. set(CMAKE_C_STANDARD 11)
  6. option(LLAMA_ALL_WARNINGS "llama: enable all compiler warnings" ON)
  7. option(LLAMA_ALL_WARNINGS_3RD_PARTY "llama: enable all compiler warnings in 3rd party libs" OFF)
  8. option(LLAMA_SANITIZE_THREAD "llama: enable thread sanitizer" OFF)
  9. option(LLAMA_SANITIZE_ADDRESS "llama: enable address sanitizer" OFF)
  10. option(LLAMA_SANITIZE_UNDEFINED "llama: enable undefined sanitizer" OFF)
  11. if (APPLE)
  12. option(LLAMA_NO_ACCELERATE "llama: disable Accelerate framework" OFF)
  13. option(LLAMA_NO_AVX "llama: disable AVX" OFF)
  14. option(LLAMA_NO_AVX2 "llama: disable AVX2" OFF)
  15. option(LLAMA_NO_FMA "llama: disable FMA" OFF)
  16. endif()
  17. if (NOT MSVC)
  18. if (LLAMA_SANITIZE_THREAD)
  19. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread")
  20. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
  21. endif()
  22. if (LLAMA_SANITIZE_ADDRESS)
  23. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
  24. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
  25. endif()
  26. if (LLAMA_SANITIZE_UNDEFINED)
  27. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
  28. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
  29. endif()
  30. endif()
  31. if (APPLE AND NOT LLAMA_NO_ACCELERATE)
  32. find_library(ACCELERATE_FRAMEWORK Accelerate)
  33. if (ACCELERATE_FRAMEWORK)
  34. message(STATUS "Accelerate framework found")
  35. set(LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS} ${ACCELERATE_FRAMEWORK})
  36. set(LLAMA_EXTRA_FLAGS ${LLAMA_EXTRA_FLAGS} -DGGML_USE_ACCELERATE)
  37. else()
  38. message(WARNING "Accelerate framework not found")
  39. endif()
  40. endif()
  41. if (LLAMA_ALL_WARNINGS)
  42. if (NOT MSVC)
  43. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
  44. -Wall \
  45. -Wextra \
  46. -Wpedantic \
  47. -Wshadow \
  48. -Wcast-qual \
  49. -Wstrict-prototypes \
  50. -Wpointer-arith \
  51. -Wno-unused-function \
  52. ")
  53. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
  54. -Wall \
  55. -Wextra \
  56. -Wpedantic \
  57. -Wcast-qual \
  58. ")
  59. else()
  60. # todo : msvc
  61. endif()
  62. endif()
  63. message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
  64. if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64")
  65. message(STATUS "ARM detected")
  66. else()
  67. message(STATUS "x86 detected")
  68. if (MSVC)
  69. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
  70. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX2")
  71. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX2")
  72. else()
  73. if(NOT LLAMA_NO_AVX)
  74. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx")
  75. endif()
  76. if(NOT LLAMA_NO_AVX2)
  77. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2")
  78. endif()
  79. if(NOT LLAMA_NO_FMA)
  80. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma")
  81. endif()
  82. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mf16c")
  83. endif()
  84. endif()
  85. # if (LLAMA_PERF)
  86. # set(LLAMA_EXTRA_FLAGS ${LLAMA_EXTRA_FLAGS} -DGGML_PERF)
  87. # endif()
  88. add_executable(llama
  89. main.cpp
  90. utils.cpp
  91. utils.h)
  92. add_executable(quantize
  93. quantize.cpp
  94. utils.cpp
  95. utils.h)
  96. add_library(ggml
  97. ggml.c
  98. ggml.h)
  99. target_compile_definitions(ggml PUBLIC ${LLAMA_EXTRA_FLAGS})
  100. target_compile_definitions(llama PUBLIC ${LLAMA_EXTRA_FLAGS})
  101. target_compile_definitions(quantize PUBLIC ${LLAMA_EXTRA_FLAGS})
  102. target_link_libraries(ggml PRIVATE ${LLAMA_EXTRA_LIBS})
  103. target_include_directories(ggml PUBLIC .)
  104. target_link_libraries(quantize PRIVATE ggml)
  105. target_link_libraries(llama PRIVATE ggml)