From 60f3e6547aa75a31fad1f78bea11c950cc30d63c Mon Sep 17 00:00:00 2001 From: Nathan Skrzypczak Date: Tue, 19 Mar 2019 13:57:31 +0100 Subject: Integrate first QUIC protocol implementation Currently supports on single stream exposed through standard internal APIs Based on libquicly & picotls by h2o Change-Id: I7bc1ec0e399d1fb02bfd1da91aa7410076d08d14 Signed-off-by: Nathan Skrzypczak --- build/external/Makefile | 7 +-- build/external/packages.mk | 32 +++++++++++- build/external/packages/quicly.mk | 42 ++++++++++++++++ .../patches/quicly/0001-cmake-install.patch | 57 ++++++++++++++++++++++ 4 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 build/external/packages/quicly.mk create mode 100644 build/external/patches/quicly/0001-cmake-install.patch (limited to 'build') diff --git a/build/external/Makefile b/build/external/Makefile index 084d694e88c..0c2d837aee0 100644 --- a/build/external/Makefile +++ b/build/external/Makefile @@ -30,6 +30,7 @@ I := $(INSTALL_DIR) include packages.mk include packages/nasm.mk include packages/ipsec-mb.mk +include packages/quicly.mk include packages/dpdk.mk include packages/rdma-core.mk @@ -38,7 +39,7 @@ clean: @rm -rf $(B) $(I) .PHONY: install -install: dpdk-install rdma-core-install +install: dpdk-install rdma-core-install quicly-install .PHONY: config config: dpdk-config rdma-core-config @@ -63,7 +64,7 @@ deb/debian/changelog: Makefile $(DEV_DEB): deb/debian/changelog @cd deb && dpkg-buildpackage -b -uc -us - git clean -fdx deb + @git clean -ffdx deb build-deb: $(DEV_DEB) @@ -107,7 +108,7 @@ $(DEV_RPM): Makefile rpm/vpp-ext-deps.spec --define "_release $(PKG_SUFFIX)" \ $(CURDIR)/rpm/vpp-ext-deps.spec mv rpm/RPMS/$(RPM_ARCH)/*.rpm . - @git clean -fdx rpm + @git clean -ffdx rpm build-rpm: $(DEV_RPM) diff --git a/build/external/packages.mk b/build/external/packages.mk index 005c2a958b2..d1126db7475 100644 --- a/build/external/packages.mk +++ b/build/external/packages.mk @@ -71,10 +71,40 @@ $(B)/.$1.extract.ok: $(B)/.$1.download.ok .PHONY: $1-extract $1-extract: $(B)/.$1.extract.ok +############################################################################## +# Git clone & checkout +############################################################################## + +$(B)/.$1.clone.ok: + $$(call h1,"Cloning $1 $($1_repository)") + @mkdir -p $$($1_src_dir) + @git clone --recursive $$($1_repository) $$($1_src_dir) +ifneq ($$($1_version),) + $$(call h1,"Checking out $1 $($1_version)") + cd $$($1_src_dir) && git -c advice.detachedHead=false checkout $$($1_version) + cd $$($1_src_dir) && git submodule update --init +endif + @touch $$@ + +.PHONY: $1-clone +$1-clone: $(B)/.$1.clone.ok + +############################################################################## +# Fetch source : clone or extract +############################################################################## + +ifeq ($$($1_repository),) +$(B)/.$1.fetchsrc.ok: $(B)/.$1.extract.ok + @touch $$@ +else +$(B)/.$1.fetchsrc.ok: $(B)/.$1.clone.ok + @touch $$@ +endif + ############################################################################## # Patch ############################################################################## -$(B)/.$1.patch.ok: $(B)/.$1.extract.ok +$(B)/.$1.patch.ok: $(B)/.$1.fetchsrc.ok $$(call h1,"patching $1 $($1_version)") ifneq ($$(wildcard $$($1_patch_dir)/*.patch),) @for f in $$($1_patch_dir)/*.patch ; do \ diff --git a/build/external/packages/quicly.mk b/build/external/packages/quicly.mk new file mode 100644 index 00000000000..246c73fb02d --- /dev/null +++ b/build/external/packages/quicly.mk @@ -0,0 +1,42 @@ +# Copyright (c) 2019 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +quicly_repository := https://github.com/h2o/quicly.git +quicly_version := f25b70d37f8974af9cc48a4a565d13a9cdc5fd75 +quicly_patch_dir := $(CURDIR)/patches/quicly + +picotls_build_dir := $(B)/build-picotls + +define quicly_build_cmds + @cd $(quicly_build_dir) && \ + cmake -DCMAKE_INSTALL_PREFIX:PATH=$(quicly_install_dir) \ + $(quicly_src_dir) > $(quicly_build_log) + @$(MAKE) $(MAKE_ARGS) -C $(quicly_build_dir) > $(quicly_build_log) + + @mkdir -p $(picotls_build_dir) + @cd $(picotls_build_dir) && \ + cmake -DCMAKE_INSTALL_PREFIX:PATH=$(quicly_install_dir) \ + $(quicly_src_dir)/deps/picotls > $(quicly_build_log) +endef + +define quicly_config_cmds + @true +endef + +define quicly_install_cmds + @$(MAKE) $(MAKE_ARGS) -C $(quicly_build_dir) install > $(quicly_install_log) + @$(MAKE) $(MAKE_ARGS) -C $(picotls_build_dir) install > $(quicly_install_log) +endef + + +$(eval $(call package,quicly)) diff --git a/build/external/patches/quicly/0001-cmake-install.patch b/build/external/patches/quicly/0001-cmake-install.patch new file mode 100644 index 00000000000..3ac90c7d0aa --- /dev/null +++ b/build/external/patches/quicly/0001-cmake-install.patch @@ -0,0 +1,57 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 202cc52..b5c2bee 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -40,6 +40,8 @@ SET(UNITTEST_SOURCE_FILES + t/stream-concurrency.c + t/test.c) + ++SET(CMAKE_POSITION_INDEPENDENT_CODE ON) ++ + ADD_LIBRARY(quicly ${QUICLY_LIBRARY_FILES}) + + ADD_EXECUTABLE(cli ${PICOTLS_OPENSSL_FILES} src/cli.c) +@@ -50,6 +52,16 @@ TARGET_LINK_LIBRARIES(test.t quicly ${OPENSSL_LIBRARIES} ${CMAKE_DL_LIBS}) + + ADD_EXECUTABLE(udpfw t/udpfw.c) + ++INSTALL ( ++ DIRECTORY ${CMAKE_SOURCE_DIR}/include/ ++ DESTINATION include ++ FILES_MATCHING PATTERN "*.h") ++ ++INSTALL(TARGETS quicly ++ RUNTIME DESTINATION bin ++ LIBRARY DESTINATION lib ++ ARCHIVE DESTINATION lib) ++ + ADD_CUSTOM_TARGET(check env BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} prove --exec "sh -c" -v ${CMAKE_CURRENT_BINARY_DIR}/*.t t/*.t + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS cli test.t) +Submodule deps/picotls contains untracked content +Submodule deps/picotls contains modified content +diff --git a/deps/picotls/CMakeLists.txt b/deps/picotls/CMakeLists.txt +index cda6aad..62b23b7 100644 +--- a/deps/picotls/CMakeLists.txt ++++ b/deps/picotls/CMakeLists.txt +@@ -5,6 +5,7 @@ PROJECT(picotls) + + FIND_PACKAGE(PkgConfig REQUIRED) + ++SET(CMAKE_POSITION_INDEPENDENT_CODE ON) + SET(CMAKE_C_FLAGS "-std=c99 -Wall -O2 -g ${CC_WARNING_FLAGS} ${CMAKE_C_FLAGS}") + INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR} deps/cifra/src/ext deps/cifra/src deps/micro-ecc deps/picotest include) + SET(MINICRYPTO_LIBRARY_FILES +@@ -97,3 +98,12 @@ IF (BUILD_FUZZER) + + + ENDIF() ++ ++INSTALL (DIRECTORY ${CMAKE_SOURCE_DIR}/include/ ++ DESTINATION include ++ FILES_MATCHING PATTERN "*.h") ++ ++INSTALL(TARGETS picotls-core picotls-openssl ++ RUNTIME DESTINATION bin ++ LIBRARY DESTINATION lib ++ ARCHIVE DESTINATION lib) -- cgit 1.2.3-korg