在Windows 32位系统上构建Skia

4
我正在按照此链接在Windows上构建Skia。
对于Windows x64,构建非常顺利。但是对于32位来说情况并不顺利。
1)我尝试将target_cpu = "x64"指定为target_cpu = "x86",gn gen可以正常工作,但ninja会抛出错误,指出Visual Studio的路径包含空格。它会出现类似以下的各种错误:

"C:\Programs "不是有效路径。

2)我尝试生成sln文件并从IDE内部构建(如链接中提到的替代方法)。但是,我甚至无法以这种方式编译x64版本(来自ninja的大量非零退出代码,未看到进一步的消息)。
3)我尝试使用该网站声称是“支持32位构建的唯一方法”的工具链。必须使用以下命令(在skia dir中执行)下载该工具链:
python infra/bots/assets/win_toolchain/download.py -t C:/toolchain

我成功地解决了许多复杂的问题(例如gutil冲突、.py扩展名遗漏、路径变量等等),现在我被困在这里:

已登录为 xxxxxxxxxxxxxxxx

AccessDeniedException: 403 调用方无权访问skia-buildbots存储桶中的storage.objects.list。

只要生成“libs”文件,我不局限于构建方式。但是对于一个具有如此多外部依赖项的大型项目,我认为自己想出方法并不容易。
3个回答

1
一种我找到的解决方案:

  1. Open the out\Release\toolchain.ninja text file (or the toolchain.ninja specific to your configuration)
  2. Remove the following string (you can use a "Replace Text" with an empty string in your text editor):

    C:/Program Files (x86)/Microsoft Visual Studio 14.0/win_sdk/bin/SetEnv.cmd /x86 && C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64_x86/
    

    from everywhere (in case that you've used the x86, for x64 the string might be different)

  3. And use ninja -C out/Release dm as usual

这样我们使用的是一个工具链,其中cl.exeml.exelink.exe命令直接调用(可以从PATH环境中访问)。


我有一个几乎相似的问题,也许你也能帮助我。 我设法构建了skia all.sln,它包括64个项目,并且我可以运行它们,但我无法自己创建项目,我尝试了很多技巧。 如果我从解决方案中删除其他项目,ninja将拒绝构建。 根据您的建议,我应该从toolchain.ninja中删除一个字符串,但我甚至没有这个字符串。 我希望你知道一些魔法。 - bobra
@bobra,那是一个不同的问题,将自己的程序与Skia链接是完全不同的世界;看起来在这个最新版本中,他们简化了链接过程,只使用了一个库(libskia.a),因此您应该为项目做两件事:1)包含 skia/include/ 目录以获取.h文件,2)用 out/Release/libskia.lib 链接您的程序。 - dacap

0

目前看来(截至skia m67版本),@WinCloud的修复已经部分合并到上游(不过仍需删除env_setup部分)。

但是,正如评论中所指出的那样,在OpenGL初始化期间会崩溃。我已经解决了所有这些问题(至少在演示应用程序可运行的程度上),额外地,还修复了与Visual Studio的Debug配置文件兼容性的.lib文件。

附带的.bat文件可以使用Clang构建“无系统库”配置(因为自述文件明确说明VC++构建可能存在性能问题)。只需从https://releases.llvm.org/download.html下载最新的LLVM并将其安装到默认位置(已测试6.0.0)即可使用。

如果您需要DLL运行时链接,则必须编辑gn/BUILD.gn文件-默认情况下添加/MD标志,并将/MTd更改为/MDd以进行调试。

以下是基于chrome/m67分支的补丁:

https://gist.github.com/Alexx999/39eae9182eecaa3dc06e73fdb3a1e7d9


0
另一种基于@dacap的解决方案。但我改变了gn配置文件。
更改文件gn/toolchain/BUILD.gn
...   
  if (msvc == 2015) {
    bin = "$win_vc/bin/amd64"
  } else {
    bin = "$win_vc/Tools/MSVC/$win_toolchain_version/bin/HostX64/$target_cpu"
  }

  env_setup = ""
  if (target_cpu == "x86") {
    # Toolchain asset includes a script that configures for x86 building.
    # We don't support x86 builds with local MSVC installations.
    env_setup = "cmd /c $win_sdk/bin/SetEnv.cmd /x86 && "
  }

...

...
if (msvc == 2015) {
  if (target_cpu == "x86") {
    bin = "$win_vc/bin"
  } else {
    bin = "$win_vc/bin/amd64"
  }
} else {
  bin = "$win_vc/Tools/MSVC/$win_toolchain_version/bin/HostX64/$target_cpu"
}

env_setup = ""

#if (target_cpu == "x86") {
#  # Toolchain asset includes a script that configures for x86 building.
#  # We don't support x86 builds with local MSVC installations.
#  env_setup = "cmd /c $win_sdk/bin/SetEnv.cmd /x86 && "
#}
.....

我刚发现它仍然存在问题。当我运行benchs和tests时,会抛出异常。链接:https://groups.google.com/d/msg/skia-discuss/E8TBjJva_d8/1tzts3TkBAAJ - WinCloud

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接