1
0

CMakeLists.txt 5.3 KB

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