mirror of
https://github.com/ggml-org/llama.cpp.git
synced 2026-03-17 16:44:07 +00:00
build : remove LLAMA_HTTPLIB option (#19623)
This option was introduced as a workaround because cpp-httplib could not build on visionOS. Since it has been fixed and now compiles on all platforms, we can remove it and simplify many things. Signed-off-by: Adrien Gallouët <angt@huggingface.co>
This commit is contained in:
@@ -112,7 +112,6 @@ option(LLAMA_TOOLS_INSTALL "llama: install tools" ${LLAMA_TOOLS_INSTALL_
|
|||||||
option(LLAMA_TESTS_INSTALL "llama: install tests" ON)
|
option(LLAMA_TESTS_INSTALL "llama: install tests" ON)
|
||||||
|
|
||||||
# 3rd party libs
|
# 3rd party libs
|
||||||
option(LLAMA_HTTPLIB "llama: httplib for downloading functionality" ON)
|
|
||||||
option(LLAMA_OPENSSL "llama: use openssl to support HTTPS" ON)
|
option(LLAMA_OPENSSL "llama: use openssl to support HTTPS" ON)
|
||||||
option(LLAMA_LLGUIDANCE "llama-common: include LLGuidance library for structured output in common utils" OFF)
|
option(LLAMA_LLGUIDANCE "llama-common: include LLGuidance library for structured output in common utils" OFF)
|
||||||
|
|
||||||
@@ -197,9 +196,7 @@ add_subdirectory(src)
|
|||||||
|
|
||||||
if (LLAMA_BUILD_COMMON)
|
if (LLAMA_BUILD_COMMON)
|
||||||
add_subdirectory(common)
|
add_subdirectory(common)
|
||||||
if (LLAMA_HTTPLIB)
|
add_subdirectory(vendor/cpp-httplib)
|
||||||
add_subdirectory(vendor/cpp-httplib)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (LLAMA_BUILD_COMMON AND LLAMA_BUILD_TESTS AND NOT CMAKE_JS_VERSION)
|
if (LLAMA_BUILD_COMMON AND LLAMA_BUILD_TESTS AND NOT CMAKE_JS_VERSION)
|
||||||
|
|||||||
@@ -449,10 +449,9 @@ cmake -B build-visionos -G Xcode \
|
|||||||
-DCMAKE_SYSTEM_NAME=visionOS \
|
-DCMAKE_SYSTEM_NAME=visionOS \
|
||||||
-DCMAKE_OSX_SYSROOT=xros \
|
-DCMAKE_OSX_SYSROOT=xros \
|
||||||
-DCMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS=xros \
|
-DCMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS=xros \
|
||||||
-DCMAKE_C_FLAGS="-D_XOPEN_SOURCE=700 ${COMMON_C_FLAGS}" \
|
-DCMAKE_C_FLAGS="${COMMON_C_FLAGS}" \
|
||||||
-DCMAKE_CXX_FLAGS="-D_XOPEN_SOURCE=700 ${COMMON_CXX_FLAGS}" \
|
-DCMAKE_CXX_FLAGS="${COMMON_CXX_FLAGS}" \
|
||||||
-DLLAMA_OPENSSL=OFF \
|
-DLLAMA_OPENSSL=OFF \
|
||||||
-DLLAMA_HTTPLIB=OFF \
|
|
||||||
-DLLAMA_BUILD_SERVER=OFF \
|
-DLLAMA_BUILD_SERVER=OFF \
|
||||||
-S .
|
-S .
|
||||||
cmake --build build-visionos --config Release -- -quiet
|
cmake --build build-visionos --config Release -- -quiet
|
||||||
@@ -465,10 +464,9 @@ cmake -B build-visionos-sim -G Xcode \
|
|||||||
-DCMAKE_SYSTEM_NAME=visionOS \
|
-DCMAKE_SYSTEM_NAME=visionOS \
|
||||||
-DCMAKE_OSX_SYSROOT=xrsimulator \
|
-DCMAKE_OSX_SYSROOT=xrsimulator \
|
||||||
-DCMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS=xrsimulator \
|
-DCMAKE_XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS=xrsimulator \
|
||||||
-DCMAKE_C_FLAGS="-D_XOPEN_SOURCE=700 ${COMMON_C_FLAGS}" \
|
-DCMAKE_C_FLAGS="${COMMON_C_FLAGS}" \
|
||||||
-DCMAKE_CXX_FLAGS="-D_XOPEN_SOURCE=700 ${COMMON_CXX_FLAGS}" \
|
-DCMAKE_CXX_FLAGS="${COMMON_CXX_FLAGS}" \
|
||||||
-DLLAMA_OPENSSL=OFF \
|
-DLLAMA_OPENSSL=OFF \
|
||||||
-DLLAMA_HTTPLIB=OFF \
|
|
||||||
-DLLAMA_BUILD_SERVER=OFF \
|
-DLLAMA_BUILD_SERVER=OFF \
|
||||||
-S .
|
-S .
|
||||||
cmake --build build-visionos-sim --config Release -- -quiet
|
cmake --build build-visionos-sim --config Release -- -quiet
|
||||||
|
|||||||
@@ -112,11 +112,7 @@ endif()
|
|||||||
|
|
||||||
# TODO: use list(APPEND LLAMA_COMMON_EXTRA_LIBS ...)
|
# TODO: use list(APPEND LLAMA_COMMON_EXTRA_LIBS ...)
|
||||||
set(LLAMA_COMMON_EXTRA_LIBS build_info)
|
set(LLAMA_COMMON_EXTRA_LIBS build_info)
|
||||||
|
set(LLAMA_COMMON_EXTRA_LIBS ${LLAMA_COMMON_EXTRA_LIBS} cpp-httplib)
|
||||||
if (LLAMA_HTTPLIB)
|
|
||||||
target_compile_definitions(${TARGET} PUBLIC LLAMA_USE_HTTPLIB)
|
|
||||||
set(LLAMA_COMMON_EXTRA_LIBS ${LLAMA_COMMON_EXTRA_LIBS} cpp-httplib)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (LLAMA_LLGUIDANCE)
|
if (LLAMA_LLGUIDANCE)
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
|
|||||||
@@ -19,9 +19,7 @@
|
|||||||
#include <thread>
|
#include <thread>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#if defined(LLAMA_USE_HTTPLIB)
|
|
||||||
#include "http.h"
|
#include "http.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __EMSCRIPTEN__
|
#ifndef __EMSCRIPTEN__
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
@@ -142,8 +140,6 @@ std::pair<std::string, std::string> common_download_split_repo_tag(const std::st
|
|||||||
return {hf_repo, tag};
|
return {hf_repo, tag};
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(LLAMA_USE_HTTPLIB)
|
|
||||||
|
|
||||||
class ProgressBar {
|
class ProgressBar {
|
||||||
static inline std::mutex mutex;
|
static inline std::mutex mutex;
|
||||||
static inline std::map<const ProgressBar *, int> lines;
|
static inline std::map<const ProgressBar *, int> lines;
|
||||||
@@ -768,30 +764,6 @@ std::string common_docker_resolve_model(const std::string & docker) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
common_hf_file_res common_get_hf_file(const std::string &, const std::string &, bool, const common_header_list &) {
|
|
||||||
throw std::runtime_error("download functionality is not enabled in this build");
|
|
||||||
}
|
|
||||||
|
|
||||||
bool common_download_model(const common_params_model &, const std::string &, bool, const common_header_list &) {
|
|
||||||
throw std::runtime_error("download functionality is not enabled in this build");
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string common_docker_resolve_model(const std::string &) {
|
|
||||||
throw std::runtime_error("download functionality is not enabled in this build");
|
|
||||||
}
|
|
||||||
|
|
||||||
int common_download_file_single(const std::string &,
|
|
||||||
const std::string &,
|
|
||||||
const std::string &,
|
|
||||||
bool,
|
|
||||||
const common_header_list &) {
|
|
||||||
throw std::runtime_error("download functionality is not enabled in this build");
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // defined(LLAMA_USE_HTTPLIB)
|
|
||||||
|
|
||||||
std::vector<common_cached_model_info> common_list_cached_models() {
|
std::vector<common_cached_model_info> common_list_cached_models() {
|
||||||
std::vector<common_cached_model_info> models;
|
std::vector<common_cached_model_info> models;
|
||||||
const std::string cache_dir = fs_get_cache_directory();
|
const std::string cache_dir = fs_get_cache_directory();
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
HTTPLIB_VERSION = "f80864ca031932351abef49b74097c67f14719c6"
|
HTTPLIB_VERSION = "d4180e923f846b44a3d30acd938438d6e64fc9f6"
|
||||||
|
|
||||||
vendor = {
|
vendor = {
|
||||||
"https://github.com/nlohmann/json/releases/latest/download/json.hpp": "vendor/nlohmann/json.hpp",
|
"https://github.com/nlohmann/json/releases/latest/download/json.hpp": "vendor/nlohmann/json.hpp",
|
||||||
|
|||||||
@@ -28,10 +28,6 @@ target_link_libraries(${TARGET} PUBLIC common mtmd ${CMAKE_THREAD_LIBS_INIT})
|
|||||||
|
|
||||||
set(TARGET llama-server)
|
set(TARGET llama-server)
|
||||||
|
|
||||||
if (NOT LLAMA_HTTPLIB)
|
|
||||||
message(FATAL_ERROR "LLAMA_HTTPLIB is OFF, cannot build llama-server. Hint: to skip building server, set -DLLAMA_BUILD_SERVER=OFF")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(TARGET_SRCS
|
set(TARGET_SRCS
|
||||||
server.cpp
|
server.cpp
|
||||||
server-http.cpp
|
server-http.cpp
|
||||||
|
|||||||
74
vendor/cpp-httplib/httplib.cpp
vendored
74
vendor/cpp-httplib/httplib.cpp
vendored
@@ -1264,78 +1264,32 @@ int poll_wrapper(struct pollfd *fds, nfds_t nfds, int timeout) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
template <bool Read>
|
ssize_t select_impl(socket_t sock, short events, time_t sec,
|
||||||
ssize_t select_impl(socket_t sock, time_t sec, time_t usec) {
|
time_t usec) {
|
||||||
#ifdef __APPLE__
|
|
||||||
if (sock >= FD_SETSIZE) { return -1; }
|
|
||||||
|
|
||||||
fd_set fds, *rfds, *wfds;
|
|
||||||
FD_ZERO(&fds);
|
|
||||||
FD_SET(sock, &fds);
|
|
||||||
rfds = (Read ? &fds : nullptr);
|
|
||||||
wfds = (Read ? nullptr : &fds);
|
|
||||||
|
|
||||||
timeval tv;
|
|
||||||
tv.tv_sec = static_cast<long>(sec);
|
|
||||||
tv.tv_usec = static_cast<decltype(tv.tv_usec)>(usec);
|
|
||||||
|
|
||||||
return handle_EINTR([&]() {
|
|
||||||
return select(static_cast<int>(sock + 1), rfds, wfds, nullptr, &tv);
|
|
||||||
});
|
|
||||||
#else
|
|
||||||
struct pollfd pfd;
|
struct pollfd pfd;
|
||||||
pfd.fd = sock;
|
pfd.fd = sock;
|
||||||
pfd.events = (Read ? POLLIN : POLLOUT);
|
pfd.events = events;
|
||||||
|
pfd.revents = 0;
|
||||||
|
|
||||||
auto timeout = static_cast<int>(sec * 1000 + usec / 1000);
|
auto timeout = static_cast<int>(sec * 1000 + usec / 1000);
|
||||||
|
|
||||||
return handle_EINTR([&]() { return poll_wrapper(&pfd, 1, timeout); });
|
return handle_EINTR([&]() { return poll_wrapper(&pfd, 1, timeout); });
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t select_read(socket_t sock, time_t sec, time_t usec) {
|
ssize_t select_read(socket_t sock, time_t sec, time_t usec) {
|
||||||
return select_impl<true>(sock, sec, usec);
|
return select_impl(sock, POLLIN, sec, usec);
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t select_write(socket_t sock, time_t sec, time_t usec) {
|
ssize_t select_write(socket_t sock, time_t sec, time_t usec) {
|
||||||
return select_impl<false>(sock, sec, usec);
|
return select_impl(sock, POLLOUT, sec, usec);
|
||||||
}
|
}
|
||||||
|
|
||||||
Error wait_until_socket_is_ready(socket_t sock, time_t sec,
|
Error wait_until_socket_is_ready(socket_t sock, time_t sec,
|
||||||
time_t usec) {
|
time_t usec) {
|
||||||
#ifdef __APPLE__
|
|
||||||
if (sock >= FD_SETSIZE) { return Error::Connection; }
|
|
||||||
|
|
||||||
fd_set fdsr, fdsw;
|
|
||||||
FD_ZERO(&fdsr);
|
|
||||||
FD_ZERO(&fdsw);
|
|
||||||
FD_SET(sock, &fdsr);
|
|
||||||
FD_SET(sock, &fdsw);
|
|
||||||
|
|
||||||
timeval tv;
|
|
||||||
tv.tv_sec = static_cast<long>(sec);
|
|
||||||
tv.tv_usec = static_cast<decltype(tv.tv_usec)>(usec);
|
|
||||||
|
|
||||||
auto ret = handle_EINTR([&]() {
|
|
||||||
return select(static_cast<int>(sock + 1), &fdsr, &fdsw, nullptr, &tv);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (ret == 0) { return Error::ConnectionTimeout; }
|
|
||||||
|
|
||||||
if (ret > 0 && (FD_ISSET(sock, &fdsr) || FD_ISSET(sock, &fdsw))) {
|
|
||||||
auto error = 0;
|
|
||||||
socklen_t len = sizeof(error);
|
|
||||||
auto res = getsockopt(sock, SOL_SOCKET, SO_ERROR,
|
|
||||||
reinterpret_cast<char *>(&error), &len);
|
|
||||||
auto successful = res >= 0 && !error;
|
|
||||||
return successful ? Error::Success : Error::Connection;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Error::Connection;
|
|
||||||
#else
|
|
||||||
struct pollfd pfd_read;
|
struct pollfd pfd_read;
|
||||||
pfd_read.fd = sock;
|
pfd_read.fd = sock;
|
||||||
pfd_read.events = POLLIN | POLLOUT;
|
pfd_read.events = POLLIN | POLLOUT;
|
||||||
|
pfd_read.revents = 0;
|
||||||
|
|
||||||
auto timeout = static_cast<int>(sec * 1000 + usec / 1000);
|
auto timeout = static_cast<int>(sec * 1000 + usec / 1000);
|
||||||
|
|
||||||
@@ -1354,7 +1308,6 @@ Error wait_until_socket_is_ready(socket_t sock, time_t sec,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Error::Connection;
|
return Error::Connection;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_socket_alive(socket_t sock) {
|
bool is_socket_alive(socket_t sock) {
|
||||||
@@ -7138,17 +7091,6 @@ Server::process_request(Stream &strm, const std::string &remote_addr,
|
|||||||
res.version = "HTTP/1.1";
|
res.version = "HTTP/1.1";
|
||||||
res.headers = default_headers_;
|
res.headers = default_headers_;
|
||||||
|
|
||||||
#ifdef __APPLE__
|
|
||||||
// Socket file descriptor exceeded FD_SETSIZE...
|
|
||||||
if (strm.socket() >= FD_SETSIZE) {
|
|
||||||
Headers dummy;
|
|
||||||
detail::read_headers(strm, dummy);
|
|
||||||
res.status = StatusCode::InternalServerError_500;
|
|
||||||
output_error_log(Error::ExceedMaxSocketDescriptorCount, &req);
|
|
||||||
return write_response(strm, close_connection, req, res);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Request line and headers
|
// Request line and headers
|
||||||
if (!parse_request_line(line_reader.ptr(), req)) {
|
if (!parse_request_line(line_reader.ptr(), req)) {
|
||||||
res.status = StatusCode::BadRequest_400;
|
res.status = StatusCode::BadRequest_400;
|
||||||
@@ -12063,7 +12005,7 @@ bool get_cert_sans(cert_t cert, std::vector<SanEntry> &sans) {
|
|||||||
if (!names) return true; // No SANs is valid
|
if (!names) return true; // No SANs is valid
|
||||||
|
|
||||||
auto count = sk_GENERAL_NAME_num(names);
|
auto count = sk_GENERAL_NAME_num(names);
|
||||||
for (int i = 0; i < count; i++) {
|
for (decltype(count) i = 0; i < count; i++) {
|
||||||
auto gen = sk_GENERAL_NAME_value(names, i);
|
auto gen = sk_GENERAL_NAME_value(names, i);
|
||||||
if (!gen) continue;
|
if (!gen) continue;
|
||||||
|
|
||||||
|
|||||||
4
vendor/cpp-httplib/httplib.h
vendored
4
vendor/cpp-httplib/httplib.h
vendored
@@ -8,8 +8,8 @@
|
|||||||
#ifndef CPPHTTPLIB_HTTPLIB_H
|
#ifndef CPPHTTPLIB_HTTPLIB_H
|
||||||
#define CPPHTTPLIB_HTTPLIB_H
|
#define CPPHTTPLIB_HTTPLIB_H
|
||||||
|
|
||||||
#define CPPHTTPLIB_VERSION "0.31.0"
|
#define CPPHTTPLIB_VERSION "0.32.0"
|
||||||
#define CPPHTTPLIB_VERSION_NUM "0x001F00"
|
#define CPPHTTPLIB_VERSION_NUM "0x002000"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Platform compatibility check
|
* Platform compatibility check
|
||||||
|
|||||||
Reference in New Issue
Block a user