Index: llvm/CMakeLists.txt =================================================================== --- llvm/CMakeLists.txt +++ llvm/CMakeLists.txt @@ -393,6 +393,8 @@ set(LLVM_ENABLE_CURL "ON" CACHE STRING "Use libcurl for the HTTP client if available. Can be ON, OFF, or FORCE_ON") +set(LLVM_ENABLE_CPP_HTTPLIB "ON" CACHE STRING "Use cpp-httplib HTTP server library if available. Can be ON, OFF, or FORCE_ON") + set(LLVM_Z3_INSTALL_DIR "" CACHE STRING "Install directory of the Z3 solver.") option(LLVM_ENABLE_Z3_SOLVER Index: llvm/cmake/config-ix.cmake =================================================================== --- llvm/cmake/config-ix.cmake +++ llvm/cmake/config-ix.cmake @@ -6,6 +6,7 @@ include(CheckIncludeFile) include(CheckLibraryExists) include(CheckSymbolExists) +include(CheckCXXSymbolExists) include(CheckFunctionExists) include(CheckStructHasMember) include(CheckCCompilerFlag) @@ -180,6 +181,33 @@ set(LLVM_ENABLE_CURL "${HAVE_CURL}") endif() +if(LLVM_ENABLE_CPP_HTTPLIB) + if(LLVM_ENABLE_CPP_HTTPLIB STREQUAL FORCE_ON) + find_package(httplib REQUIRED) + else() + find_package(httplib) + endif() + if(HTTPLIB_FOUND) + # Check if the "httplib" we found is usable; for example there may be another + # library with the same name. + cmake_push_check_state() + list(APPEND CMAKE_REQUIRED_LIBRARIES ${HTTPLIB_LIBRARY}) + check_cxx_symbol_exists(CPPHTTPLIB_HTTPLIB_H ${HTTPLIB_HEADER_PATH} HAVE_HTTPLIB_HEADER) + check_cxx_symbol_exists(httplib::default_socket_options ${HTTPLIB_HEADER_PATH} HAVE_HTTPLIB_DEFAULT_SOCKET_OPTIONS) + check_cxx_symbol_exists(httplib::detail::find_content_type ${HTTPLIB_HEADER_PATH} HAVE_HTTPLIB_FIND_CONTENT_TYPE) + if(HAVE_HTTPLIB_HEADER AND HAVE_HTTPLIB_DEFAULT_SOCKET_OPTIONS AND HAVE_HTTPLIB_FIND_CONTENT_TYPE) + set(HAVE_HTTPLIB YES) + else() + set(HAVE_HTTPLIB NO) + endif() + cmake_pop_check_state() + if(LLVM_ENABLE_CPP_HTTPLIB STREQUAL FORCE_ON AND NOT HAVE_HTTPLIB) + message(FATAL_ERROR "Failed to configure cpp-httplib") + endif() + endif() + set(LLVM_ENABLE_CPP_HTTPLIB "${HAVE_HTTPLIB}") +endif() + # Don't look for these libraries if we're using MSan, since uninstrumented third # party code may call MSan interceptors like strlen, leading to false positives. if(NOT LLVM_USE_SANITIZER MATCHES "Memory.*")