| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- set(TARGET cpp-httplib)
- find_package(Threads REQUIRED)
- add_library(${TARGET} STATIC httplib.cpp httplib.h)
- if (NOT MSVC)
- # disable warnings in 3rd party code
- target_compile_options(${TARGET} PRIVATE -w)
- endif()
- target_link_libraries (${TARGET} PRIVATE Threads::Threads)
- if (WIN32 AND NOT MSVC)
- target_link_libraries(${TARGET} PRIVATE ws2_32)
- endif()
- target_compile_features(${TARGET} PRIVATE cxx_std_17)
- target_compile_definitions(${TARGET} PRIVATE
- # increase max payload length to allow use of larger context size
- CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH=1048576
- # increase backlog size to avoid connection resets for >> 1 slots
- CPPHTTPLIB_LISTEN_BACKLOG=512
- # increase max URI length to handle longer prompts in query string
- CPPHTTPLIB_REQUEST_URI_MAX_LENGTH=32768
- # disable Nagle's algorithm
- CPPHTTPLIB_TCP_NODELAY=1
- )
- set(OPENSSL_NO_ASM ON CACHE BOOL "Disable OpenSSL ASM code when building BoringSSL or LibreSSL")
- if (LLAMA_BUILD_BORINGSSL)
- set(FIPS OFF CACHE BOOL "Enable FIPS (BoringSSL)")
- set(BORINGSSL_GIT "https://boringssl.googlesource.com/boringssl" CACHE STRING "BoringSSL git repository")
- set(BORINGSSL_VERSION "0.20251002.0" CACHE STRING "BoringSSL version")
- message(STATUS "Fetching BoringSSL version ${BORINGSSL_VERSION}")
- set(BORINGSSL_ARGS
- GIT_REPOSITORY ${BORINGSSL_GIT}
- GIT_TAG ${BORINGSSL_VERSION}
- )
- if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28)
- list(APPEND BORINGSSL_ARGS EXCLUDE_FROM_ALL)
- endif()
- include(FetchContent)
- FetchContent_Declare(boringssl ${BORINGSSL_ARGS})
- set(SAVED_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
- set(SAVED_BUILD_TESTING ${BUILD_TESTING})
- set(BUILD_SHARED_LIBS OFF)
- set(BUILD_TESTING OFF)
- if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28)
- FetchContent_MakeAvailable(boringssl)
- else()
- FetchContent_GetProperties(boringssl)
- if(NOT boringssl_POPULATED)
- FetchContent_Populate(boringssl)
- add_subdirectory(${boringssl_SOURCE_DIR} ${boringssl_BINARY_DIR} EXCLUDE_FROM_ALL)
- endif()
- endif()
- set(BUILD_SHARED_LIBS ${SAVED_BUILD_SHARED_LIBS})
- set(BUILD_TESTING ${SAVED_BUILD_TESTING})
- set(CPPHTTPLIB_OPENSSL_SUPPORT TRUE)
- target_link_libraries(${TARGET} PUBLIC ssl crypto)
- elseif (LLAMA_BUILD_LIBRESSL)
- set(LIBRESSL_VERSION "4.2.1" CACHE STRING "LibreSSL version")
- message(STATUS "Fetching LibreSSL version ${LIBRESSL_VERSION}")
- set(LIBRESSL_ARGS
- URL "https://cdn.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${LIBRESSL_VERSION}.tar.gz"
- )
- if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.24)
- list(APPEND LIBRESSL_ARGS DOWNLOAD_EXTRACT_TIMESTAMP TRUE)
- endif()
- if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28)
- list(APPEND LIBRESSL_ARGS EXCLUDE_FROM_ALL)
- endif()
- include(FetchContent)
- FetchContent_Declare(libressl ${LIBRESSL_ARGS})
- set(SAVED_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
- set(SAVED_BUILD_TESTING ${BUILD_TESTING})
- set(BUILD_SHARED_LIBS OFF)
- set(BUILD_TESTING OFF)
- if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28)
- FetchContent_MakeAvailable(libressl)
- else()
- FetchContent_GetProperties(libressl)
- if(NOT libressl_POPULATED)
- FetchContent_Populate(libressl)
- add_subdirectory(${libressl_SOURCE_DIR} ${libressl_BINARY_DIR} EXCLUDE_FROM_ALL)
- endif()
- endif()
- set(BUILD_SHARED_LIBS ${SAVED_BUILD_SHARED_LIBS})
- set(BUILD_TESTING ${SAVED_BUILD_TESTING})
- set(CPPHTTPLIB_OPENSSL_SUPPORT TRUE)
- target_link_libraries(${TARGET} PUBLIC ssl crypto)
- elseif (LLAMA_OPENSSL)
- find_package(OpenSSL)
- if (OpenSSL_FOUND)
- include(CheckCSourceCompiles)
- set(SAVED_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES})
- set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
- check_c_source_compiles("
- #include <openssl/opensslv.h>
- #if defined(OPENSSL_IS_BORINGSSL) || defined(LIBRESSL_VERSION_NUMBER)
- # if OPENSSL_VERSION_NUMBER < 0x1010107f
- # error bad version
- # endif
- #else
- # if OPENSSL_VERSION_NUMBER < 0x30000000L
- # error bad version
- # endif
- #endif
- int main() { return 0; }
- " OPENSSL_VERSION_SUPPORTED)
- set(CMAKE_REQUIRED_INCLUDES ${SAVED_CMAKE_REQUIRED_INCLUDES})
- if (OPENSSL_VERSION_SUPPORTED)
- message(STATUS "OpenSSL found: ${OPENSSL_VERSION}")
- set(CPPHTTPLIB_OPENSSL_SUPPORT TRUE)
- target_link_libraries(${TARGET} PUBLIC OpenSSL::SSL OpenSSL::Crypto)
- endif()
- else()
- message(STATUS "OpenSSL not found, SSL support disabled")
- endif()
- endif()
- if (CPPHTTPLIB_OPENSSL_SUPPORT)
- target_compile_definitions(${TARGET} PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT) # used in server.cpp
- if (APPLE AND CMAKE_SYSTEM_NAME STREQUAL "Darwin")
- target_compile_definitions(${TARGET} PRIVATE CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN)
- find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation REQUIRED)
- find_library(SECURITY_FRAMEWORK Security REQUIRED)
- target_link_libraries(${TARGET} PUBLIC ${CORE_FOUNDATION_FRAMEWORK} ${SECURITY_FRAMEWORK})
- endif()
- if (WIN32 AND NOT MSVC)
- target_link_libraries(${TARGET} PUBLIC crypt32)
- endif()
- endif()
|