Windows下使用LLVM编译skia源码

Windows下编译Skia源码的方法

  • 修改日期:2024-05-12
  • 操作系统:Windows 11 64位版本
  • 编译器可选择:LLVM 或者 Visual Studio 2022 中的一种
  • 操作过程中,源码的根目录是D:\develop目录,如果使用其他目录,可替换为实际的目录。

一、准备工作

  1. 安装python v3.11.x(python的主版本需要是v3,需要添加到Path环境变量,以便于能够直接用python.exe启动python程序)
    (1)首先安装python
    (2)在Windows的设置里面,关闭python.exe和python3.exe的"应用执行别名",否则编译skia的脚本执行有问题。Windows设置入口:设置 -> 应用 -> 高级应用设置 -> 应用执行别名
    (3)到python.exe所在目录中,复制一份python.exe,改名为python3.exe: 确保命令行参数中可以访问到python3.exe
    (4)验证:确保命令行参数中可以访问到python.exe和python3.exe
  2. 安装git,git需要添加到Path环境变量,确保命令行参数中可以访问到git.exe
    (1)Git For Windows: 2.44版本
    (2)TortoiseGit:2.15版本
  3. 安装Visual Studio 2022社区版(或者其他版本)
    注意事项:在安装的时候必须要选择CMake扩展,自带Ninja编译工具,编译Skia源码的时候需要用到Ninja
  4. 安装LLVM:18.1.5 Win64 版本(更高版本也可以)
    (1)安装目录:C:\LLVM
    (2)注意事项:安装目录中,不能有空格,否则编译会遇到问题。
  5. 获取skia源码及相关依赖:
    (1)建立目录:D:\develop
    (2)> cd /d D:\develop
    (3)> git clone https://github.com/google/skia.git
    (4)备注:skia源码更新的日期:2024-05-12
    (5)备注:skia库对应的SHA-1: 4e9362762a0fc730b6f6359b8a626a0b1cc9ba9f
    (6)更新修改代码:
    • 下载需要更新的代码到本地:git clone https://github.com/rhett-lee/skia_compile
    • 更新文件:解压Skia.2024-05-12.src.zip,将解压后的文件,覆盖D:\develop\skia目录中的所有同名文件。
    • 注意事项:该修改的代码是基于库的SHA-1: 4e9362762a0fc730b6f6359b8a626a0b1cc9ba9f 代码修改,如果不是这个版本的代码,直接覆盖可能有问题,需要手工修改;
    • 修改代码解决的问题:
      • 修改了DEPS、tools/git-sync-deps两个文件:解决部分第三方依赖库获取不到源码的问题;
      • 修改部分其他源码:解决LLVM编译生成的lib,使用Visual Studio链接生成可执行程序后,运行时崩溃问题。
  6. 更新依赖代码:切换到skia目录,执行脚本,更新依赖的第三方库
    (1)> cd /d D:\develop\skia
    (2)> python tools/git-sync-deps
    (3)注意事项:这里配置的zlib是google的优化版本,不是zlib官方的版本,如果使用官方版会有编译错误
    (4)注意事项:更新依赖库的时候,如果遇到github网络错误,需要反复执行,直到成功为止

二、编译gn.exe(编译skia源码时需要用到gn.exe)

  1. 下载源码:https://github.com/rhett-lee/gn.git
    (1)> cd /d D:\develop
    (2)> git clone https://github.com/rhett-lee/gn.git
  2. 编译gn(注意:vs 2022 已经带了ninja.exe,在安装的时候选择了CMake扩展):
    (1)首先进入vs 2022的命令行编译环境(x64 Native Tools Command Prompt for VS 2022)
    (2)进入gn源码目录:cd /d D:\develop\gn
    (3)> python build/gen.py
    (4)> ninja -C out
  3. 复制gn.exe文件到skia源码目录
    编译完成后,将out\gn.exe 复制到 D:\develop\skia\bin\ 目录中,编译skia过程中要用到这个gn.exe。

三、编译skia(编译器:LLVM)

(1)编译64位的Lib(x64版本)

  1. 首先进入VS 2022的64位命令行编译环境: (x64 Native Tools Command Prompt for VS 2022)
  2. 进入skia源码目录:
    > cd /d D:\develop\skia
  3. 编译skia静态库(Release版,官方版,最小依赖)
  • .\bin\gn.exe gen out/LLVM.x64.Release --ide="vs2022" --sln="skia" --args="target_cpu=\"x64\" cc=\"clang\" cxx=\"clang++\" clang_win=\"C:/LLVM\" clang_win_version=\"18\" is_official_build=true skia_use_system_libpng=false skia_use_system_libjpeg_turbo=false skia_use_system_zlib=false skia_use_icu=false skia_use_expat=false skia_use_libwebp_decode=false skia_use_libwebp_encode=false skia_use_xps=false skia_enable_pdf=false is_debug=false"
  • ninja -C out/LLVM.x64.Release
  1. 编译skia静态库(Debug版,非官方版,完整)
  • .\bin\gn.exe gen out/LLVM.x64.Debug --ide="vs2022" --sln="skia" --args="target_cpu=\"x64\" cc=\"clang\" cxx=\"clang++\" clang_win=\"C:/LLVM\" clang_win_version=\"18\" is_debug=true extra_cflags=[\"/MTd\"]"
  • ninja -C out/LLVM.x64.Debug

(2)编译32位的Lib(x86版本)

  1. 首先进入VS 2022的32位命令行编译环境: (x86 Native Tools Command Prompt for VS 2022)
  2. 进入skia源码目录:
    > cd /d D:\develop\skia
  3. 编译skia静态库(Release版,官方版,最小依赖)
  • .\bin\gn.exe gen out/LLVM.x86.Release --ide="vs2022" --sln="skia" --args="target_cpu=\"x86\" cc=\"clang\" cxx=\"clang++\" clang_win=\"C:/LLVM\" clang_win_version=\"18\" is_official_build=true skia_use_system_libpng=false skia_use_system_libjpeg_turbo=false skia_use_system_zlib=false skia_use_icu=false skia_use_expat=false skia_use_libwebp_decode=false skia_use_libwebp_encode=false skia_use_xps=false skia_enable_pdf=false is_debug=false"
  • ninja -C out/LLVM.x86.Release
  1. 编译skia静态库(Debug版,非官方版,完整)
  • .\bin\gn.exe gen out/LLVM.x86.Debug --ide="vs2022" --sln="skia" --args="target_cpu=\"x86\" cc=\"clang\" cxx=\"clang++\" clang_win=\"C:/LLVM\" clang_win_version=\"18\" is_debug=true extra_cflags=[\"/MTd\"]"
  • ninja -C out/LLVM.x86.Debug

四、编译skia(编译器:Visual Studio 2022)

(1)编译64位的Lib(x64版本)

  1. 首先进入vs 2022的64位命令行编译环境:(x64 Native Tools Command Prompt for VS 2022)
  2. 进入skia源码目录:
    > cd /d D:\develop\skia
  3. 编译skia静态库(Release版本,官方版,最小依赖,生成Visual Studio 2022工程)
  • .\bin\gn.exe gen out/vs2022.x64.Release --ide="vs2022" --sln="skia" --args="target_cpu=\"x64\" is_official_build=true skia_use_system_libpng=false skia_use_system_libjpeg_turbo=false skia_use_system_zlib=false skia_use_icu=false skia_use_expat=false skia_use_libwebp_decode=false skia_use_libwebp_encode=false skia_use_xps=false skia_enable_pdf=false is_debug=false"
  • ninja -C out/vs2022.x64.Release
  1. 编译skia(Debug版,非官方版本,完整,生成Visual Studio 2022工程)
  • .\bin\gn.exe gen out/vs2022.x64.Debug --ide="vs2022" --sln="skia" --args="target_cpu=\"x64\" is_debug=true extra_cflags=[\"/MTd\"]"
  • ninja -C out/vs2022.x64.Debug

(2)编译32位的Lib(x86版本)

  1. 首先进入vs 2022的32位命令行编译环境:(x86 Native Tools Command Prompt for VS 2022)
  2. 进入skia源码目录:
    > cd /d D:\develop\skia
  3. 编译skia静态库(Release版本,官方版,最小依赖,生成Visual Studio 2022工程)
  • .\bin\gn.exe gen out/vs2022.x86.Release --ide="vs2022" --sln="skia" --args="target_cpu=\"x86\" is_official_build=true skia_use_system_libpng=false skia_use_system_libjpeg_turbo=false skia_use_system_zlib=false skia_use_icu=false skia_use_expat=false skia_use_libwebp_decode=false skia_use_libwebp_encode=false skia_use_xps=false skia_enable_pdf=false is_debug=false"
  • ninja -C out/vs2022.x86.Release
  1. 编译skia(Debug版,非官方版本,完整,生成Visual Studio 2022工程)
  • .\bin\gn.exe gen out/vs2022.x86.Debug --ide="vs2022" --sln="skia" --args="target_cpu=\"x86\" is_debug=true extra_cflags=[\"/MTd\"]"
  • ninja -C out/vs2022.x86.Debug

五、为何使用LLVM编译Skia:

因为LLVM编译的代码,执行性能明显比VS好。
用VS编译的代码,运行时有明显卡顿现象,尤其时Debug版。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值