-
Notifications
You must be signed in to change notification settings - Fork 8
Reimplement REST interface using HTTP/2, HTTP3 #371
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
30f8505
533cae7
5e1e910
4d73ad6
e715d22
ec23b4f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,118 @@ | ||
# Build a static version of openssl to link into | ||
include(ExternalProject) | ||
include(GNUInstallDirs) | ||
|
||
set(OPENSSL_C_FLAGS "-O3 -march=x86-64-v3" CACHE STRING "OpenSSL custom CFLAGS" FORCE) | ||
set(OPENSSL_CXX_FLAGS "-O3 -march=x86-64-v3" CACHE STRING "OpenSSL custom CXXFLAGS" FORCE) | ||
set(OPENSSL_INSTALL_DIR "${CMAKE_BINARY_DIR}/openssl-install") | ||
add_library(OpenSSL::Crypto STATIC IMPORTED GLOBAL) | ||
add_library(OpenSSL::SSL STATIC IMPORTED GLOBAL) | ||
add_dependencies(OpenSSL::Crypto PUBLIC openssl-build) | ||
add_dependencies(OpenSSL::SSL PUBLIC openssl-build) | ||
set_target_properties(OpenSSL::Crypto PROPERTIES | ||
|
||
# Build custom OpenSSL with QUIC support | ||
ExternalProject_Add(OpenSslProject | ||
GIT_REPOSITORY https://github.com/openssl/openssl.git | ||
GIT_TAG openssl-3.5.0 # 3.5.0 required for server-side QUIC support | ||
GIT_SHALLOW ON | ||
BUILD_BYPRODUCTS ${OPENSSL_INSTALL_DIR}/lib64/libcrypto.a ${OPENSSL_INSTALL_DIR}/lib64/libssl.a | ||
CONFIGURE_COMMAND COMMAND ./Configure CFLAGS=${OPENSSL_C_FLAGS} CXXFLAGS=${OPENSSL_CXX_FLAGS} no-shared no-tests --prefix=${OPENSSL_INSTALL_DIR} --openssldir=${OPENSSL_INSTALL_DIR} linux-x86_64 | ||
UPDATE_COMMAND "" | ||
BUILD_COMMAND make -j | ||
INSTALL_COMMAND make install_sw # only installs software components (no docs, etc) | ||
BUILD_IN_SOURCE ON | ||
) | ||
|
||
add_library(openssl-crypto-static STATIC IMPORTED GLOBAL) | ||
add_dependencies(openssl-crypto-static OpenSslProject) | ||
set_target_properties(openssl-crypto-static PROPERTIES | ||
IMPORTED_LOCATION "${OPENSSL_INSTALL_DIR}/lib64/libcrypto.a" | ||
INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INSTALL_DIR}/include" | ||
) | ||
set_target_properties(OpenSSL::SSL PROPERTIES | ||
|
||
add_library(openssl-ssl-static STATIC IMPORTED GLOBAL) | ||
add_dependencies(openssl-ssl-static OpenSslProject) | ||
set_target_properties(openssl-ssl-static PROPERTIES | ||
IMPORTED_LOCATION "${OPENSSL_INSTALL_DIR}/lib64/libssl.a" | ||
INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INSTALL_DIR}/include" | ||
) | ||
get_target_property(libcryptoa OpenSSL::Crypto IMPORTED_LOCATION) | ||
get_target_property(libcryptoaloc OpenSSL::Crypto LOCATION) | ||
set(OPENSSL_C_FLAGS "-O3 -march=x86-64-v3" CACHE STRING "OpenSSL custom CFLAGS" FORCE) | ||
set(OPENSSL_CXX_FLAGS "-O3 -march=x86-64-v3" CACHE STRING "OpenSSL custom CXXFLAGS" FORCE) | ||
add_custom_command( | ||
OUTPUT ${OPENSSL_INSTALL_DIR}/lib64/libcrypto.a ${OPENSSL_INSTALL_DIR}/lib64/libssl.a | ||
COMMAND ${FETCHCONTENT_BASE_DIR}/openssl-source-src/Configure CFLAGS=${OPENSSL_C_FLAGS} CXXFLAGS=${OPENSSL_CXX_FLAGS} no-shared no-tests --prefix=${OPENSSL_INSTALL_DIR} --openssldir=${OPENSSL_INSTALL_DIR} linux-x86_64 | ||
COMMAND make -j | ||
COMMAND make install_sw # only installs software components (no docs, etc) | ||
COMMENT "Build openssl as a static library" | ||
WORKING_DIRECTORY ${FETCHCONTENT_BASE_DIR}/openssl-source-build | ||
|
||
option(ENABLE_NGHTTP_DEBUG "Enable verbose nghttp2 debug output" OFF) | ||
|
||
ExternalProject_Add(Nghttp2Project | ||
GIT_REPOSITORY https://github.com/nghttp2/nghttp2 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why via There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Using FetchContent_declare caused several issues with clashing target names (IIRC all the projects have a target "examples", for example), and also the various flags that need to be set would at least be confusing when set globally in the parent project. |
||
GIT_TAG v1.65.0 | ||
GIT_SHALLOW ON | ||
BUILD_BYPRODUCTS ${CMAKE_BINARY_DIR}/nghttp2-install/${CMAKE_INSTALL_LIBDIR}/libnghttp2.a | ||
UPDATE_COMMAND "" | ||
CMAKE_ARGS | ||
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/nghttp2-install | ||
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} | ||
-DENABLE_LIB_ONLY:BOOL=ON | ||
-DENABLE_HTTP3:BOOL=OFF | ||
-DENABLE_DEBUG:BOOL=${ENABLE_NGHTTP_DEBUG} | ||
-DBUILD_STATIC_LIBS:BOOL=ON | ||
-BUILD_SHARED_LIBS:BOOL=OFF | ||
-DENABLE_DOC:BOOL=OFF | ||
) | ||
|
||
add_library(nghttp2-static STATIC IMPORTED GLOBAL) | ||
set_target_properties(nghttp2-static PROPERTIES | ||
IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/nghttp2-install/${CMAKE_INSTALL_LIBDIR}/libnghttp2.a" | ||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR}/nghttp2-install/include" | ||
) | ||
add_custom_target(openssl-build ALL | ||
DEPENDS ${OPENSSL_INSTALL_DIR}/lib64/libcrypto.a ${OPENSSL_INSTALL_DIR}/lib64/libssl.a | ||
add_dependencies(nghttp2-static Nghttp2Project) | ||
|
||
ExternalProject_Add(Nghttp3Project | ||
GIT_REPOSITORY https://github.com/ngtcp2/nghttp3.git | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same here.... |
||
GIT_TAG v1.10.1 | ||
GIT_SHALLOW ON | ||
BUILD_BYPRODUCTS ${CMAKE_BINARY_DIR}/nghttp3-install/${CMAKE_INSTALL_LIBDIR}/libnghttp3.a | ||
UPDATE_COMMAND "" | ||
CMAKE_ARGS | ||
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/nghttp3-install | ||
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} | ||
-DENABLE_LIB_ONLY:BOOL=ON | ||
-DENABLE_DEBUG:BOOL=${ENABLE_NGHTTP_DEBUG} | ||
-DBUILD_STATIC_LIBS:BOOL=ON | ||
-DBUILD_SHARED_LIBS:BOOL=OFF | ||
-DENABLE_DOC:BOOL=OFF | ||
) | ||
|
||
ExternalProject_Add(NgTcp2Project | ||
GIT_REPOSITORY https://github.com/ngtcp2/ngtcp2.git | ||
GIT_TAG v1.13.0 | ||
GIT_SHALLOW ON | ||
PREFIX ${CMAKE_BINARY_DIR}/ngtcp2-install | ||
BUILD_BYPRODUCTS ${CMAKE_BINARY_DIR}/ngtcp2-install/${CMAKE_INSTALL_LIBDIR}/libngtcp2.a ${CMAKE_BINARY_DIR}/ngtcp2-install/${CMAKE_INSTALL_LIBDIR}/libngtcp2_crypto_ossl.a | ||
UPDATE_COMMAND "" | ||
CMAKE_ARGS | ||
-DOPENSSL_ROOT_DIR:PATH=${OPENSSL_INSTALL_DIR} | ||
-DENABLE_OPENSSL:BOOL=ON | ||
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/ngtcp2-install | ||
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} | ||
-DENABLE_LIB_ONLY:BOOL=ON | ||
-DENABLE_DEBUG:BOOL=${ENABLE_NGHTTP_DEBUG} | ||
-DBUILD_STATIC_LIBS:BOOL=ON | ||
-DBUILD_SHARED_LIBS:BOOL=OFF | ||
DEPENDS openssl-crypto-static openssl-ssl-static | ||
) | ||
|
||
add_library(ngtcp2-static STATIC IMPORTED GLOBAL) | ||
set_target_properties(ngtcp2-static PROPERTIES | ||
IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/ngtcp2-install/${CMAKE_INSTALL_LIBDIR}/libngtcp2.a" | ||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR}/ngtcp2-install/include" | ||
) | ||
add_dependencies(ngtcp2-static NgTcp2Project) | ||
|
||
add_library(ngtcp2-crypto-ossl-static STATIC IMPORTED GLOBAL) | ||
set_target_properties(ngtcp2-crypto-ossl-static PROPERTIES | ||
IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/ngtcp2-install/${CMAKE_INSTALL_LIBDIR}/libngtcp2_crypto_ossl.a" | ||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR}/ngtcp2-install/include" | ||
) | ||
add_dependencies(ngtcp2-crypto-ossl-static NgTcp2Project) | ||
|
||
add_library(nghttp3-static STATIC IMPORTED GLOBAL) | ||
set_target_properties(nghttp3-static PROPERTIES | ||
IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/nghttp3-install/${CMAKE_INSTALL_LIBDIR}/libnghttp3.a" | ||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR}/nghttp3-install/include" | ||
) | ||
add_dependencies(nghttp3-static Nghttp3Project) | ||
|
||
add_library(mustache INTERFACE) | ||
target_include_directories(mustache INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/kainjow) | ||
|
@@ -38,6 +124,7 @@ FetchContent_Declare( | |
GIT_TAG v4.3.5 # latest as of 2025-03-27 | ||
) | ||
set(ZMQ_BUILD_TESTS OFF CACHE BOOL "Build the tests for ZeroMQ") | ||
|
||
# suppress warnings for missing zeromq dependencies by disabling some features | ||
set(WITH_TLS OFF CACHE BOOL "TLS support for ZeroMQ WebSockets") | ||
set(BUILD_SHARED OFF CACHE BOOL "Build cmake shared library") | ||
|
@@ -56,12 +143,6 @@ FetchContent_Declare( | |
GIT_TAG v1.2.12 # latest v1.2.12 | ||
) | ||
|
||
FetchContent_Declare( | ||
openssl-source | ||
GIT_REPOSITORY https://github.com/openssl/openssl.git | ||
GIT_TAG openssl-3.4.1 | ||
) | ||
|
||
FetchContent_MakeAvailable(cpp-httplib zeromq openssl-source) | ||
FetchContent_MakeAvailable(cpp-httplib zeromq) | ||
|
||
list(APPEND CMAKE_MODULE_PATH ${catch2_SOURCE_DIR}/contrib) # replace contrib by extras for catch2 v3.x.x |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-march=x86-64-v3
should not be hard-coded...There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That was there before, so I left it. Should remove
-march
alltogether?