summaryrefslogtreecommitdiffstats
path: root/build/external
diff options
context:
space:
mode:
authorNathan Skrzypczak <nathan.skrzypczak@gmail.com>2019-03-19 13:57:31 +0100
committerFlorin Coras <florin.coras@gmail.com>2019-03-29 15:57:30 +0000
commit60f3e6547aa75a31fad1f78bea11c950cc30d63c (patch)
tree4df1f649f10272c5f276754d6b0dbecaaa08784a /build/external
parentdb4cae5d438e5114a19df38acbb9e1dd6c99fe3f (diff)
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 <nathan.skrzypczak@gmail.com>
Diffstat (limited to 'build/external')
-rw-r--r--build/external/Makefile7
-rw-r--r--build/external/packages.mk32
-rw-r--r--build/external/packages/quicly.mk42
-rw-r--r--build/external/patches/quicly/0001-cmake-install.patch57
4 files changed, 134 insertions, 4 deletions
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
@@ -72,9 +72,39 @@ $(B)/.$1.extract.ok: $(B)/.$1.download.ok
$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)