CMakeLists.txt 4.4 KB

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