I'm making a game engine for school, and I want to use Google's V8 to allow for JavaScript scripting in-engine. The engine is written using Visual Studio 2013, and as the final game must not exceed 50MB, I want to keep the V8 filesize impact as small as possible.
Looking around the Internet for how to do stuff with V8, I came across a series of tutorials on V8, which comes with a precompiled .lib file for V8. However, it is four years old. I'm assuming that building a more recent version on my own would improve performance and add features, so I spent all of yesterday struggling with the V8 build process, and eventually figured out how to compile V8 for Visual Studio:
fetch v8
This gets me everything I need to generate the V8 Visual Studio solution, and when I compile it, it works, and generates .lib and .dll files. However, when I try to create a test solution and link these libraries to it, it's incredibly confusing.
The build process generates the following LIB files:
And the following DLLs:
At some point yesterday, I included many of the libs (I think it was v8, v8_base, and v8_snapshot) and copied over all of the DLLs to the output directory of my project, and it eventually worked. However, as I said above, I need the filesize impact of V8 to be as small as possible. I don't need i18n support, so is there a way to compile without it? Like I said above, I have an old version of the V8 .lib, which doesn't need a DLL to run, and it compiles and works fine... but am I missing out on newer features and improvements, as it's four years old? And what do all of these .libs mean, anyways? I can't find any documentation on which ones do what or anything like that.
So yeah, I guess if anyone could provide instructions or point me toward any documentation that would help, that would be great. I spent nearly all day yesterday trying to solve this problem.
Unlike other languages, The V8 engine uses both a compiler and an interpreter and follows Just in Time(JIT) Compilation for improved performance. Just in Time(JIT) Compilation: The V8 engine initially uses an interpreter, to interpret the code.
There is a page Building with GYP in the V8 wiki. In brief, you should use GYP to generate a Visual Studio solution and then build it.
Fetch V8 sources into some directory, say it would be named v8-build:
svn checkout http://v8.googlecode.com/svn/trunk v8-build
for the recent version (either some tagged version, for example http://v8.googlecode.com/svn/tags/3.28.57)
svn checkout http://src.chromium.org/svn/trunk/deps/third_party/cygwin@66844 v8-build/third_party/cygwin
(see actual URL in a v8-build/DEPS file)
Fetch GYP:
svn checkout http://gyp.googlecode.com/svn/trunk@1831 v8-build/gyp
Optionally fetch ICU:
svn checkout https://src.chromium.org/svn/trunk/deps/third_party/icu46@258359 v8-build/third_party/icu
Make tools available in the command line:
set CYGWIN_ROOT=%cd%\v8-build\third_party\cygwin
set PATH=%CYGWIN_ROOT%\bin;%PATH%
set PYTHONPATH=%cd%\v8-build\gyp\pylib
v8-build\third_party\cygwin\setup_mount.bat
v8-build\third_party\cygwin\setup_env.bat
Run GYP with desired options:
python v8-build\build\gyp_v8 -Dcomponent=static_library -Dtarget_arch=x64 -v8_enable_i18n_support=0 -Dv8_use_snapshot=0
(see allowed variables in v8-build\build\features.gypi)
Build generated project with Visual Studio using the Cygwin environment:
msbuild /m /p:UseEnv=true /p:Configuration=Release /p:Platform=x64 v8-build\tools\gyp\v8.vcxproj
Result libraries should be in the v8-build\build
directory
I use a Python script to automate the steps above.
Update: I use similar script to build NuGet packages for V8, and here is it: https://github.com/pmed/v8-nuget/blob/master/build.py
I know this post is quite old, but I'm going to improve pmed's answer. I'm assuming you have Python installed in your windows machine (just install it from the official page and add the Python root directory to your PATH variable) and also Git-Bash. I will be using "~/" to represent your user directory.
The easiest way to compile V8 is using depot tools, just create a directory, let's say ~/devtools/google, use git-bash to run
cd ~/devtools/google
git clone git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
Then add ~/devtools/google/depot_tools to your PATH variable.
Use Power Shell to run
cd ~/devtools/google
fetch v8
That will clone the files of the V8 engine and all its dependencies gyp, cygwin, etc.
At this point you can follow the pmed's answer from step 7, just change the directories for the environment variables:
I'm using Path-to-your-installation\v8\ to represent ~/devtools/google/v8
CYGWIN_ROOT=Path-to-your-installation\v8\third_party\cygwin
PATH=%CYGWIN_ROOT%\bin;%PATH%
PYTHONPATH=Path-to-your-installation\v8\build\gyp\pylib
Then run (in PowerShell) Path-to-your-installation\v8\build\third_party\cygwin\setup_mount.bat Path-to-your-installation\v8\build\third_party\cygwin\setup_env.bat
The visual studio project will be located in Path-to-your-installation\v8\tools\gyp*
You can just open the v8 project with Visual Studio and compile it.
I had hard times trying to figure out why "fetch v8" fails somehow in Git-bash, appearently, you must use PowerShell (maybe the classic cmd too?)
PS: If you have problems compiling (unable to remap [...] cygncurses-8.dll) take a look at this post https://superuser.com/questions/194529/cygwin-fatal-error-unable-to-remap-what-does-it-mean
Regards.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With