From f2d4d4d81131ac9f5981b11fdb336f60b51bbf9d Mon Sep 17 00:00:00 2001 From: ruki Date: Sun, 9 Jan 2022 12:29:58 +0800 Subject: [PATCH] add boringssl and xquic (#832) * add boringssl * update go * fix boringssl * add xquic * Update xmake.lua * Update xmake.lua * Update xmake.lua * Update xmake.lua * Update xmake.lua * Update xmake.lua * Update xmake.lua * Update xmake.lua --- .../boringssl/patches/2021.12.29/cmake.patch | 231 ++++++++++++++++++ packages/b/boringssl/xmake.lua | 63 +++++ packages/g/go/xmake.lua | 1 + packages/x/xquic/xmake.lua | 37 +++ 4 files changed, 332 insertions(+) create mode 100644 packages/b/boringssl/patches/2021.12.29/cmake.patch create mode 100644 packages/b/boringssl/xmake.lua create mode 100644 packages/x/xquic/xmake.lua diff --git a/packages/b/boringssl/patches/2021.12.29/cmake.patch b/packages/b/boringssl/patches/2021.12.29/cmake.patch new file mode 100644 index 000000000..5644e07e0 --- /dev/null +++ b/packages/b/boringssl/patches/2021.12.29/cmake.patch @@ -0,0 +1,231 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 6c70b55f9..22878365c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -557,92 +557,5 @@ if(USE_CUSTOM_LIBCXX) + target_link_libraries(libcxx libcxxabi) + endif() + +-# Add minimal googletest targets. The provided one has many side-effects, and +-# googletest has a very straightforward build. +-add_library(boringssl_gtest third_party/googletest/src/gtest-all.cc) +-target_include_directories(boringssl_gtest PRIVATE third_party/googletest) +- +-include_directories(third_party/googletest/include) +- +-# Declare a dummy target to build all unit tests. Test targets should inject +-# themselves as dependencies next to the target definition. +-add_custom_target(all_tests) +- +-# On Windows, CRYPTO_TEST_DATA is too long to fit in command-line limits. +-# TODO(davidben): CMake 3.12 has a list(JOIN) command. Use that when we've +-# updated the minimum version. +-set(EMBED_TEST_DATA_ARGS "") +-foreach(arg ${CRYPTO_TEST_DATA}) +- set(EMBED_TEST_DATA_ARGS "${EMBED_TEST_DATA_ARGS}${arg}\n") +-endforeach() +-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/embed_test_data_args.txt" +- "${EMBED_TEST_DATA_ARGS}") +- +-add_custom_command( +- OUTPUT crypto_test_data.cc +- COMMAND ${GO_EXECUTABLE} run util/embed_test_data.go -file-list +- "${CMAKE_CURRENT_BINARY_DIR}/embed_test_data_args.txt" > +- "${CMAKE_CURRENT_BINARY_DIR}/crypto_test_data.cc" +- DEPENDS util/embed_test_data.go ${CRYPTO_TEST_DATA} +- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +- +-add_library(crypto_test_data OBJECT crypto_test_data.cc) +- + add_subdirectory(crypto) + add_subdirectory(ssl) +-add_subdirectory(ssl/test) +-add_subdirectory(tool) +-add_subdirectory(util/fipstools/cavp) +-add_subdirectory(util/fipstools/acvp/modulewrapper) +-add_subdirectory(decrepit) +- +-if(FUZZ) +- if(LIBFUZZER_FROM_DEPS) +- file(GLOB LIBFUZZER_SOURCES "util/bot/libFuzzer/*.cpp") +- add_library(Fuzzer STATIC ${LIBFUZZER_SOURCES}) +- # libFuzzer does not pass our aggressive warnings. It also must be built +- # without -fsanitize-coverage options or clang crashes. +- set_target_properties(Fuzzer PROPERTIES COMPILE_FLAGS "-Wno-shadow -Wno-format-nonliteral -Wno-missing-prototypes -fsanitize-coverage=0") +- endif() +- +- add_subdirectory(fuzz) +-endif() +- +-if(UNIX AND NOT APPLE AND NOT ANDROID) +- set(HANDSHAKER_ARGS "-handshaker-path" $) +-endif() +- +-if(FIPS) +- add_custom_target( +- acvp_tests +- COMMAND ${GO_EXECUTABLE} build -o ${CMAKE_BINARY_DIR}/acvptool +- boringssl.googlesource.com/boringssl/util/fipstools/acvp/acvptool +- COMMAND ${GO_EXECUTABLE} build -o ${CMAKE_BINARY_DIR}/testmodulewrapper +- boringssl.googlesource.com/boringssl/util/fipstools/acvp/acvptool/testmodulewrapper +- COMMAND cd util/fipstools/acvp/acvptool/test && +- ${GO_EXECUTABLE} run check_expected.go +- -tool ${CMAKE_BINARY_DIR}/acvptool +- -module-wrappers modulewrapper:$,testmodulewrapper:${CMAKE_BINARY_DIR}/testmodulewrapper +- -tests tests.json +- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +- DEPENDS modulewrapper +- USES_TERMINAL) +- +- add_custom_target( +- fips_specific_tests_if_any +- DEPENDS acvp_tests +- ) +-else() +- add_custom_target(fips_specific_tests_if_any) +-endif() +- +-add_custom_target( +- run_tests +- COMMAND ${GO_EXECUTABLE} run util/all_tests.go -build-dir +- ${CMAKE_BINARY_DIR} +- COMMAND cd ssl/test/runner && +- ${GO_EXECUTABLE} test -shim-path $ +- ${HANDSHAKER_ARGS} ${RUNNER_ARGS} +- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +- DEPENDS all_tests bssl_shim handshaker fips_specific_tests_if_any +- USES_TERMINAL) +diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt +index d9cfa5c51..1dc878597 100644 +--- a/crypto/CMakeLists.txt ++++ b/crypto/CMakeLists.txt +@@ -91,7 +91,6 @@ function(perlasm dest src) + endfunction() + + add_subdirectory(fipsmodule) +-add_subdirectory(test) + + if(FIPS_DELOCATE OR FIPS_SHARED) + SET_SOURCE_FILES_PROPERTIES(fipsmodule/bcm.o PROPERTIES EXTERNAL_OBJECT true) +@@ -472,96 +471,3 @@ endif() + if(USE_CUSTOM_LIBCXX) + target_link_libraries(crypto libcxx) + endif() +- +-# urandom_test is a separate binary because it needs to be able to observe the +-# PRNG initialisation, which means that it can't have other tests running before +-# it does. +-add_executable( +- urandom_test +- +- fipsmodule/rand/urandom_test.cc +-) +- +-target_link_libraries(urandom_test test_support_lib boringssl_gtest crypto) +- +-add_dependencies(urandom_test global_target) +-add_dependencies(all_tests urandom_test) +- +-add_executable( +- crypto_test +- +- abi_self_test.cc +- asn1/asn1_test.cc +- base64/base64_test.cc +- bio/bio_test.cc +- blake2/blake2_test.cc +- buf/buf_test.cc +- bytestring/bytestring_test.cc +- chacha/chacha_test.cc +- cipher_extra/aead_test.cc +- cipher_extra/cipher_test.cc +- cmac/cmac_test.cc +- compiler_test.cc +- conf/conf_test.cc +- constant_time_test.cc +- cpu_arm_linux_test.cc +- crypto_test.cc +- curve25519/ed25519_test.cc +- curve25519/spake25519_test.cc +- curve25519/x25519_test.cc +- ecdh_extra/ecdh_test.cc +- dh_extra/dh_test.cc +- digest_extra/digest_test.cc +- dsa/dsa_test.cc +- err/err_test.cc +- evp/evp_extra_test.cc +- evp/evp_test.cc +- evp/pbkdf_test.cc +- evp/scrypt_test.cc +- fipsmodule/aes/aes_test.cc +- fipsmodule/bn/bn_test.cc +- fipsmodule/ec/ec_test.cc +- fipsmodule/ec/p256-x86_64_test.cc +- fipsmodule/ecdsa/ecdsa_test.cc +- fipsmodule/md5/md5_test.cc +- fipsmodule/modes/gcm_test.cc +- fipsmodule/rand/ctrdrbg_test.cc +- fipsmodule/rand/fork_detect_test.cc +- fipsmodule/sha/sha_test.cc +- hkdf/hkdf_test.cc +- hpke/hpke_test.cc +- hmac_extra/hmac_test.cc +- hrss/hrss_test.cc +- impl_dispatch_test.cc +- lhash/lhash_test.cc +- obj/obj_test.cc +- pem/pem_test.cc +- pkcs7/pkcs7_test.cc +- pkcs8/pkcs8_test.cc +- pkcs8/pkcs12_test.cc +- poly1305/poly1305_test.cc +- pool/pool_test.cc +- rand_extra/rand_test.cc +- refcount_test.cc +- rsa_extra/rsa_test.cc +- self_test.cc +- stack/stack_test.cc +- siphash/siphash_test.cc +- test/file_test_gtest.cc +- thread_test.cc +- trust_token/trust_token_test.cc +- x509/x509_test.cc +- x509/x509_time_test.cc +- x509v3/tab_test.cc +- +- $ +- $ +-) +- +-add_dependencies(crypto_test global_target) +- +-target_link_libraries(crypto_test test_support_lib boringssl_gtest crypto) +-if(WIN32) +- target_link_libraries(crypto_test ws2_32) +-endif() +-add_dependencies(all_tests crypto_test) +diff --git a/ssl/CMakeLists.txt b/ssl/CMakeLists.txt +index 4f4abf8a4..2ee9b88fc 100644 +--- a/ssl/CMakeLists.txt ++++ b/ssl/CMakeLists.txt +@@ -46,20 +46,3 @@ add_dependencies(ssl global_target) + + target_link_libraries(ssl crypto) + +-add_executable( +- ssl_test +- +- span_test.cc +- ssl_test.cc +- ssl_c_test.c +- +- $ +-) +- +-add_dependencies(ssl_test global_target) +- +-target_link_libraries(ssl_test test_support_lib boringssl_gtest ssl crypto) +-if(WIN32) +- target_link_libraries(ssl_test ws2_32) +-endif() +-add_dependencies(all_tests ssl_test) diff --git a/packages/b/boringssl/xmake.lua b/packages/b/boringssl/xmake.lua new file mode 100644 index 000000000..a1c2713ab --- /dev/null +++ b/packages/b/boringssl/xmake.lua @@ -0,0 +1,63 @@ +package("boringssl") + set_homepage("https://boringssl.googlesource.com/boringssl") + set_description("A fork of OpenSSL that is designed to meet Google's needs.") + + add_urls("https://github.com/google/boringssl.git") + add_versions("2021.12.29", "d80f17d5c94b21c4fb2e82ee527bfe001b3553f2") + + add_patches("2021.12.29", path.join(os.scriptdir(), "patches", "2021.12.29", "cmake.patch"), "d8bb6312b87b8aad434ea3f9f4275f769af3cdbaab78adf400e8e3907443b505") + + add_deps("cmake", "go") + + if is_plat("linux") then + add_syslinks("pthread", "dl", "m") + elseif is_plat("windows") then + add_syslinks("advapi32") + add_deps("nasm") + end + add_links("ssl", "crypto") + + on_install("linux", "macosx", "windows", function (package) + import("net.fasturl") + local configs = {} + local proxyurls = {"https://goproxy.cn", "https://proxy.golang.org"} + fasturl.add(proxyurls) + proxyurls = fasturl.sort(proxyurls) + if #proxyurls > 0 then + os.setenv("GOPROXY", proxyurls[1]) + end + -- we need suppress "hidden symbol ... is referenced by DSO" + local cxflags + if not package:config("shared") and package:is_plat("linux") then + cxflags = "-DBORINGSSL_SHARED_LIBRARY" + end + table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) + table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF")) + io.replace("CMakeLists.txt", "-WX", "", {plain = true}) + import("package.tools.cmake").install(package, configs, {cxflags = cxflags, buildir = "build"}) + os.cp("include", package:installdir()) + if package:config("shared") then + if package:is_plat("windows") then + os.cp("build/ssl/*/ssl.dll", package:installdir("bin")) + os.cp("build/ssl/*/ssl.lib", package:installdir("lib")) + os.cp("build/crypto/*/crypto.dll", package:installdir("bin")) + os.cp("build/crypto/*/crypto.lib", package:installdir("lib")) + elseif package:is_plat("macosx") then + os.cp("build/ssl/libssl.dylib", package:installdir("lib")) + os.cp("build/crypto/libcrypto.dylib", package:installdir("lib")) + else + os.cp("build/ssl/libssl.so", package:installdir("lib")) + os.cp("build/crypto/libcrypto.so", package:installdir("lib")) + end + elseif package:is_plat("windows") then + os.cp("build/ssl/*/ssl.lib", package:installdir("lib")) + os.cp("build/crypto/*/crypto.lib", package:installdir("lib")) + else + os.cp("build/ssl/libssl.a", package:installdir("lib")) + os.cp("build/crypto/libcrypto.a", package:installdir("lib")) + end + end) + + on_test(function (package) + assert(package:has_cfuncs("SSL_new", {includes = "openssl/ssl.h"})) + end) diff --git a/packages/g/go/xmake.lua b/packages/g/go/xmake.lua index 0e6a38b07..e31d1a904 100644 --- a/packages/g/go/xmake.lua +++ b/packages/g/go/xmake.lua @@ -34,6 +34,7 @@ package("go") os.cp("lib", package:installdir()) os.cp("pkg", package:installdir()) os.cp("misc", package:installdir()) + os.cp("src", package:installdir()) end) on_test(function (package) diff --git a/packages/x/xquic/xmake.lua b/packages/x/xquic/xmake.lua new file mode 100644 index 000000000..114b67541 --- /dev/null +++ b/packages/x/xquic/xmake.lua @@ -0,0 +1,37 @@ +package("xquic") + set_homepage("https://github.com/alibaba/xquic") + set_description("A client and server implementation of QUIC and HTTP/3 as specified by the IETF") + set_license("Apache-2.0") + + add_urls("https://github.com/alibaba/xquic.git") + add_versions("2022.01.08", "837c493d51952cd842b815f7d60c88efbad3b9eb") + + add_deps("cmake", "boringssl") + + on_install("linux", "macosx", function (package) + local configs = {"-DSSL_TYPE=boringssl"} + if package:is_plat("macosx") then + table.insert(configs, "-DPLATFORM=mac") + end + table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) + table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF")) + io.replace("CMakeLists.txt", "${SSL_LIB_PATH}", "", {plain = true}) + io.replace("CMakeLists.txt", "-Werror", "", {plain = true}) + io.replace("CMakeLists.txt", "include_directories(${SSL_INC_PATH})", "", {plain = true}) + import("package.tools.cmake").install(package, configs, {buildir = "build", packagedeps = "boringssl"}) + os.cp("include", package:installdir()) + if package:config("shared") then + if package:is_plat("macosx") then + os.cp("build/*.dylib", package:installdir("lib")) + else + os.cp("build/*.so", package:installdir("lib")) + end + else + os.cp("build/*.a", package:installdir("lib")) + end + + end) + + on_test(function (package) + assert(package:has_cfuncs("xqc_engine_main_logic", {includes = "xquic/xquic.h"})) + end)