现在skia只能使用vs2015和vs2017编译了,请事先安装好vs2015或者vs2017,安装好git。
1.先现在依赖工具(首先的配置好vpn):
git clone 'https://chromium.googlesource.com/chromium/tools/depot_tools.git'
然后设置window环境变量path中添加depot_tools的路径,例如:D:\depot_tools。
2.使用git下载源码:
git clone https://skia.googlesource.com/skia.git
cd skia
python tools/git-sync-deps
3.编译源码:
打开cmd,切换到skia目录。
gn gen out/x862015 --ide="vs" --args="is_debug=true target_cpu=\"x86\" win_vc=\"ddddd\"" --sln="deskiax86"
将会生成vs工程,由于我的vc目录含有空格,故win_vc=“vc路径””,是无效的,用vs打开sln工程,此时依然无法编译。
4.修改toolchain.ninja文件。
源文件中的
rule cc
command = cmd /c C:/Program Files (x86)/Windows Kits/10/bin/SetEnv.cmd /x86 && "ddddd/bin/amd64/cl.exe" /nologo /showIncludes /FC @${out}.rsp /c ${in} /Fo${out} /Fd"${target_out_dir}/${label_name}_c.pdb"
description = compile ${in}
rspfile = ${out}.rsp
rspfile_content = ${defines} ${include_dirs} ${cflags} ${cflags_c}
deps = msvc
rule cxx
command = cmd /c C:/Program Files (x86)/Windows Kits/10/bin/SetEnv.cmd /x86 && "ddddd/bin/amd64/cl.exe" /nologo /showIncludes /FC @${out}.rsp /c ${in} /Fo${out} /Fd"${target_out_dir}/${label_name}_c.pdb"
description = compile ${in}
rspfile = ${out}.rsp
rspfile_content = ${defines} ${include_dirs} ${cflags} ${cflags_cc}
deps = msvc
rule asm
command = cmd /c C:/Program Files (x86)/Windows Kits/10/bin/SetEnv.cmd /x86 && ddddd/bin/amd64/ml.exe /nologo /c /Fo ${out} ${in}
description = assemble ${in}
rule alink
command = cmd /c C:/Program Files (x86)/Windows Kits/10/bin/SetEnv.cmd /x86 && ddddd/bin/amd64/lib.exe /nologo /ignore:4221 ${arflags} /OUT:${out} @${out}.rsp
description = link ${out}
rspfile = ${out}.rsp
rspfile_content = ${in_newline}
rule solink
command = cmd /c C:/Program Files (x86)/Windows Kits/10/bin/SetEnv.cmd /x86 && ddddd/bin/amd64/link.exe /nologo /IMPLIB:${output_dir}/${target_output_name}${output_extension}.lib /DLL /OUT:${output_dir}/${target_output_name}${output_extension} /PDB:${output_dir}/${target_output_name}${output_extension}.pdb @${output_dir}/${target_output_name}${output_extension}.rsp
description = link ${out}
rspfile = ${output_dir}/${target_output_name}${output_extension}.rsp
rspfile_content = ${in_newline} ${libs} ${solibs} ${ldflags}
restat = 1
rule link
command = cmd /c C:/Program Files (x86)/Windows Kits/10/bin/SetEnv.cmd /x86 && ddddd/bin/amd64/link.exe /nologo /OUT:${root_out_dir}/${target_output_name}${output_extension} /PDB:${root_out_dir}/${target_output_name}${output_extension}.pdb @${root_out_dir}/${target_output_name}${output_extension}.rsp
description = link ${out}
rspfile = ${root_out_dir}/${target_output_name}${output_extension}.rsp
rspfile_content = ${in_newline} ${libs} ${solibs} ${ldflags}
rule stamp
command = cmd.exe /c echo > ${out}
description = stamp ${out}
rule copy
command = python.bat D:/work/Projects/skia/skia/gn/cp.py ${in} ${out}
description = copy ${in} ${out}
替换成
rule cc
command = ninja -t msvc -e environment.x86 -- "d:\program files (x86)\microsoft visual studio 14.0\vc\bin\amd64_x86/cl.exe" /nologo /showIncludes @${out}.rsp /c ${in} /Fo${out} /Fd"${target_out_dir}/${label_name}_c.pdb"
description = CC ${out}
rspfile = ${out}.rsp
rspfile_content = ${defines} ${include_dirs} ${cflags} ${cflags_c}
deps = msvc
rule cxx
command = ninja -t msvc -e environment.x86 -- "d:\program files (x86)\microsoft visual studio 14.0\vc\bin\amd64_x86/cl.exe" /nologo /showIncludes @${out}.rsp /c ${in} /Fo${out} /Fd"${target_out_dir}/${label_name}_cc.pdb"
description = CXX ${out}
rspfile = ${out}.rsp
rspfile_content = ${defines} ${include_dirs} ${cflags} ${cflags_cc}
deps = msvc
rule rc
command = D:/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py rc-wrapper environment.x86 rc.exe ${defines} ${include_dirs} /fo${out} ${in}
description = RC ${out}
rule asm
command = D:/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py asm-wrapper environment.x86 ml.exe ${defines} ${include_dirs} ${asmflags} /c /Fo${out} ${in}
description = ASM ${out}
rule alink
command = D:/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py link-wrapper environment.x86 False lib.exe /nologo ${arflags} /OUT:${out} @${out}.rsp
description = LIB ${out}
rspfile = ${out}.rsp
rspfile_content = ${in_newline}
rule solink
command = D:/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py link-wrapper environment.x86 False link.exe /nologo /IMPLIB:${output_dir}/${target_output_name}${output_extension}.lib /DLL /OUT:${output_dir}/${target_output_name}${output_extension} /PDB:${output_dir}/${target_output_name}${output_extension}.pdb @${output_dir}/${target_output_name}${output_extension}.rsp
description = LINK(DLL) ${out}
rspfile = ${output_dir}/${target_output_name}${output_extension}.rsp
rspfile_content = ${libs} ${solibs} ${in_newline} ${ldflags}
pool = build_toolchain_link_pool
restat = 1
rule solink_module
command = D:/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py link-wrapper environment.x86 False link.exe /nologo /DLL /OUT:${output_dir}/${target_output_name}${output_extension} /PDB:${output_dir}/${target_output_name}${output_extension}.pdb @${output_dir}/${target_output_name}${output_extension}.rsp
description = LINK_MODULE(DLL) ${out}
rspfile = ${output_dir}/${target_output_name}${output_extension}.rsp
rspfile_content = ${libs} ${solibs} ${in_newline} ${ldflags}
pool = build_toolchain_link_pool
rule link
command = D:/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py link-wrapper environment.x86 False link.exe /nologo /OUT:${output_dir}/${target_output_name}${output_extension} /PDB:${output_dir}/${target_output_name}${output_extension}.pdb @${output_dir}/${target_output_name}${output_extension}.rsp
description = LINK ${out}
rspfile = ${output_dir}/${target_output_name}${output_extension}.rsp
rspfile_content = ${in_newline} ${libs} ${solibs} ${ldflags}
pool = build_toolchain_link_pool
rule stamp
command = D:/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py stamp ${out}
description = STAMP ${out}
rule copy
command = D:/depot_tools/win_tools-2_7_6_bin/python/bin/python.exe ../../build/toolchain/win/tool_wrapper.py recursive-mirror ${in} ${out}
description = COPY ${in} ${out}
然后需要把environment.x86放在sln工程目录下。将build文件拷贝到skia目录中去即可