From 6ef012e204d91e00af1dab4b7a1f27d7b44cc48b Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 10 Apr 2026 16:15:07 +0800 Subject: [PATCH] Add ext-uv and libuv support on Windows --- config/pkg/lib/libuv.yml | 2 ++ src/Package/Extension/uv.php | 15 +++++++++++++++ src/Package/Library/libuv.php | 9 +++++++++ 3 files changed, 26 insertions(+) diff --git a/config/pkg/lib/libuv.yml b/config/pkg/lib/libuv.yml index 3c41906d..1548ebcd 100644 --- a/config/pkg/lib/libuv.yml +++ b/config/pkg/lib/libuv.yml @@ -9,3 +9,5 @@ libuv: license: MIT static-libs@unix: - libuv.a + static-libs@windows: + - libuv.lib diff --git a/src/Package/Extension/uv.php b/src/Package/Extension/uv.php index 869f4ad9..68a796ad 100644 --- a/src/Package/Extension/uv.php +++ b/src/Package/Extension/uv.php @@ -24,6 +24,21 @@ class uv extends PhpExtensionPackage } } + #[BeforeStage('php', [php::class, 'buildconfForWindows'], 'ext-uv')] + public function patchBeforeBuild(): void + { + FileSystem::replaceFileStr( + "{$this->getSourceDir()}/php_uv.c", + '#if !defined(PHP_WIN32) || defined(HAVE_SOCKET)', + '#if !defined(PHP_WIN32) || (defined(HAVE_SOCKETS) && !defined(COMPILE_DL_SOCKETS))', + ); + FileSystem::replaceFileStr( + "{$this->getSourceDir()}/config.w32", + 'CHECK_LIB("Ws2_32.lib","uv", PHP_UV);', + "CHECK_LIB(\"Ws2_32.lib\",\"uv\" , PHP_UV);\n\tCHECK_LIB(\"dbghelp.lib\",\"uv\", PHP_UV);", + ); + } + #[BeforeStage('ext-uv', [PhpExtensionPackage::class, 'makeForUnix'])] public function patchBeforeSharedMake(PhpExtensionPackage $pkg): bool { diff --git a/src/Package/Library/libuv.php b/src/Package/Library/libuv.php index ed8c5838..c27b499c 100644 --- a/src/Package/Library/libuv.php +++ b/src/Package/Library/libuv.php @@ -8,6 +8,7 @@ use StaticPHP\Attribute\Package\BuildFor; use StaticPHP\Attribute\Package\Library; use StaticPHP\Package\LibraryPackage; use StaticPHP\Runtime\Executor\UnixCMakeExecutor; +use StaticPHP\Runtime\Executor\WindowsCMakeExecutor; #[Library('libuv')] class libuv @@ -22,4 +23,12 @@ class libuv // patch pkgconfig $lib->patchPkgconfPrefix(['libuv-static.pc']); } + + #[BuildFor('Windows')] + public function buildWindows(LibraryPackage $lib): void + { + WindowsCMakeExecutor::create($lib) + ->addConfigureArgs('-DLIBUV_BUILD_SHARED=OFF') + ->build(); + } }