如何为Windows编译尽可能小的V8库?

时间:2014-10-09 20:26:24

标签: visual-studio-2013 v8 embedded-v8

我正在为学校制作游戏引擎,我想使用Google的V8来允许在引擎中使用JavaScript脚本。该引擎是使用Visual Studio 2013编写的,由于最终游戏不得超过50MB,我希望尽可能减少对V8文件大小的影响。

环顾互联网了解如何使用V8进行操作,我遇到了a series of tutorials on V8,它附带了V8的预编译.lib文件。但是,它已经四岁了。我假设自己构建一个更新的版本会提高性能并添加功能,所以我昨天花了很多时间在V8构建过程中苦苦挣扎,最终想出了如何为Visual Studio编译V8:

  1. 安装Google的"depot tools"
  2. 运行fetch v8
  3. 这为我提供了生成V8 Visual Studio解决方案所需的一切,当我编译它时,它可以工作,并生成.lib和.dll文件。但是,当我尝试创建一个测试解决方案并将这些库链接到它时,它会让人非常困惑。

    构建过程会生成以下LIB文件:

    • cctest.lib
    • gmock.lib
    • gtest.lib
    • icui18n.lib
    • icuuc.lib
    • mksnapshot.lib
    • unittest.lib
    • v8.lib
    • v8_base.lib
    • v8_libbase.lib
    • v8_libplatform.lib
    • v8_nosnapshot.lib
    • v8_snapshot.lib

    以下DLL:

    • icudt.dll
    • icui18n.dll
    • icuuc.dll
    • v8.dll

    在昨天的某个时刻,我包含了许多库(我认为它是v8,v8_base和v8_snapshot)并将所有的DLL复制到我项目的输出目录中,并最终有效。但是,正如我上面所说,我需要V8的文件大小影响尽可能小。我不需要i18​​n支持,所以有没有一种方法可以在没有它的情况下进行编译?就像我上面说的那样,我有一个旧版本的V8 .lib,它不需要运行DLL,它编译并且工作正常...但我错过了更新的功能和改进,因为这是四年旧?无论如何,所有这些.libs的含义是什么?我找不到关于哪些人做什么或类似事情的任何文件。

    所以,是的,我想如果有人能提供指示或指出我会提供任何有用的文件,那就太棒了。昨天我几乎整天都在努力解决这个问题。

2 个答案:

答案 0 :(得分:5)

V8 wiki中有一个页面Building with GYP。简而言之,您应该使用GYP生成Visual Studio解决方案,然后构建它。

  1. 安装Python,Subversion客户端;使命令行可用。
  2. 打开Visual Studio命令提示符,然后执行后续步骤。
  3. 将V8源提取到某个目录中,比如它将命名为v8-build:

    svn checkout http://v8.googlecode.com/svn/trunk v8-build

  4. 用于最新版本(某些标记版本,例如http://v8.googlecode.com/svn/tags/3.28.57

    1. 在Windows上你需要Cygwin: svn checkout http://src.chromium.org/svn/trunk/deps/third_party/cygwin@66844 v8-build/third_party/cygwin
    2. (参见v8-build / DEPS文件中的实际URL)

      1. 获取GYP:

        svn checkout http://gyp.googlecode.com/svn/trunk@1831 v8-build/gyp

      2. 可选择获取ICU:

        svn checkout https://src.chromium.org/svn/trunk/deps/third_party/icu46@258359 v8-build/third_party/icu

      3. 在命令行中提供工具:

        • 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
      4. 使用所需选项运行GYP:

        python v8-build\build\gyp_v8 -Dcomponent=static_library -Dtarget_arch=x64 -v8_enable_i18n_support=0 -Dv8_use_snapshot=0

      5. (参见v8-build \ build \ features.gypi中允许的变量)

        1. 使用Cygwin环境使用Visual Studio构建生成的项目:

          msbuild /m /p:UseEnv=true /p:Configuration=Release /p:Platform=x64 v8-build\tools\gyp\v8.vcxproj

        2. 结果库应位于v8-build\build目录

        3. 我使用Python脚本自动完成上述步骤。

          更新:我使用类似的脚本为V8构建NuGet包,就是这样:https://github.com/pmed/v8-nuget/blob/master/build.py

答案 1 :(得分:2)

我知道这篇文章很老了,但我会改进pmed的答案。我假设您在Windows机器上安装了Python(只需从官方页面安装它并将Python根目录添加到PATH变量中)以及Git-Bash。我将使用“〜/”来表示您的用户目录。

编译V8的最简单方法是使用depot工具,只需创建一个目录,假设〜/ devtools / google,使用git-bash运行

cd ~/devtools/google
git clone git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

然后将〜/ devtools / google / depot_tools添加到PATH变量。

使用Power Shell运行

cd ~/devtools/google
fetch v8

那将克隆V8引擎的文件及其所有依赖项gyp,cygwin等。

此时您可以按照步骤7中pmed的回答,只需更改环境变量的目录:

我正在使用Path-to-your-installation \ v8 \代表〜/ 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

然后运行(在PowerShell中)     路径对您的安装\ V8 \编译\ THIRD_PARTY \ cygwin的\ setup_mount.bat     路径对您的安装\ V8 \编译\ THIRD_PARTY \ cygwin的\ setup_env.bat

视觉工作室项目将位于 路径对您的安装\ V8 \工具\ GYP *

您可以使用Visual Studio打开v8项目并进行编译。

我很难弄清楚为什么“fetch v8”在Git-bash中以某种方式失败,显然,你必须使用PowerShell(也许是经典的cmd?)

PS:如果您在编译时遇到问题(无法重新映射[...] cygncurses-8.dll)请看一下这篇文章https://superuser.com/questions/194529/cygwin-fatal-error-unable-to-remap-what-does-it-mean

问候。