-
Notifications
You must be signed in to change notification settings - Fork 426
feat: Windows support #2119
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
feat: Windows support #2119
Conversation
|
Very interesting, I had no idea that lld could link MinGW and MSVC objects together. This links against |
|
Mingw isn't used at all with this patch. Everything uses Visual Studio.
Locally, I even manage to run I also have a patch for Static PHP CLI, but it's not working because the PHP source code and Makefile on Windows doesn't support building a static version of |
That's the part I was missing, thank you! |
|
Gave it a shot and updated your initial post for instructions, however, once it attempts to serve a php file with |
|
Have you copied all the necessary DDLs in the same directory? |
|
Shouldn't be necessary with $env:PATH += ";$env:VCPKG_ROOT\installed\x64-windows\bin"
$env:PATH += ";C:\watcher-x86_64-pc-windows-msvc"
$env:PATH += ";C:\php-8.5.1-Win32-vs17-x64"Is anything else required? |
|
You must also add |
|
Same issue, I don't think it could be related to libraries anyway, as it would fail to run in the first place then. Shared libraries are (by default) loaded at initialisation time and we're not passing delayload arguments to the compilation. Log: ❯❯ frankenphp git:(windows) 21:46 .\frankenphp.exe php-server --root=./
2026/01/10 20:46:22.912 WARN admin admin endpoint disabled
2026/01/10 20:46:22.912 INFO tls.cache.maintenance started background certificate maintenance {"cache": "0x2e61d3850500"}
2026/01/10 20:46:22.912 WARN http.auto_https server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server {"server_name": "php", "http_port": 80}
2026/01/10 20:46:22.949 INFO frankenphp FrankenPHP started 🐘 {"php_version": "8.5.1", "num_threads": 64, "max_threads": 64}
2026/01/10 20:46:22.950 WARN http HTTP/2 skipped because it requires TLS {"network": "tcp", "addr": ":80"}
2026/01/10 20:46:22.950 WARN http HTTP/3 skipped because it requires TLS {"network": "tcp", "addr": ":80"}
2026/01/10 20:46:22.950 INFO http.log server running {"name": "php", "protocols": ["h1", "h2", "h3"]}
2026/01/10 20:46:22.951 INFO Caddy serving PHP app on :80
2026/01/10 20:46:22.953 INFO tls storage cleaning happened too recently; skipping for now {"storage": "FileStorage:C:\\Users\\m\\AppData\\Roaming\\Caddy", "instance": "489ade52-21ab-40c6-b18a-2932fb8eab4d", "try_again": "2026/01/11 20:46:22.953", "try_again_in": 86400}
2026/01/10 20:46:22.953 INFO tls finished cleaning storage units
❯❯ frankenphp git:(windows) 21:46Text files like an index.html page are served just fine. Only when php is attempted to be executed does the program simply stop. |
|
I didn't try the |
|
Could you also show me the content of your PHP script? |
|
Content of the php script: <?php
echo phpinfo();I haven't ran the test suite yet, but |
|
Here is a build I created locally: https://drive.google.com/file/d/1B09de1rERpRUN-bnAje0K2vHcwhVoDJa/view?usp=sharing On my computer, it runs Symfony without issue @henderkes. |
|
Thanks, I'll try this one and report back. Edit: it's working, but it was linked against 8.5.3-dev. I'll try to link against 8.5.1 again and see if I can get anywhere after the new commits. |
985e36b to
f374dab
Compare
|
@dunglas I got it working to build with xcaddy, but locally it fails to build without adding double quotes around the CustomVersion, which in turn leads to them being in the |
|
Works in CI, so the last things to do are tests and making zizmor happy, I'll leave those to you. 😁 |
|
Last idea I have is that we should perhaps compile in |
|
I'm not sure there is much gain to compile partially statically on Windows. However, that could be nice to have a full static binary with SPC, but there is more work to do. Thanks a lot for your work on the CI @henderkes, I'll finish this. |
|
I got a fully static binary working with spc, but the extension set is too limited as of now. It would be hundreds of hours to bring it (near) up to par with Linux and with the way windows distribution works, I don't think it's worth it. If anything, an installer would make more sense, that acts much like our package distributions and registers a service like IIS. |
|
Don't we rely on xcaddy to build in modules like mercure/vulcain/cbrotli/others without fetching them and using |
|
Until now, no. That's why we maintain the file in |
Closes #83 #880 #1286.
Working patch for Windows support.
Supports linking to the official PHP release (TS version).
Includes some work from #1286 (thanks @TenHian!!)
This patch allows using Visual Studio to compile the cgo code. To do so, it must be compiled with Go 1.26 (RC) with the following setup:
TODO: