本文主要是介绍2312skia,10构建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
介绍
Skia
图形库可来绘画文本,几何图形和图像
:
带透视的3x3
矩阵*抗锯齿,透明度,滤镜*
着色器,传输模式,掩码过滤,路径特效
,子像素文本
Skia
的设备后端目前包括:
光栅*OpenGL*PDF*XPS*SVG*
及(用来录制,然后回放
到另一个Canvas
中的)图片
构建
确保已先按说明下载Skia
Skia
用GN
来配置构建.可参考这篇来构建
is_official_build
和第三方依赖项
Skia
的多数用户
应该设置is_official_build=true
,而开发者
应按false
为默认值.
优化版本
没有调试符号
,用普通库
搜索路径动态链接
到其第三方依赖项
.
相比下,面向开发者
的默认
版本是未优化
构建,有完整
的调试符号
,所有第三方
依赖项从源码
构建并嵌入到libskia
中.这就是所有手动和自动
测试方式.
Skia
提供了多种
使用第三方库的功能,如libpng,libwebp
或libjpeg-turbo
来解码图像,或ICU
和sftnly
来解码
子集字体.
所有这些第三方依赖项
都是可选
的,并可通过GN
像对foo
,用skia_use_foo
参数来控制.
如果启用了skia_use_foo
,则启用skia_use_system_foo
通过把它链接
到系统路径
上的头文件和库
中,来生成Skia
.默认,is_official_build=true
启用所有skia_use_system_foo
.
如果需要,可用extra_cflags
和extra_ldflags
添加包含路径或库路径
.
支持和首选的编译器
虽然Skia
应用GCC,MSVC
和其他编译器编译,但使用Clang
编译Skia
软件后端中的许多例程
时,运行速度最快.
如果依赖软光栅化,图像解码或颜色空间转换
,并使用Clang
外的编译器编译Skia
,会看到性能
明显下降.
Skia
使用C++
语言功能(使用-std=c++17
标志编译),因此需要兼容C++17
的编译器.
--args='cc="clang" cxx="clang++"'
为使用指定的cc
和cxx
调用.
如果未在gn
参数中指定cc
和cxx
,则Skia
默认为cc
和c++
.在许多平台上,这一般是默认的GCC
,而不是Clang
.
快速入门
运行gn gen
以生成构建文件
.按gn gen
的参数,传递构建目录名
,并可选
地传递--args=
来配置构建类型
.
要在名为out/Static
的构建目录
中,按静态库
构建Skia
:
bin/gn gen out/Static --args='is_official_build=true'
要在名为out/Shared
的构建目录
中,按共享库(DLL)
构建Skia
,请如下:
bin/gn gen out/Shared --args='is_official_build=true is_component_build=true'
如果没有bin/gn
,请确保已运行:
python3 tools/git-sync-deps
//窗口下,用python.exe
可用构建参数
列表,查看gn/skia.gni
,或运行:
bin/gn args out/Debug --list
//窗口下,用gn.exe
GN
允许多个构建目录
共存;每个版本都可按需
单独配置.如:
bin/gn gen out/Debug
bin/gn gen out/Release --args='is_debug=false'
bin/gn gen out/Clang --args='cc="clang" cxx="clang++"'
bin/gn gen out/Cached --args='cc_wrapper="ccache"'
bin/gn gen out/RTTI --args='extra_cflags_cc=["-frtti"]'
生成构建文件
后,运行Ninja
来编译和链接Skia
:
ninja -C out/Static
如果缺少
某些头文件,请安装相应依赖项
:
tools/install_dependencies.sh
要拉取
新更改并重新生成
,请如下:
git pull
python tools/git-sync-deps
ninja -C out/Static
安卓
要构建适合安卓
的Skia
,需要AndroidNDK
.
如果没有NDK
但有权访问CIPD
,则可用以下
命令之一来取我们的机器人
使用的NDK
:
./bin/fetch-sk
./bin/sk asset download android_ndk_linux /tmp/ndk # Linux上
./bin/sk asset download android_ndk_darwin /tmp/ndk # Mac上
./bin/sk.exe asset download android_ndk_windows C:/ndk # Windows上
生成GN
构建文件时,传递路径
给ndk
和期望target_cpu
:
bin/gn gen out/arm --args='ndk="/tmp/ndk" target_cpu="arm"'
bin/gn gen out/arm64 --args='ndk="/tmp/ndk" target_cpu="arm64"'
bin/gn gen out/x64 --args='ndk="/tmp/ndk" target_cpu="x64"'
bin/gn gen out/x86 --args='ndk="/tmp/ndk" target_cpu="x86"'
其他参数,如is_debug
和is_component_build
继续工作.调整ndk_api
可让你访问较新的安卓
功能,如Vulkan
.
要在安卓
设备上测试,请推送二进制文件和资源
过来,然后照常
运行.如发现bin/droid
很方便.
ninja -C out/arm64
adb push out/arm64/dm /data/local/tmp
adb push resources /data/local/tmp
adb shell "cd /data/local/tmp; ./dm --src gm --config gl"
Chrome
操作系统
要为armChromeOS
设备交叉编译Skia
,需要如下条件:
1,Clang4
或更高版本
2,一个armhf sysroot
3,要链接的arm,chromebook
上的(E)GLlib
文件.
要为x86ChromeOS
设备编译Skia
,只需要Clang
和lib
文件.
如果有权访问CIPD
,则可如下
取这些内容:
./bin/sk asset download clang_linux /opt/clang
./bin/sk asset download armhf_sysroot /opt/armhf_sysroot
./bin/sk asset download chromebook_arm_gles /opt/chromebook_arm_gles
./bin/sk asset download chromebook_x86_64_gles /opt/chromebook_x86_64_gles
如果无权使用这些资产,见armhf_sysroot,chromebook_arm_gles
和chromebook_x86_64_gles
的README.md
文件,了解如何创建
这些资产.
1
2
3
文件
就位后,生成类似
以下内容的GN
参数:
//#ARM
cc= "/opt/clang/bin/clang"
cxx = "/opt/clang/bin/clang++"
extra_asmflags = ["--target=armv7a-linux-gnueabihf","--sysroot=/opt/armhf_sysroot/","-march=armv7-a","-mfpu=neon","-mthumb",
]
extra_cflags=["--target=armv7a-linux-gnueabihf","--sysroot=/opt/armhf_sysroot","-I/opt/chromebook_arm_gles/include","-I/opt/armhf_sysroot/include/","-I/opt/armhf_sysroot/include/c++/4.8.4/","-I/opt/armhf_sysroot/include/c++/4.8.4/arm-linux-gnueabihf/","-DMESA_EGL_NO_X11_HEADERS","-funwind-tables",
]
extra_ldflags=["--sysroot=/opt/armhf_sysroot","-B/opt/armhf_sysroot/bin","-B/opt/armhf_sysroot/gcc-cross","-L/opt/armhf_sysroot/gcc-cross","-L/opt/armhf_sysroot/lib","-L/opt/chromebook_arm_gles/lib","--target=armv7a-linux-gnueabihf",
]
target_cpu="arm"
skia_use_fontconfig = false
skia_use_system_freetype2 = false
skia_use_egl = true
//# x86_64
cc= "/opt/clang/bin/clang"
cxx = "/opt/clang/bin/clang++"
extra_cflags=["-I/opt/clang/include/c++/v1/","-I/opt/chromebook_x86_64_gles/include","-DMESA_EGL_NO_X11_HEADERS","-DEGL_NO_IMAGE_EXTERNAL",
]
extra_ldflags=["-stdlib=libc++","-fuse-ld=lld","-L/opt/chromebook_x86_64_gles/lib",
]
target_cpu="x64"
skia_use_fontconfig = false
skia_use_system_freetype2 = false
skia_use_egl = true
如常,使用ninja
编译dm
(或其他可执行文件
).
通过ssh
推送二进制文件
到chromebook
,并使用glesGPU
配置如常运行dm
.
默认,按noexec
标记大多数Chromebook
的主目录分区
.为避免"拒绝权限"错误,请如下:
sudo mount -i -o remount,exec /home/chronos
Mac
Mac
用户想传递--ide=xcode
给bin/gn gen
来生成Xcode
项目.
默认,MacGN
版本假定使用IntelCPU
.如果要针对AppleSilicon
(M1
及更高版本)构建,请添加一个gn
参数来设置target_cpu="arm64"
:
bin/gn gen out/AppleSilicon --args='target_cpu="arm64"'
Google
员工应参考go/skia-corp-xcode
.
Python
Apple
提供的Python
版本已过时了几个版本,而且周知,其与构建系统的交互很差.建议从https://www.python.org/downloads/
安装最新的Python
正式版本.然后运行"Applications/Python3.11/InstallCertificates.command"
.
iOS
系统
运行GN
以生成构建文件.设置target_os="ios"
以针对iOS
构建.默认值为target_cpu="arm64"
.要使用iOS
模拟器,请设置ios_use_simulator=true
并设置target_cpu
为Mac
架构.
在IntelMac
上,单独设置target_cpu="x64"
也会针对iOS
模拟器.
bin/gn gen out/ios64 --args='target_os="ios"'
bin/gn gen out/ios32 --args='target_os="ios" target_cpu="arm"'
bin/gn gen out/iossim-apple --args='target_os="ios" target_cpu="arm64" ios_use_simulator=true'
bin/gn gen out/iossim-intel --args='target_os="ios" target_cpu="x64"'
这还会打包(并为设备签名
)iOS
测试二进制文件.默认为Google
签名标识和预配置
文件.要使用其他参数,请设置GN
的skia_ios_identity
参数,以匹配
代码签名标识,并及skia_ios_profile
来匹配预配置
文件名,如
skia_ios_identity=".*Jane Doe.*"
skia_ios_profile="iPad Profile"`
可在命令行
上键入security find-identity
来查找标识列表
.在Apple
开发者网站上提供预配置文件名
.
或,skia_ios_profile
也可以是mobileprovision
文件的绝对路径
.
如果缺少Google
签名标识或配置文件
,则要通读go/appledev
.
对已签名的包,用ios-deploy
来安装和运行
它们:
ios-deploy -b out/Debug/dm.app -d --args "--match foo"
或,可传递--ide=xcode
给bin/gn gen
来生成Xcode
项目.如果使用的是Xcode
版本10
或更高版本,则可能需要转到项目设置,并验证构建系统
:是否设置为LegacyBuildSystem
.
可设置ios_min_target
参数来部署早于当前SDK
设备的操作系统:
ios_min_target = "<major>.<minor>"
其中<major>.<minor>
是设备上的iOS
版本,如12.0
或11.4
.
窗口
Skia
可用VS2017
或2019
在Windows
上构建.如果GN
找不到,它会打印一条错误消息.此时,可用win_vc
来传递VC
路径给GN
.
可用免费的VS2017
或2019
生成工具编译Skia
.
机器
使用打包的2019
年工具链,Google
员工可如下下载:
./bin/sk.exe asset download win_toolchain C:/toolchain
然后,可设置GN
参数,来传递VC
和SDK
路径给GN
:
win_vc = "C:\toolchain\VC"
win_sdk = "C:\toolchain\win_sdk"
该工具链是用target_cpu="x86"
设置支持32
位构建的唯一方式.
Skia
构建假定PATHEXT
环境变量包含".EXE"
.
强烈推荐:用clang-cl
构建
Skia
使用仅在用clang
构建Skia
时优化而生成的代码
.其他编译器
则是通用的未优化代码
.
光设置gn
的cc
和cxx
参数,并不能用clang-cl
构建.在窗口
上会忽略这些变量
.相反,设置clang_win
变量为LLVM
安装目录.
如果把从在此下载的构建预的LLVM
安装到如下:
clang_win = "C:\Program Files\LLVM"
遵循标准的Windows
路径规范,而不是MinGW
约定(如,C:\Program Files\LLVM
而不是/c/ProgramFiles/LLVM
).
VS
方法
如果使用VS
,则可传递--ide=vs
给bin/gngen
以生成all.sln
.在配置的GN
目录中指定
该方法,且只会构建/运行
该配置.
如果要支持多个GN
配置的VS
方法,可用助手脚本.它要求所有GN
目录都在out
目录中.首先,如常创建所有GN
配置.
对每个bin/gn gen
,传递--ide=vs
.然后:
python3 gn/gn_meta_sln.py
//窗口用,python.exe
这样创建了新的特化输出
目录和out/sln/skia.sln
方法文件.它为每个GN
配置提供一个方法配置
,并支持构建和运行
它.
它还根据所选方法配置中的预处理定义
,调整非活动代码块的语法高亮.
窗口ARM64
ARM
上有对Windows10
的早期实验性支持.这目前需要(最新版本的)MSVC
,及VS
安装程序中ARM64
单个组件的VisualC++
编译器和库.
对Google
员工来说,win_toolchain
资产包括ARM64
编译器.
要使用该工具链,请设置target_cpuGN
参数为"arm64"
.注意,ARM
上的Windows10
不支持OpenGL
,因此会存根Skia
的GL
后端,而无法正常工作.支持ANGLE
:
bin/gn gen out/win-arm64 --args='target_cpu="arm64" skia_use_angle=true'
这生成一个可在DM
中使用软件或ANGLE
后端的Skia
版本.Viewer
仅在使用--backendangle
启动时有效,因为软件后端试使用OpenGL
来显示窗口内容.
CMake
添加了一个GN-to-CMake
转换器,主要针对喜欢CMake
项目描述的IDE
.
bin/gn gen out/config --ide=json --json-ide-script=../../gn/gn_to_cmake.py
这篇关于2312skia,10构建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!