CMakeLists.txt 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. if (LLAMA_BUILD_BORINGSSL)
  21. set(OPENSSL_NO_ASM ON CACHE BOOL "Disable OpenSSL ASM code (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_OPENSSL)
  53. find_package(OpenSSL)
  54. if (OpenSSL_FOUND)
  55. include(CheckCSourceCompiles)
  56. set(SAVED_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES})
  57. set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
  58. check_c_source_compiles("
  59. #include <openssl/opensslv.h>
  60. #if defined(OPENSSL_IS_BORINGSSL) || defined(LIBRESSL_VERSION_NUMBER)
  61. # if OPENSSL_VERSION_NUMBER < 0x1010107f
  62. # error bad version
  63. # endif
  64. #else
  65. # if OPENSSL_VERSION_NUMBER < 0x30000000L
  66. # error bad version
  67. # endif
  68. #endif
  69. int main() { return 0; }
  70. " OPENSSL_VERSION_SUPPORTED)
  71. set(CMAKE_REQUIRED_INCLUDES ${SAVED_CMAKE_REQUIRED_INCLUDES})
  72. if (OPENSSL_VERSION_SUPPORTED)
  73. message(STATUS "OpenSSL found: ${OPENSSL_VERSION}")
  74. set(CPPHTTPLIB_OPENSSL_SUPPORT TRUE)
  75. target_link_libraries(${TARGET} PUBLIC OpenSSL::SSL OpenSSL::Crypto)
  76. endif()
  77. else()
  78. message(STATUS "OpenSSL not found, SSL support disabled")
  79. endif()
  80. endif()
  81. if (CPPHTTPLIB_OPENSSL_SUPPORT)
  82. target_compile_definitions(${TARGET} PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT) # used in server.cpp
  83. if (APPLE AND CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  84. target_compile_definitions(${TARGET} PRIVATE CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN)
  85. find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation REQUIRED)
  86. find_library(SECURITY_FRAMEWORK Security REQUIRED)
  87. target_link_libraries(${TARGET} PUBLIC ${CORE_FOUNDATION_FRAMEWORK} ${SECURITY_FRAMEWORK})
  88. endif()
  89. endif()