CMakeLists.txt 5.2 KB

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