frankenphp icon indicating copy to clipboard operation
frankenphp copied to clipboard

[test] about franken on windows

Open TenHian opened this issue 1 year ago • 21 comments

Describe you feature request

I've build a frankenphp.exe on windows

After modifying some code in php-src and some code in c-thread-pool and some code in frankenphp, I came up with a windows version of minimal frankenphp(barely tested). It still uses dynamic links now. Maybe in the future I'll modify it to make it static (larger change). It now does not contain any php extensions, only the core functionality.

Barely tested

I ran some basic tests on the php-cli, like some scripts that only use the core extension. And ran phpinfo on php-server. However these tests are minimal. So I recalled php-src/run-tests.php.

Hassles

As comprehensive as these tests are, they're not ready to run straight away, and it looks like I'm going to have to make some modifications to it(frankenphp php-cli is different from php.exe). So I read the script. Then it tells me at line 2300+, "OK, we've taken care of all the pre-conditions, now we should run the tests!". When I reached this point, I muttered to myself, "Wait, buddy, what were the prerequisites we dealt with before?". This script is pretty good, honestly. But its two big big functions and numerous pre-conditions made me dizzy. I'd even like to see what it those .phpt have to test and write a script myself. This will less suffering.

And more

#83 #420 Now I understand why some people give up after trying for a while.

End

I need to take a nap for a while. Anyway, I will persist on it. If you have any ideas about testing franken's integrity on Windows, kick me.

TenHian avatar Jun 20 '24 06:06 TenHian

Well done. I think you can upload a binary package thus we can test it.

wwccss avatar Jun 21 '24 00:06 wwccss

Thank you very much for working on this! Could you give us the steps you followed?

dunglas avatar Jun 21 '24 07:06 dunglas

Well done. I think you can upload a binary package thus we can test it.

https://drive.google.com/drive/folders/12niHlETBT_Inb3XE2QKkoRdro_7YpTIh

The demo product is larger than 25MB, so I put it on google drive first. It also need to make libwinpthread-1.dll in the same dir of frankenphp.exe, which could be find in \mingw64\bin after msys2 installed.

TenHian avatar Jun 21 '24 08:06 TenHian

Thank you very much for working on this! Could you give us the steps you followed?

It takes a while to organize the code, and right now it's implemented in an ugly way. And it relies on the following to run up.

  1. The mingw-w64 gcc is able to use the .dll compiled by MSVC. In practice, functions that follow the calling conventions __cdecl __stdcall __fastcall can be called. And functions that follow __thiscall __vectorcall can not be called. The amount of code that needs to be modified is greatly reduced because of this.
  2. Alter Makefile and small portion of SAPI embed code to get php8embed.dll.
  3. Remove or replace some MSVC unique features, like __forceinline __assume, etc.
  4. Handling OS differences, for example SIGUSR1 is used in thpool_pause in C-Thread-Pool, but mingw-w64 gcc doesn't support this, thanks to franken doesn't need it. Other cases will be more complicated.
  5. Modify the flags passed to cgo.

The exact steps and code come later.

TenHian avatar Jun 21 '24 08:06 TenHian

Could building against https://github.com/jart/cosmopolitan be helpful in this scenario?

mudevai avatar Jun 25 '24 14:06 mudevai

Could building against https://github.com/jart/cosmopolitan be helpful in this scenario?

Cool project. I'll see if it bridges to cgo, after I port run-tests.php to frankenphp. And I'll let you know if I make any progress on it.

TenHian avatar Jun 28 '24 02:06 TenHian

Build frankenphp on windows

Build tool-chain

Make sure that you have a development environment could make php source build complete(buildconf & configure & nmake), by follow php windows build manal([PHP: internals:windows:stepbystepbuild_sdk_2](https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2) and [php SDK README](https://github.com/php/php-sdk-binary-tools/blob/master/README.md)). You coud check it work by next few commands.

# CMD that in php SDK environment
cd php-src\x64\Release_TS
php -i 

How I setup php SDK

Install visual studio 2022

You can also install visual studio 2019 to follow php windows build manal strictly.

If not, install vs2022, make sure you follow [php SDK README #Requirements](https://github.com/php/php-sdk-binary-tools/blob/master/README.md#Requirements), install the module that needed. Next, install the other tools mention by [php SDK README ##Other tools](https://github.com/php/php-sdk-binary-tools/blob/master/README.md#other-tools). Most of them could installed by package manager, and few of them need to install by hand.

Set up php SDK

# recommand use powershell, the windows default one.
git clone https://github.com/php/php-sdk-binary-tools.git c:\php-sdk
cd C:\php-sdk
git checkout php-sdk-2.2.0
phpsdk-vs16-x64.bat
# now in CMD that in php SDK environment, after execute .bat above.
# CMD that in php SDK environment
phpsdk_buildtree phpdev
# now in C:\php-sdk\phpdev\vs16\x64
git clone https://github.com/php/php-src.git
cd php-src
phpsdk_deps -b 8.3 -u
git checkout php-8.3.7
git checkout -b d8.3.7
buildconf
configure
nmake
cd x64\Release_TS
php -i
# now in C:\php-sdk\phpdev\vs16\x64
git clone https://github.com/php/php-src.git
cd php-src
git checkout php-8.3.7
git checkout -b d8.3.7
buildconf
configure
nmake
cd x64\Release_TS
php -i

If its output like it should to be, you PHP SDK is complete.

Build php libs and headers

If you follow the step ##How I setup php SDK, you need clean repository.

# CMD that in php SDK environment
cd C:\php-sdk\phpdev\vs16\x64\php-src
nmake clean-all

Clone fputils and apply php-patch

# CMD that in php SDK environment
cd
git clone https://github.com/TenHian/fputils.git
cd php-src
cp -r C:\fputils\php-patch ./
git apply --stat php-patch\*.patch
git apply --check php-patch\*.patch
git am --abort
git am php-patch\*.patch
git log

configure, nmake, nmake build-devel

# CMD that in php SDK environment
# if you first to build run `buildconf`
# in C:\php-sdk\phpdev\vs16\x64\php-src
configure --disable-all --enable-zts --enable-embed --enable-cli --disable-opcache-jit --without-pcre-jit --enable-session --with-mysqlnd --enable-pdo --with-pdo-mysql
# I wanted to write this paragraph as a bat script, but .bat is shit.
# Makefile path in this command is a example
cd C:\fputils
frankenphp.exe php-cli modify-makefile.php "C:\php-sdk\phpdev\vs16\x64\php-src\Makefile"
nmake
nmake build-devel

We need php8ts.dll php8embed.dll in php-src\x64\Release_TS and headers under php-src\x64\Release_TS\php-8.3.7-devel-vs16-x64\include .

And you could also do some checks on those dlls, ensure that the symbols what we need is exported.

# CMD that in php SDK environment
cd C:\php-sdk\phpdev\vs16\x64\php-src\x64\Release_TS
dumpbin /exports php8ts.dll
dumpbin /exports php8embed.dll

Prepare Msys2 environment

Click [msys2-x86_64-20240507.exe](https://github.com/msys2/msys2-installer/releases/download/2024-05-07/msys2-x86_64-20240507.exe) dowload and install it. We use environment MINGW64/MSYS2.

Install basic tools

# mingw64/msys2 bash
pacman -S git
pacman -S vim
pacman -S make
pacman -S wget

Install gcc

# mingw64/msys2 bash
pacman -U https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-gcc-13.2.0-6-any.pkg.tar.zst

Setup go

# mingw64/msys2 bash
cd
mv /c/fputils/go /mingw64/lib
cp /c/fputils/go/bin/*.exe /mingw64/bin

Set go environment variables

# mingw64/msys2 bash
vim ~/.bashrc

Add the following two lines to your .bashrc.

# ~/.bashrc
export GOROOT=/mingw64/lib/go
export GOPATH=C:\\Users\\your user name\\go

then

# mingw64/msys2 bash
source ~/.bashrc

If you feel some go env is wrong, just modify it adapt to your environment. Mine blow:

set GO111MODULE=on
set GOARCH=amd64
set GOBIN=C:\Users\admin\go\bin
set GOCACHE=C:\Users\admin\AppData\Local\go-build
set GOENV=C:\Users\admin\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\admin\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\admin\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:/msys64/mingw64/lib/go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=C:\msys64\mingw64\lib\go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.22.2
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\msys64\tmp\go-build3468928067=/tmp/go-build -gno-record-gcc-switches

Install brotli

# mingw64/msys2 bash
pacman -S mingw-w64-x86_64-brotli

Frankenphp dependencies

Set libs

Copy your php8ts.dll and php8embed.dll into /usr/local/lib , my php-src path is "C:\php-sdk\phpdev\vs16\x64\php-src", I should execute:

# migw64/msys2 bash
cp /c/php-sdk/phpdev/vs16/x64/php-src/x64/Release_TS/*.dll /usr/local/lib

Copy your libbrotlicommon.a libbrotlidec.a libbrotlienc.a to /usr/local/lib, my command is:

# mingww64/msys2 bash
cp /mingw64/lib/libbrotlicommon.a /mingw64/lib/libbrotlidec.a /mingw64/lib/libbrotlienc.a /usr/local/lib

Set headers

Copy all things that under your php-src/x64/Release_TS/php-8.3.7-devel-vs16-x64/inlude to /usr/local/include/php, my command is:

# mingww64/msys2 bash
cp /c/php-sdk/phpdev/vs16/x64/php-src/x64/Release_TS/php-8.3.7-devel-vs16-x64/include/* /usr/local/include/php

then modify /usr/local/include/php/main/php.h

// orign line 95
typedef int pid_t;
// modify it to
typedef long long pid_t;

Prepare and build frankenphp

Clone and make new branch

# mingw64/msys2 bash
cd
git clone https://github.com/dunglas/frankenphp.git
cd frankenphp
git checkout v1.1.5
git checkout -b d1.1.5

Patch

# mingw64/msys2 bash
# in ~/frankenphp
cp -r /c/fputils/fp-patch ./
git am --abort
git am fp-patch/*.patch

Build

If your msys2 has installed in default path, and you followed my step, now you can build.

# mingw64/msys2 bash
cd ~/frankenphp
cd caddy/frankenphp
make build
# for clean
make clean

If not, like you installed msys2 in some where other, check the ~/frankenphp/caddy/frankenphp/Makefile.

Run demo

Ok, we got frankenphp built, now we could run some demo.

Phpinfo

Time for a classic session.

Copy you frankenphp.exe to a new path. And copy php8ts.dll php8embed.dll. Like this:

# mingw64/msys2 bash
tree phpinfo/

output:

phpinfo
├── frankenphp.exe
├── index.php
├── php8embed.dll
└── php8ts.dll

index.php has phpinfo. Then run server:

# mingw64/msys2 bash
./frankenphp php-server

Now access 127.0.0.1:80 .

Adminer

Adminer is an opensource, singal file, mutli-db-supported db manager. Its nice to use it as a demo.

# mingw64/msys2 bash
wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php

If you follow steps above, the exts we have now are just right for running adminer. And steps same to ##phpinfo, just rename adminer.php to index.php.

Zentao PMS

Zentao PMS is an opensource project management software, a lit bit more complicated than adminer. Its also need more php extensions, this section want to make frankenphp on windows to server bigger project.

Rebuild php-src

We need more php exts to supprot zentao pms, so rebuild php-src.

If you have closed terminal that build php-src, you should inital it again.

cd C:\php-sdk
phpsdk-vs16-x64.bat
# now in CMD that in php SDK environment, after execute .bat above.
cd phpdev\vs16\x64\php-src
nmake clean-all
configure --disable-all --enable-zts --enable-embed --enable-cli --disable-opcache-jit --without-pcre-jit --enable-session --with-mysqlnd --enable-pdo --with-pdo-mysql --enable-filter --enable-mbstring --enable-zlib --with-gd --with-iconv --with-openssl --with-curl --enable-ctype
cd c:\fputils
frankenphp.exe php-cli modify-makefile.php "C:\php-sdk\phpdev\vs16\x64\php-src\Makefile"
nmake
nmake build-devel

Then, follow the section #Frankenphp dependencies.

Rebuild frankenphp

# mingw64/msys2 bash
cd ~/frankenphp/caddy/frankenphp
make clean
make build

Run Zentao PMS

# mingw64/msys2 bash
mkdir ~/zentao
cd zentao
wget https://github.com/easysoft/zentaopms/archive/refs/tags/zentaopms_18.12.tar.gz
tar -zxvf zentaopms_18.12.tar.gz
cp ~/frankenphp/caddy/frankenphp/frankenphp.exe ./
cp /usr/local/lib/*.dll ./
# copy dll that need by php8ts.dll
cp /c/php-sdk/phpdev/vs16/x64/deps/bin/libcrypto-3-x64.dll ./
cp /c/php-sdk/phpdev/vs16/x64/deps/bin/libssh2.dll ./
cp /c/php-sdk/phpdev/vs16/x64/deps/bin/libssl-3-x64.dll ./
cp /c/php-sdk/phpdev/vs16/x64/deps/bin/nghttp2.dll ./
# copy extension php_openssl
mkdir ext
cp /c/php-sdk/phpdev/vs16/x64/php-src/x64/Release_TS/php_openssl.dll ./ext/
vim php.ini
# >> add 2 line
# extension_dir="C:\msys64\home\*your username*\zentao\ext"
# extension=php_openssl.dll
# >> 2 line end
# run zentao pms
./frankenphp.exe php-server --root zentaopms/www

Now you will see install page.

Test

I've modified the php-src/run-tests.php to fit frankenphp, like frankenphp no need to run sapi tests. So far I've only tested frankenphp with no ext. Even so, I didn't modify run-tests.php to the point where it adapts perfectly to frankenphp, there still some tests failed but not frankenphp's problem. Modify run-tests.php is a boring job.

Rebuild php with no ext

If you have closed terminal that build php-src, you should inital it again.

cd C:\php-sdk
phpsdk-vs16-x64.bat
# now in CMD that in php SDK environment, after execute .bat above.
cd phpdev\vs16\x64\php-src
nmake clean-all
configure --disable-all --enable-zts --enable-embed --enable-cli --disable-opcache-jit --without-pcre-jit
cd c:\fputils
frankenphp.exe php-cli modify-makefile.php "C:\php-sdk\phpdev\vs16\x64\php-src\Makefile"
nmake
nmake build-devel

Then, follow the section #Frankenphp dependencies.

Rebuild frankenphp

# mingw64/msys2 bash
cd ~/frankenphp/caddy/frankenphp
make clean
make build

Copy files

Copy frankenphp.exe php8ts.dll php8embed.dll into php-src

# mingw64/msys2 bash
cp ~/frankenphp/caddy/frankenphp/frankenphp.exe /c/php-sdk/phpdev/vs16/x64/php-src
cp /c/php-sdk/phpdev/vs16/x64/php-src/x64/Release_TS/*.dll /c/php-sdk/phpdev/vs16/x64/php-src

Make patch

If follow section #(Build php libs and headers) you already use all patches. If not the patch that modify is 0002-modify-run-tests.php.patch .

Run-tests

# mingw64/msys2 bash
cd /c/php-sdk/phpdev/vs16/x64/php-src
./frankenphp php-cli run-tests.php

I remember 89% passed.

TenHian avatar Jul 22 '24 05:07 TenHian

@TenHian Did you manage to make it work with MySQL or PostgreSQL? Could you make the binary available for download?

insinfo avatar Oct 12 '24 20:10 insinfo

Hey, I tried to use the instruction from @TenHian and PHP docs, but I ended all the time in incompatible binary version error:

 ---> Running in 086c5df22aaa
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.11.42
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************
Rebuilding configure.js
Now run 'configure --help'
ERROR: Incompatible binary tools version. Please consult
https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2

Microsoft (R) Program Maintenance Utility Version 14.29.30157.0
Copyright (C) Microsoft Corporation.  All rights reserved.

NMAKE : fatal error U1064: MAKEFILE not found and no target specified
Stop.

To make it reproducable, I did my testing in a Dockerfile. Maybe someone could tell what is the problem or use it in some other way. Here is my Dockerfile:

# Source: https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2
# https://hub.docker.com/r/microsoft/windows-servercore
FROM mcr.microsoft.com/windows/servercore:ltsc2022@sha256:87837eac4a78e1c67a6f6db1333a57a1a39207549c689905bd69cce40d063d5d

# Set environment variables to configure Chocolatey
ENV ChocolateyUseWindowsCompression=false

# Install Chocolatey
RUN powershell -Command \
    $ErrorActionPreference = 'Stop'; \
    Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing -OutFile install.ps1; \
    ./install.ps1; \
    Remove-Item -Force install.ps1

# Install build dependencies
RUN choco install git --version 2.47.1 -y
# PHP SDK dependencies
RUN choco install re2c --version 3.0 -y
RUN choco install winflexbison3 --version 2.5.24.20210105 -y
RUN choco install gawk --version 5.1.0 -y
RUN choco install sed --version 4.9 -y
RUN choco install grep --version 3.11.0 -y
RUN choco install jq --version 1.7.1 -y
RUN choco install patch --version 2.5.9 -y
RUN choco install diffutils --version 2.8.7 -y
RUN choco install zip --version 3.0 -y
RUN choco install unzip --version 6.0 -y
RUN choco install wget --version 1.21.4 -y

RUN choco install cppcheck --version 2.12 -y
RUN choco install llvm --version 19.1.3 -y

# Install Visual Studio Build Tools
RUN choco install visualstudio2019buildtools --version 16.11.42 -y --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --includeOptional"
# RUN choco install visualstudio2022buildtools --version 117.12.2 -y --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --includeOptional"

# Additional dependencies
RUN choco install go --version 1.23.3 -y
RUN choco install caddy --version 2.8.4 -y

RUN choco install mingw --version 13.2.0 -y

# Set dependencies for PHP SDK
# Visual Studio 2019 == vs16
# Visual Studio 2022 == vs17 
ENV VS_VERSION=vs16
ENV CPU_ARCH=x64

# Set PHP version
ENV PHP_VERSION=8.3.14
ENV PHP_SRC_DIR=C:/php-sdk/phpdev/${VS_VERSION}/${CPU_ARCH}/php-src

# Set environment variables for PHP SDK download
ENV PHP_SDK_VERSION=2.3.0

RUN powershell -Command \
    $ErrorActionPreference = 'Stop'; \
    git clone https://github.com/php/php-sdk-binary-tools.git c:\php-sdk; \
    cd c:\php-sdk; \
    git config --global --add safe.directory c:\php-sdk; \
    git fetch --all --tags --prune; \
    git checkout tags/php-sdk-$env:PHP_SDK_VERSION

RUN powershell -Command \
    $ErrorActionPreference = 'Stop'; \
    git clone https://github.com/php/php-src.git $env:PHP_SRC_DIR; \
    cd $env:PHP_SRC_DIR; \
    git config --global --add safe.directory c:\php-src; \
    git fetch --all --tags --prune; \
    git checkout tags/php-$env:PHP_VERSION

# Invoke the starter script for Visual Studio
RUN powershell -Command \
    $ErrorActionPreference = 'Stop'; \
    # Replace 2019 with 2022 if using Visual Studio 2022
    & "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat"; \
    cd C:\php-sdk ; \
    .\phpsdk-$env:VS_VERSION-$env:CPU_ARCH.bat

# Run the phpsdk_buildtree batch script which will create the desired directory structure
RUN powershell -Command \
    $ErrorActionPreference = 'Stop'; \
    cd C:\php-sdk ; \
    C:\php-sdk\bin\phpsdk_buildtree phpdev

# Download PHP dependencies
WORKDIR $PHP_SRC_DIR
ENV PHP_SDK_VS=$VS_VERSION
RUN powershell -Command \
    $ErrorActionPreference = 'Stop'; \
    # Replace 2019 with 2022 if using Visual Studio 2022
    & "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat"; \
    & "C:/php-sdk/bin/phpsdk_deps" -u

# Compile PHP from source
RUN powershell -Command \
    $ErrorActionPreference = 'Stop'; \
    # Replace 2019 with 2022 if using Visual Studio 2022
    & "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat"; \
    & buildconf; \
    & configure --disable-all --enable-cli --enable-$remains; \
    & nmake

I tried the setup with different PHP SDK, PHP and VS build tools versions. but all ended in the same way. Some of the choco installed dependencies can be removed, but since I could not manage to create the PHP binary, I skiped the cleanup.

linuxluigi avatar Dec 04 '24 11:12 linuxluigi

If you are having issues building PHP and the docs are not correct; it might be worth reaching out to the PHP Internals mailing list for assistance in working though it. The people there are quite knowledgeable about all things PHP. There is also a PHP Windows mailing list, as well.

withinboredom avatar Dec 04 '24 12:12 withinboredom

@TenHian Did you manage to make it work with MySQL or PostgreSQL? Could you make the binary available for download?

All extensions like pdo_mysql need to recompile in step #Build php libs and headers#. Then move dll into dir that frankenphp.exe in. If u wanna a frankenphp.exe with those php extensions, please wait a few days.

TenHian avatar Dec 12 '24 08:12 TenHian

@dunglas @withinboredom Recently I wanted to pull request some code and manuals for porting frankenphp to windows. Although it still has some shortcomings. Is this allowed? Since frankenphp has been updated a few versions ago, and my version is still stuck on v1.1.5, and also involves some changes to php-src, I think there should be some issues to be resolved. Can I bother you with questions about this in the future?

TenHian avatar Dec 12 '24 08:12 TenHian

Hell yeah! Even if it is a WIP/draft PR, it would be much appreciated. Then we can work together to get it ready for a release.

withinboredom avatar Dec 12 '24 11:12 withinboredom

@insinfo Here is binary with pdo_mysql and pdo_pgsql. (frankenphp-v1.1.5 php-8.3.0) Please set extension_dir in php.ini. withpdopgsql.zip

TenHian avatar Dec 20 '24 05:12 TenHian

@withinboredom Please ignore pull request #1286,I'll pull request it later. It has some codes and documentations that has not been committed. My bad.

TenHian avatar Dec 22 '24 14:12 TenHian

visual_studio.zip Here are older releases of visual studio.

TenHian avatar Dec 23 '24 06:12 TenHian

can i use it with laravel-herd for windows

mahmoud-alaraby avatar Jun 21 '25 11:06 mahmoud-alaraby

can i use it with laravel-herd for windows

Will, I haven't tried it, and the only problem I can think of is port conflicts.

TenHian avatar Jun 25 '25 15:06 TenHian

Is there any update on getting FrankenPHP soon on windows?

Lea-Reift avatar Jul 24 '25 23:07 Lea-Reift

Any updates?

MirazMac avatar Dec 22 '25 17:12 MirazMac

It will not happen until Go supports MSVC or PHP supports MinGW (which, frankly, would make little sense). This is not happening.

henderkes avatar Dec 22 '25 18:12 henderkes

That's a pity. It would make things much easier in my use case of bundling portable web server stack. Nativephp serve is single threaded, so it's not usable.

Serveronet avatar Dec 30 '25 17:12 Serveronet

The way things are going, we might see Microsoft make WSL2 a fully integrated part of Windows before Go supports Windows' C library.

henderkes avatar Dec 30 '25 17:12 henderkes

I'm actively working on it! Stay tuned.

dunglas avatar Dec 30 '25 20:12 dunglas