4

我正在按照此链接在 Windows 上构建 Skia 。

对于 Windows x64,构建非常顺利。但不适用于 32 位。

1)我尝试指定target_cpu = "x86"而不是target_cpu = "x64", 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 调用者没有 storage.objects.list 对存储桶skia-buildbots 的访问权限。

只要它为我生成“库”,我就不受限于它的构建方式。但是对于一个有这么多外部依赖项的大型项目,我认为自己的方式并不容易。

4

3 回答 3

1

我发现的一种解决方案:

  1. 打开out\Release\toolchain.ninja文本文件(或toolchain.ninja特定于您的配置)
  2. 删除以下字符串(您可以在文本编辑器中使用带有空字符串的“替换文本”):

    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/
    

    来自任何地方(如果您使用过x86, 因为x64字符串可能不同)

  3. ninja -C out/Release dm照常使用

通过这种方式,我们使用了一个工具链,其中cl.exe直接ml.exe link.exe调用命令(可从PATH环境访问)

于 2017-04-18T15:11:30.137 回答
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 && "
#}
.....
于 2018-03-15T09:22:25.967 回答
0

似乎(从skia m67开始)@WinCloud的修复部分合并到上游(尽管仍然必须删除 env_setup 部分)。

但是,正如评论中所述 - 它会在 OpenGL 初始化期间崩溃。我已经修复了所有这些(至少到演示应用程序可运行的程度),作为一些额外的 - 修复了 .lib 与 Visual Studio 的调试配置的兼容性。

包括使用 Clang 构建“无系统库”配置的 .bat 文件(因为自述文件明确指出 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

于 2018-04-29T20:10:04.293 回答