CMakeLists.txt 4.3 KB

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