The V8Js PHP extension is primarily targeted at Unix platforms, especially GNU/Linux. However it is possible (and supported) to build on Windows, using Microsoft Visual Studio.
Building with MinGW or Cygwin is not officially supported; mainly since Google v8 does not support builds on Cygwin (and building it on Cygwin is currently broken).
Compared to installation on GNU/Linux it's way more tedious to install V8Js on Windows, since you need to compile PHP with all its dependencies beforehand.
You need to have Visual Studio 2015 (aka VC14), make sure to install the C++ compiler (which is not installed by default any longer).
Build transcript using GN by @Jan-E
This is how I built V8 5.8.
TL;DR: these are the essential commands for x64.
call git checkout 5.8-lkgr
call gclient sync
call gn gen v5.8\x64.release --args="is_component_build=true is_debug=false v8_use_snapshot=false enable_nacl=false target_cpu=\"x64\"" --ide=vs
cd v5.8\x64.release
msbuild all.sln
Prerequisites:
My initial setup was a mixture of the Linux & Windows commands at https://www.chromium.org/developers/how-tos/install-depot-tools
D:
cd \
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git chromium
set path=D:\chromium;%path%
set GYP_MSVS_VERSION=2015
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_CHROMIUM_NO_ACTION=0
cd chromium
fetch v8
git stash
Note: do not add the checkout dir to your path permanently if you've already installed git.exe somewhere in your path: the depot tools will create a git.bat in the checkout dir!
Then I ran the following batch script, inside a 'VS2015 x64 Native Tools Command Prompt' (x64) or a 'VS2015 x86 Native Tools Command Prompt' (x86):
D:
cd \chromium\v8
set WindowsSdkDir=C:\Program Files (x86)\Windows Kits\10\
set WindowsSDK_ExecutablePath_x64=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\x64\
set WindowsSDK_ExecutablePath_x86=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\
set path=D:\chromium;%path%
set GYP_MSVS_VERSION=2015
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_CHROMIUM_NO_ACTION=0
set xn=x86
if not %platform%x==x set xn=%platform%
if %xn%==X64 set xn=x64
call git checkout 5.8-lkgr
call git pull
call gclient sync
call gn gen v5.8\%xn%.release --args="is_component_build=true is_debug=false v8_use_snapshot=false enable_nacl=false target_cpu=\"%xn%\"" --ide=vs
cd v5.8\%xn%.release
msbuild all.sln /t:clean
msbuild all.sln
pause
unittests
The Google v8 project already has excellent step-by-step guide on how to build with gyp.
As a short run through:
Then open a command prompt
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
fetch v8
git checkout 4.7.80.25
gclient sync
python build\gyp_v8 -Dcomponent=shared_library -Dv8_use_snapshot=0
CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat"
msbuild build\All.sln /m /p:Configuration=Release
(alternatively start build/all.sln
... and build within the Visual Studio GUI)
Then follow the build your own PHP on Windows guide on the PHP wiki. Use Visual Studio 2015 with PHP7.
A quick run through:
Open "VS2015 x86 Native Tools Command Prompt"
cd \php-sdk
bin\phpsdk_setvars.bat
bin\phpsdk_buildtree.bat phpdev
mkdir vc14
mkdir vc14\x86
mkdir vc14\x86\deps
mkdir vc14\x86\deps\bin
mkdir vc14\x86\deps\include
mkdir vc14\x86\deps\lib
\php-sdk\phpdev\vc14\x86
\v8\build\Release\lib
copy icui18n.lib
, icuuc.lib
, v8.lib
,
v8_libbase.lib
and v8_libplatform.lib
to deps\lib folder\v8\include
copy all v8*.h files to deps\include folderv8-platform.h
again to deps\include\include folderext
folderconfig.w32
file inside that folder defines version of the compiled v8(still in "VS2015 x86 Native Tools Command Prompt")
cd \php-sdk\phpdev\vc14\x86\php-7.0.1\
buildconf
configure --disable-all --enable-cli --with-v8js
nmake
After nmake completes the php.exe is in Release_TS\ directory.
In order to try things out in place, copy over icui18n.dll
, icuuc.dll
and
v8*.dll
files from \v8\build\Release
folder to
\php-sdk\phpdev\vc14\x86\php-7.0.1\Release_TS\
first.
Then run
Release_TS\php.exe -d extension=php_v8js.dll -d extension_dir=Release_TS\
Alternatively copy all stuff to c:\php\ (including the DLL files from v8 build).