Explorar o código

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
ruki %!s(int64=3) %!d(string=hai) anos
pai
achega
f2d4d4d811

+ 231 - 0
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" $<TARGET_FILE:handshaker>)
+-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:$<TARGET_FILE: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 $<TARGET_FILE:bssl_shim>
+-              ${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
+-
+-  $<TARGET_OBJECTS:crypto_test_data>
+-  $<TARGET_OBJECTS:boringssl_gtest_main>
+-)
+-
+-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
+-
+-  $<TARGET_OBJECTS:boringssl_gtest_main>
+-)
+-
+-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)

+ 63 - 0
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)

+ 1 - 0
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)

+ 37 - 0
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)