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.
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