aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/msquic
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/msquic')
-rw-r--r--vcpkg/ports/msquic/avoid-w-invalid-unevaluated-string.patch69
-rw-r--r--vcpkg/ports/msquic/cmake4.patch12
-rw-r--r--vcpkg/ports/msquic/exports-for-msh3.diff56
-rw-r--r--vcpkg/ports/msquic/fix-comparing-system-processor-with-win32.patch22
-rw-r--r--vcpkg/ports/msquic/fix-install.patch24
-rw-r--r--vcpkg/ports/msquic/fix-uwp-crt.patch17
-rw-r--r--vcpkg/ports/msquic/no-werror.patch22
-rw-r--r--vcpkg/ports/msquic/portfile.cmake123
-rw-r--r--vcpkg/ports/msquic/uwp-link-libs.diff47
-rw-r--r--vcpkg/ports/msquic/vcpkg.json35
10 files changed, 427 insertions, 0 deletions
diff --git a/vcpkg/ports/msquic/avoid-w-invalid-unevaluated-string.patch b/vcpkg/ports/msquic/avoid-w-invalid-unevaluated-string.patch
new file mode 100644
index 0000000..9ad0a24
--- /dev/null
+++ b/vcpkg/ports/msquic/avoid-w-invalid-unevaluated-string.patch
@@ -0,0 +1,69 @@
+diff --git a/src/core/mtu_discovery.c b/src/core/mtu_discovery.c
+index a40c05c..8891efc 100644
+--- a/src/core/mtu_discovery.c
++++ b/src/core/mtu_discovery.c
+@@ -34,8 +34,8 @@ Abstract:
+ #include "mtu_discovery.c.clog.h"
+ #endif
+
+-CXPLAT_STATIC_ASSERT(CXPLAT_MAX_MTU >= QUIC_DPLPMTUD_DEFAULT_MAX_MTU, L"Default max must not be more than max");
+-CXPLAT_STATIC_ASSERT(QUIC_DPLPMTUD_MIN_MTU <= QUIC_DPLPMTUD_DEFAULT_MIN_MTU, L"Default min must not be less than min");
++CXPLAT_STATIC_ASSERT(CXPLAT_MAX_MTU >= QUIC_DPLPMTUD_DEFAULT_MAX_MTU, "Default max must not be more than max");
++CXPLAT_STATIC_ASSERT(QUIC_DPLPMTUD_MIN_MTU <= QUIC_DPLPMTUD_DEFAULT_MIN_MTU, "Default min must not be less than min");
+
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ static
+diff --git a/src/core/packet_builder.h b/src/core/packet_builder.h
+index 97d6079..912ce89 100644
+--- a/src/core/packet_builder.h
++++ b/src/core/packet_builder.h
+@@ -158,7 +158,7 @@ typedef struct QUIC_PACKET_BUILDER {
+
+ CXPLAT_STATIC_ASSERT(
+ sizeof(QUIC_PACKET_BUILDER) < 1024,
+- L"Packet builder should be small enough to fit on the stack.");
++ "Packet builder should be small enough to fit on the stack.");
+
+ //
+ // Initializes the packet builder for general use.
+diff --git a/src/core/quicdef.h b/src/core/quicdef.h
+index 219ef33..07956b5 100644
+--- a/src/core/quicdef.h
++++ b/src/core/quicdef.h
+@@ -240,10 +240,10 @@ typedef struct QUIC_RX_PACKET QUIC_RX_PACKET;
+ #define QUIC_MAX_RANGE_ACK_PACKETS 0x800 // 2048
+ #define QUIC_MAX_RANGE_DECODE_ACKS 0x1000 // 4096
+
+-CXPLAT_STATIC_ASSERT(IS_POWER_OF_TWO(QUIC_MAX_RANGE_ALLOC_SIZE), L"Must be power of two");
+-CXPLAT_STATIC_ASSERT(IS_POWER_OF_TWO(QUIC_MAX_RANGE_DUPLICATE_PACKETS), L"Must be power of two");
+-CXPLAT_STATIC_ASSERT(IS_POWER_OF_TWO(QUIC_MAX_RANGE_ACK_PACKETS), L"Must be power of two");
+-CXPLAT_STATIC_ASSERT(IS_POWER_OF_TWO(QUIC_MAX_RANGE_DECODE_ACKS), L"Must be power of two");
++CXPLAT_STATIC_ASSERT(IS_POWER_OF_TWO(QUIC_MAX_RANGE_ALLOC_SIZE), "Must be power of two");
++CXPLAT_STATIC_ASSERT(IS_POWER_OF_TWO(QUIC_MAX_RANGE_DUPLICATE_PACKETS), "Must be power of two");
++CXPLAT_STATIC_ASSERT(IS_POWER_OF_TWO(QUIC_MAX_RANGE_ACK_PACKETS), "Must be power of two");
++CXPLAT_STATIC_ASSERT(IS_POWER_OF_TWO(QUIC_MAX_RANGE_DECODE_ACKS), "Must be power of two");
+
+ //
+ // Minimum MTU allowed to be configured. Must be able to fit a
+@@ -300,7 +300,7 @@ CXPLAT_STATIC_ASSERT(QUIC_INITIAL_PACKET_LENGTH >= QUIC_MIN_INITIAL_PACKET_LENGT
+
+ CXPLAT_STATIC_ASSERT(
+ QUIC_DEFAULT_DISCONNECT_TIMEOUT <= QUIC_MAX_DISCONNECT_TIMEOUT,
+- L"Default disconnect timeout should always be less than max");
++ "Default disconnect timeout should always be less than max");
+
+ //
+ // The default connection idle timeout (in milliseconds).
+diff --git a/src/core/range.h b/src/core/range.h
+index b6d2cc0..ca6d3cd 100644
+--- a/src/core/range.h
++++ b/src/core/range.h
+@@ -21,7 +21,7 @@ typedef struct QUIC_SUBRANGE {
+
+ } QUIC_SUBRANGE;
+
+-CXPLAT_STATIC_ASSERT(IS_POWER_OF_TWO(sizeof(QUIC_SUBRANGE)), L"Must be power of two");
++CXPLAT_STATIC_ASSERT(IS_POWER_OF_TWO(sizeof(QUIC_SUBRANGE)), "Must be power of two");
+
+ typedef struct QUIC_RANGE_SEARCH_KEY {
+
diff --git a/vcpkg/ports/msquic/cmake4.patch b/vcpkg/ports/msquic/cmake4.patch
new file mode 100644
index 0000000..e495242
--- /dev/null
+++ b/vcpkg/ports/msquic/cmake4.patch
@@ -0,0 +1,12 @@
+diff --git a/submodules/CMakeLists.txt b/submodules/CMakeLists.txt
+index b0f0e2d1ee..1fa98fa430 100644
+--- a/submodules/CMakeLists.txt
++++ b/submodules/CMakeLists.txt
+@@ -257,7 +257,6 @@ else()
+ message(ERROR "WTF ${CX_PLATFORM} ${CMAKE_TARGET_ARCHITECTURE}")
+ set(OPENSSL_CONFIG_CMD ${CMAKE_CURRENT_SOURCE_DIR}/${QUIC_OPENSSL}/config)
+ endif()
+- list(APPEND OPENSSL_CONFIG_FLAGS -isysroot ${CMAKE_OSX_SYSROOT})
+ if(SDK_NAME)
+ list(APPEND OPENSSL_CONFIG_FLAGS "-m${SDK_NAME}-version-min=${DEPLOYMENT_TARGET}")
+ elseif(CMAKE_OSX_DEPLOYMENT_TARGET)
diff --git a/vcpkg/ports/msquic/exports-for-msh3.diff b/vcpkg/ports/msquic/exports-for-msh3.diff
new file mode 100644
index 0000000..2daf4bc
--- /dev/null
+++ b/vcpkg/ports/msquic/exports-for-msh3.diff
@@ -0,0 +1,56 @@
+diff --git a/src/bin/darwin/exports.txt b/src/bin/darwin/exports.txt
+index e90b06e..c221d2c 100644
+--- a/src/bin/darwin/exports.txt
++++ b/src/bin/darwin/exports.txt
+@@ -1,2 +1,6 @@
+ _MsQuicOpenVersion
+ _MsQuicClose
++_CxPlatGetSelfSignedCert
++_CxPlatFreeSelfSignedCert
++_CxPlatLogAssert
++_quic_bugcheck
+diff --git a/src/bin/linux/exports.txt b/src/bin/linux/exports.txt
+index e11806a..424c443 100644
+--- a/src/bin/linux/exports.txt
++++ b/src/bin/linux/exports.txt
+@@ -1,5 +1,9 @@
+ msquic
+ {
+ global: MsQuicOpenVersion; MsQuicClose;
++ CxPlatGetSelfSignedCert;
++ CxPlatFreeSelfSignedCert;
++ CxPlatLogAssert;
++ quic_bugcheck;
+ local: *;
+ };
+diff --git a/src/bin/linux/init.c b/src/bin/linux/init.c
+index 29bfa14..61bbc48 100644
+--- a/src/bin/linux/init.c
++++ b/src/bin/linux/init.c
+@@ -9,8 +9,15 @@ Abstract:
+
+ --*/
+
++#define QUIC_TEST_APIS 1
+ #include "quic_platform.h"
+
++void MsQuickChainLoadPlatformSymbolsNoOp()
++{
++ QUIC_CREDENTIAL_CONFIG* SelfSignedCertParams = (QUIC_CREDENTIAL_CONFIG*)CxPlatGetSelfSignedCert(CXPLAT_SELF_SIGN_CERT_USER, FALSE, NULL);
++ CxPlatFreeSelfSignedCert(SelfSignedCertParams);
++}
++
+ void
+ MsQuicLibraryLoad(
+ void
+diff --git a/src/bin/winuser/msquic.def.in b/src/bin/winuser/msquic.def.in
+index afaed5d..fa7d19a 100644
+--- a/src/bin/winuser/msquic.def.in
++++ b/src/bin/winuser/msquic.def.in
+@@ -3,3 +3,6 @@ LIBRARY @QUIC_LIBRARY_NAME@
+ EXPORTS
+ MsQuicOpenVersion
+ MsQuicClose
++ CxPlatGetSelfSignedCert
++ CxPlatFreeSelfSignedCert
++ CxPlatLogAssert
diff --git a/vcpkg/ports/msquic/fix-comparing-system-processor-with-win32.patch b/vcpkg/ports/msquic/fix-comparing-system-processor-with-win32.patch
new file mode 100644
index 0000000..3f4f12e
--- /dev/null
+++ b/vcpkg/ports/msquic/fix-comparing-system-processor-with-win32.patch
@@ -0,0 +1,22 @@
+diff --git a/submodules/CMakeLists.txt b/submodules/CMakeLists.txt
+index a6c592951..0a0ddf0f8 100644
+--- a/submodules/CMakeLists.txt
++++ b/submodules/CMakeLists.txt
+@@ -62,7 +62,7 @@ if (WIN32)
+ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN64-ARM")
+ elseif (${SYSTEM_PROCESSOR} STREQUAL "arm")
+ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN32-ARM")
+- elseif (${SYSTEM_PROCESSOR} STREQUAL "win32")
++ elseif (${SYSTEM_PROCESSOR} STREQUAL "x86")
+ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN32-ONECORE")
+ elseif (${SYSTEM_PROCESSOR} STREQUAL "x64" OR ${SYSTEM_PROCESSOR} STREQUAL "amd64")
+ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN64A-ONECORE")
+@@ -75,7 +75,7 @@ if (WIN32)
+ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN64-ARM")
+ elseif (${SYSTEM_PROCESSOR} STREQUAL "arm")
+ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN32-ARM")
+- elseif (${SYSTEM_PROCESSOR} STREQUAL "win32")
++ elseif (${SYSTEM_PROCESSOR} STREQUAL "x86")
+ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN32")
+ elseif (${SYSTEM_PROCESSOR} STREQUAL "x64" OR ${SYSTEM_PROCESSOR} STREQUAL "amd64")
+ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN64A")
diff --git a/vcpkg/ports/msquic/fix-install.patch b/vcpkg/ports/msquic/fix-install.patch
new file mode 100644
index 0000000..9ffb36f
--- /dev/null
+++ b/vcpkg/ports/msquic/fix-install.patch
@@ -0,0 +1,24 @@
+diff --git a/src/bin/CMakeLists.txt b/src/bin/CMakeLists.txt
+index 18048e3..4fcd161 100644
+--- a/src/bin/CMakeLists.txt
++++ b/src/bin/CMakeLists.txt
+@@ -11,6 +11,7 @@ endif()
+
+ if(BUILD_SHARED_LIBS)
+ add_library(msquic SHARED ${SOURCES})
++ target_include_directories(msquic PUBLIC $<INSTALL_INTERFACE:include>)
+ target_link_libraries(msquic PRIVATE core msquic_platform inc warnings logging base_link main_binary_link_args)
+ set_target_properties(msquic PROPERTIES OUTPUT_NAME ${QUIC_LIBRARY_NAME})
+ if (NOT WIN32)
+@@ -261,7 +262,10 @@ if(WIN32)
+ endif()
+
+ if(BUILD_SHARED_LIBS)
+- install(TARGETS msquic msquic_platform inc logging_inc warnings main_binary_link_args ${OTHER_TARGETS} EXPORT msquic DESTINATION lib)
++ install(TARGETS msquic EXPORT msquic
++ RUNTIME DESTINATION bin
++ ARCHIVE DESTINATION lib
++ LIBRARY DESTINATION lib)
+ else()
+ install(FILES ${QUIC_STATIC_LIBRARY} DESTINATION lib)
+ endif()
diff --git a/vcpkg/ports/msquic/fix-uwp-crt.patch b/vcpkg/ports/msquic/fix-uwp-crt.patch
new file mode 100644
index 0000000..1eb3f74
--- /dev/null
+++ b/vcpkg/ports/msquic/fix-uwp-crt.patch
@@ -0,0 +1,17 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 3f8f4d58f..df689627c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -598,9 +598,9 @@ if(WIN32)
+ endif()
+
+ if (NOT QUIC_STATIC_LINK_CRT AND NOT QUIC_STATIC_LINK_PARTIAL_CRT)
+- # We are using dynamic linking. Ensure that only the release version of CRT is used.
+- message(STATUS "Configuring for release version of dynamically linked CRT")
+- set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
++ # We are using dynamic linking. Ensure that only the dynamic CRT is used.
++ message(STATUS "Configuring for dynamically linked CRT")
++ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
+ endif()
+
+ else() #!WIN32
diff --git a/vcpkg/ports/msquic/no-werror.patch b/vcpkg/ports/msquic/no-werror.patch
new file mode 100644
index 0000000..1c2cec2
--- /dev/null
+++ b/vcpkg/ports/msquic/no-werror.patch
@@ -0,0 +1,22 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 1010458..cc7ac39 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -201,7 +201,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${QUIC_OUTPUT_DIR})
+ set(QUIC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/inc)
+
+ if (WIN32)
+- set(QUIC_WARNING_FLAGS /WX /W4 /sdl /wd4206 CACHE INTERNAL "")
++ set(QUIC_WARNING_FLAGS /W4 /sdl /wd4206 CACHE INTERNAL "")
+ set(QUIC_COMMON_FLAGS "")
+
+ include(CheckCCompilerFlag)
+@@ -305,7 +305,7 @@ else()
+ if (HAS_SYSCTL)
+ list(APPEND QUIC_COMMON_DEFINES HAS_SYSCTL)
+ endif()
+- set(QUIC_WARNING_FLAGS -Werror -Wall -Wextra -Wformat=2 -Wno-type-limits
++ set(QUIC_WARNING_FLAGS -Wall -Wextra -Wformat=2 -Wno-type-limits
+ -Wno-unknown-pragmas -Wno-multichar -Wno-missing-field-initializers
+ CACHE INTERNAL "")
+ if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0)
diff --git a/vcpkg/ports/msquic/portfile.cmake b/vcpkg/ports/msquic/portfile.cmake
new file mode 100644
index 0000000..a4b8926
--- /dev/null
+++ b/vcpkg/ports/msquic/portfile.cmake
@@ -0,0 +1,123 @@
+# Upstream supports static linkage, but the port doesn't:
+# - There is a vendored fork of OpenSSL, needed for QUIC.
+# - Exported config needs fixes.
+vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY)
+
+vcpkg_from_github(
+ OUT_SOURCE_PATH QUIC_SOURCE_PATH
+ REPO microsoft/msquic
+ REF "v${VERSION}"
+ SHA512 1dca477f62484988c4f74d80a671560a48e8ed60602189a4066f337b13786528f38a86437881538089bf47b5db3d228cb006cae298f27b574850612181ee00d9
+ HEAD_REF master
+ PATCHES
+ fix-install.patch # Adjust install path of build outputs
+ fix-uwp-crt.patch # https://github.com/microsoft/msquic/pull/4373
+ fix-comparing-system-processor-with-win32.patch # https://github.com/microsoft/msquic/pull/4374
+ uwp-link-libs.diff
+ exports-for-msh3.diff
+ no-werror.patch
+ avoid-w-invalid-unevaluated-string.patch
+ cmake4.patch
+)
+
+set(QUIC_TLS "schannel")
+if("0-rtt" IN_LIST FEATURES)
+ set(QUIC_TLS "openssl3")
+ vcpkg_from_github(
+ OUT_SOURCE_PATH OPENSSL_SOURCE_PATH
+ REPO quictls/openssl
+ REF openssl-3.1.7-quic1
+ SHA512 230f48a4ef20bfd492b512bd53816a7129d70849afc1426e9ce813273c01884d5474552ecaede05231ca354403f25e2325c972c9c7950ae66dae310800bd19e7
+ HEAD_REF openssl-3.1.7+quic
+ )
+ if(NOT EXISTS "${QUIC_SOURCE_PATH}/submodules/openssl3/Configure")
+ file(REMOVE_RECURSE "${QUIC_SOURCE_PATH}/submodules/openssl3")
+ file(RENAME "${OPENSSL_SOURCE_PATH}" "${QUIC_SOURCE_PATH}/submodules/openssl3")
+ endif()
+endif()
+
+vcpkg_from_github(
+ OUT_SOURCE_PATH XDP_WINDOWS
+ REPO microsoft/xdp-for-windows
+ REF v1.0.2
+ SHA512 1b26487fa79c8796d4b0d5e09f4fc9acb003d8e079189ec57a36ff03c9c2620829106fdbc4780e298872826f3a97f034d40e04d00a77ded97122874d13bfb145
+ HEAD_REF main
+)
+if(NOT EXISTS "${QUIC_SOURCE_PATH}/submodules/xdp-for-windows/published/external")
+ # headers only
+ file(REMOVE_RECURSE "${QUIC_SOURCE_PATH}/submodules/xdp-for-windows")
+ file(COPY "${XDP_WINDOWS}/published/external" DESTINATION "${QUIC_SOURCE_PATH}/submodules/xdp-for-windows/published")
+endif()
+
+vcpkg_find_acquire_program(PERL)
+get_filename_component(PERL_EXE_PATH "${PERL}" DIRECTORY)
+vcpkg_add_to_path("${PERL_EXE_PATH}")
+
+if(VCPKG_HOST_IS_WINDOWS)
+ vcpkg_find_acquire_program(JOM)
+ cmake_path(GET JOM PARENT_PATH jom_dir)
+ vcpkg_add_to_path("${jom_dir}")
+else()
+ find_program(MAKE make)
+ cmake_path(GET MAKE PARENT_PATH make_dir)
+ vcpkg_add_to_path("${make_dir}")
+endif()
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_find_acquire_program(NASM)
+ cmake_path(GET NASM PARENT_PATH nasm_dir)
+ vcpkg_add_to_path("${nasm_dir}")
+endif()
+
+string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" QUIC_BUILD_SHARED)
+string(COMPARE EQUAL "${VCPKG_CRT_LINKAGE}" "static" STATIC_CRT)
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${QUIC_SOURCE_PATH}"
+ OPTIONS
+ -DQUIC_SOURCE_LINK=OFF
+ -DQUIC_TLS=${QUIC_TLS}
+ -DQUIC_USE_SYSTEM_LIBCRYPTO=OFF
+ -DQUIC_BUILD_PERF=OFF
+ -DQUIC_BUILD_TEST=OFF
+ "-DQUIC_BUILD_SHARED=${QUIC_BUILD_SHARED}"
+ "-DQUIC_STATIC_LINK_CRT=${STATIC_CRT}"
+ "-DQUIC_STATIC_LINK_PARTIAL_CRT=${STATIC_CRT}"
+ "-DQUIC_UWP_BUILD=${VCPKG_TARGET_IS_UWP}"
+)
+
+vcpkg_cmake_install()
+vcpkg_cmake_config_fixup()
+vcpkg_copy_pdbs()
+
+set(platform "")
+if(VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_IOS)
+ set(platform "CX_PLATFORM_DARWIN")
+elseif(NOT VCPKG_TARGET_IS_WINDOWS)
+ set(platform "CX_PLATFORM_LINUX")
+endif()
+if(platform)
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/quic_platform.h"
+ "#elif ${platform}"
+ "#elif 1
+#ifndef ${platform}
+#define ${platform}
+#endif")
+elseif(VCPKG_TARGET_IS_UWP)
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/quic_platform.h"
+ "#elif _WIN32"
+ "#elif 1
+#ifndef QUIC_UWP_BUILD
+#define QUIC_UWP_BUILD
+#endif
+#ifndef QUIC_RESTRICTED_BUILD
+#define QUIC_RESTRICTED_BUILD
+#endif")
+endif()
+
+file(REMOVE_RECURSE
+ "${CURRENT_PACKAGES_DIR}/debug/include"
+ "${CURRENT_PACKAGES_DIR}/debug/share"
+)
+
+vcpkg_install_copyright(FILE_LIST "${QUIC_SOURCE_PATH}/LICENSE" "${QUIC_SOURCE_PATH}/THIRD-PARTY-NOTICES")
diff --git a/vcpkg/ports/msquic/uwp-link-libs.diff b/vcpkg/ports/msquic/uwp-link-libs.diff
new file mode 100644
index 0000000..3dc6892
--- /dev/null
+++ b/vcpkg/ports/msquic/uwp-link-libs.diff
@@ -0,0 +1,47 @@
+diff --git a/src/inc/CMakeLists.txt b/src/inc/CMakeLists.txt
+index 48edebd..0a59ee6 100644
+--- a/src/inc/CMakeLists.txt
++++ b/src/inc/CMakeLists.txt
+@@ -40,7 +40,7 @@ endif()
+
+ if(WIN32)
+ if(QUIC_UWP_BUILD)
+- target_link_libraries(base_link INTERFACE OneCore ws2_32 ntdll)
++ target_link_libraries(base_link INTERFACE OneCoreUap ws2_32 ntdll)
+ elseif(QUIC_GAMECORE_BUILD)
+ target_link_libraries(base_link INTERFACE ntdll advapi32)
+ if(NOT QUIC_EXTERNAL_TOOLCHAIN)
+diff --git a/src/platform/CMakeLists.txt b/src/platform/CMakeLists.txt
+index 4a573ae..6fb5887 100644
+--- a/src/platform/CMakeLists.txt
++++ b/src/platform/CMakeLists.txt
+@@ -60,7 +60,9 @@ if("${CX_PLATFORM}" STREQUAL "windows")
+ msquic_platform
+ PUBLIC
+ wbemuuid)
++ if(NOT QUIC_UWP_BUILD)
+ target_link_libraries(msquic_platform PUBLIC winmm)
++ endif()
+ elseif(QUIC_LINUX_XDP_ENABLED)
+ find_library(NL_LIB nl-3)
+ find_library(NL_ROUTE_LIB nl-route-3)
+diff --git a/submodules/CMakeLists.txt b/submodules/CMakeLists.txt
+index 4bf8117..4468b19 100644
+--- a/submodules/CMakeLists.txt
++++ b/submodules/CMakeLists.txt
+@@ -59,13 +59,13 @@ if (WIN32)
+ if (QUIC_UWP_BUILD)
+ # Translate target architecture into corresponding OpenSSL build flag
+ if (${SYSTEM_PROCESSOR} STREQUAL "arm64")
+- set(QUIC_OPENSSL_WIN_ARCH "VC-WIN64-ARM")
++ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN64-ARM-UWP")
+ elseif (${SYSTEM_PROCESSOR} STREQUAL "arm")
+ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN32-ARM")
+ elseif (${SYSTEM_PROCESSOR} STREQUAL "x86")
+ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN32-ONECORE")
+ elseif (${SYSTEM_PROCESSOR} STREQUAL "x64" OR ${SYSTEM_PROCESSOR} STREQUAL "amd64")
+- set(QUIC_OPENSSL_WIN_ARCH "VC-WIN64A-ONECORE")
++ set(QUIC_OPENSSL_WIN_ARCH "VC-WIN64A-UWP")
+ else()
+ message(FATAL_ERROR "Unknown Generator Platform ${SYSTEM_PROCESSOR}")
+ endif()
diff --git a/vcpkg/ports/msquic/vcpkg.json b/vcpkg/ports/msquic/vcpkg.json
new file mode 100644
index 0000000..c9ba094
--- /dev/null
+++ b/vcpkg/ports/msquic/vcpkg.json
@@ -0,0 +1,35 @@
+{
+ "name": "msquic",
+ "version": "2.4.8",
+ "port-version": 1,
+ "description": "Cross-platform, C implementation of the IETF QUIC protocol",
+ "homepage": "https://github.com/microsoft/msquic",
+ "license": "MIT",
+ "supports": "!mingw & !(static & staticcrt)",
+ "dependencies": [
+ {
+ "name": "msquic",
+ "features": [
+ "0-rtt"
+ ],
+ "platform": "!windows"
+ },
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ }
+ ],
+ "features": {
+ "0-rtt": {
+ "description": [
+ "Enable 0-RTT connection support.",
+ "This feature requires the use of (a fork of) OpenSSL 3 also on Windows."
+ ],
+ "license": "Apache-2.0"
+ }
+ }
+}