CMakeLists.txt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. set(TARGET cpp-httplib)
  2. license_add_file("cpp-httplib" "LICENSE")
  3. find_package(Threads REQUIRED)
  4. add_library(${TARGET} STATIC httplib.cpp httplib.h)
  5. if (NOT MSVC)
  6. # disable warnings in 3rd party code
  7. target_compile_options(${TARGET} PRIVATE -w)
  8. endif()
  9. target_link_libraries(${TARGET} PRIVATE Threads::Threads)
  10. if (WIN32 AND NOT MSVC)
  11. target_link_libraries(${TARGET} PRIVATE ws2_32)
  12. endif()
  13. target_compile_features(${TARGET} PRIVATE cxx_std_17)
  14. target_compile_definitions(${TARGET} PRIVATE
  15. # increase max payload length to allow use of larger context size
  16. CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH=1048576
  17. # increase backlog size to avoid connection resets for >> 1 slots
  18. CPPHTTPLIB_LISTEN_BACKLOG=512
  19. # increase max URI length to handle longer prompts in query string
  20. CPPHTTPLIB_REQUEST_URI_MAX_LENGTH=32768
  21. # disable Nagle's algorithm
  22. CPPHTTPLIB_TCP_NODELAY=1
  23. )
  24. set(OPENSSL_NO_ASM ON CACHE BOOL "Disable OpenSSL ASM code when building BoringSSL or LibreSSL")
  25. if (LLAMA_BUILD_BORINGSSL)
  26. set(FIPS OFF CACHE BOOL "Enable FIPS (BoringSSL)")
  27. set(BORINGSSL_GIT "https://boringssl.googlesource.com/boringssl" CACHE STRING "BoringSSL git repository")
  28. set(BORINGSSL_VERSION "0.20251002.0" CACHE STRING "BoringSSL version")
  29. message(STATUS "Fetching BoringSSL version ${BORINGSSL_VERSION}")
  30. set(BORINGSSL_ARGS
  31. GIT_REPOSITORY ${BORINGSSL_GIT}
  32. GIT_TAG ${BORINGSSL_VERSION}
  33. )
  34. if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28)
  35. list(APPEND BORINGSSL_ARGS EXCLUDE_FROM_ALL)
  36. endif()
  37. include(FetchContent)
  38. FetchContent_Declare(boringssl ${BORINGSSL_ARGS})
  39. set(SAVED_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
  40. set(SAVED_BUILD_TESTING ${BUILD_TESTING})
  41. set(BUILD_SHARED_LIBS OFF)
  42. set(BUILD_TESTING OFF)
  43. if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28)
  44. FetchContent_MakeAvailable(boringssl)
  45. else()
  46. FetchContent_GetProperties(boringssl)
  47. if(NOT boringssl_POPULATED)
  48. FetchContent_Populate(boringssl)
  49. add_subdirectory(${boringssl_SOURCE_DIR} ${boringssl_BINARY_DIR} EXCLUDE_FROM_ALL)
  50. endif()
  51. endif()
  52. set(BUILD_SHARED_LIBS ${SAVED_BUILD_SHARED_LIBS})
  53. set(BUILD_TESTING ${SAVED_BUILD_TESTING})
  54. license_add_file("BoringSSL" "${boringssl_SOURCE_DIR}/LICENSE")
  55. set(CPPHTTPLIB_OPENSSL_SUPPORT TRUE)
  56. target_link_libraries(${TARGET} PUBLIC ssl crypto)
  57. elseif (LLAMA_BUILD_LIBRESSL)
  58. set(LIBRESSL_VERSION "4.2.1" CACHE STRING "LibreSSL version")
  59. message(STATUS "Fetching LibreSSL version ${LIBRESSL_VERSION}")
  60. set(LIBRESSL_ARGS
  61. URL "https://cdn.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${LIBRESSL_VERSION}.tar.gz"
  62. )
  63. if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.24)
  64. list(APPEND LIBRESSL_ARGS DOWNLOAD_EXTRACT_TIMESTAMP TRUE)
  65. endif()
  66. if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28)
  67. list(APPEND LIBRESSL_ARGS EXCLUDE_FROM_ALL)
  68. endif()
  69. include(FetchContent)
  70. FetchContent_Declare(libressl ${LIBRESSL_ARGS})
  71. set(SAVED_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
  72. set(SAVED_BUILD_TESTING ${BUILD_TESTING})
  73. set(BUILD_SHARED_LIBS OFF)
  74. set(BUILD_TESTING OFF)
  75. if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28)
  76. FetchContent_MakeAvailable(libressl)
  77. else()
  78. FetchContent_GetProperties(libressl)
  79. if(NOT libressl_POPULATED)
  80. FetchContent_Populate(libressl)
  81. add_subdirectory(${libressl_SOURCE_DIR} ${libressl_BINARY_DIR} EXCLUDE_FROM_ALL)
  82. endif()
  83. endif()
  84. set(BUILD_SHARED_LIBS ${SAVED_BUILD_SHARED_LIBS})
  85. set(BUILD_TESTING ${SAVED_BUILD_TESTING})
  86. license_add_file("LibreSSL" "${libressl_SOURCE_DIR}/COPYING")
  87. set(CPPHTTPLIB_OPENSSL_SUPPORT TRUE)
  88. target_link_libraries(${TARGET} PUBLIC ssl crypto)
  89. elseif (LLAMA_OPENSSL)
  90. find_package(OpenSSL)
  91. if (OpenSSL_FOUND)
  92. include(CheckCSourceCompiles)
  93. set(SAVED_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES})
  94. set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
  95. check_c_source_compiles("
  96. #include <openssl/opensslv.h>
  97. #if defined(OPENSSL_IS_BORINGSSL) || defined(LIBRESSL_VERSION_NUMBER)
  98. # if OPENSSL_VERSION_NUMBER < 0x1010107f
  99. # error bad version
  100. # endif
  101. #else
  102. # if OPENSSL_VERSION_NUMBER < 0x30000000L
  103. # error bad version
  104. # endif
  105. #endif
  106. int main() { return 0; }
  107. " OPENSSL_VERSION_SUPPORTED)
  108. set(CMAKE_REQUIRED_INCLUDES ${SAVED_CMAKE_REQUIRED_INCLUDES})
  109. if (OPENSSL_VERSION_SUPPORTED)
  110. message(STATUS "OpenSSL found: ${OPENSSL_VERSION}")
  111. set(CPPHTTPLIB_OPENSSL_SUPPORT TRUE)
  112. target_link_libraries(${TARGET} PUBLIC OpenSSL::SSL OpenSSL::Crypto)
  113. endif()
  114. else()
  115. message(WARNING "OpenSSL not found, HTTPS support disabled")
  116. endif()
  117. endif()
  118. if (CPPHTTPLIB_OPENSSL_SUPPORT)
  119. target_compile_definitions(${TARGET} PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT) # used in server.cpp
  120. if (APPLE AND CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  121. target_compile_definitions(${TARGET} PRIVATE CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN)
  122. find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation REQUIRED)
  123. find_library(SECURITY_FRAMEWORK Security REQUIRED)
  124. target_link_libraries(${TARGET} PUBLIC ${CORE_FOUNDATION_FRAMEWORK} ${SECURITY_FRAMEWORK})
  125. endif()
  126. if (WIN32 AND NOT MSVC)
  127. target_link_libraries(${TARGET} PUBLIC crypt32)
  128. endif()
  129. endif()