网上有很多关于编译chrome的文章,不知道为什么他们从下载到编译都一直那么顺利,我生成个project却困难重重。
我先说我生成project时遇到的问题:
1、在用gclient sync时,不能更新webkit,http://svn.webkit.org服务器访问不了。
2、把 source tarball下载下来后,不更新,执行runhooks 命令失败,原因是不能解压toolchain_win_x86.tar.bz2。
第一个问题解决不了,所以还是只能用第二个来编译chrome。
步骤:
1、下载 source tarball源码压缩包,我的是r131936版的,用的是7Zip解压的。
2、下载depot_tools.zip 解压后设置环境变量,然后执行gclient --force 安装svn和python。
3、执行gclient runhooks生成project,执行成功的,就能开始编译了,不成功的接着往下看。
我遇到的不成功是因为不能解压.tar.bz2文件,其他的应该再具体分析。
在执行gclient runhooks时会下载两个文件一个是toolchain_win_x86.tar.bz2,一个是naclsdk_win_x86.tgz,存放在src\native_client\toolchain\.tars\目录下,对应的url为
http://commondatastorage.googleleapis.com/nativeclient-archive2/x86_toolchain/r8169/toolchain_win_x86.tar.bz2
http://commondatastorage.googleleapis.com/nativeclient-archive2/toolchain/8169/naclsdk_win_x86.tgz
或者通过修改src\native_client\build\download_toolchains.py来获得,在102行(可能会变)
if not download_utils.SyncURL(url, filepath, stamp_dir=stamp_dir,
min_time=min_time, hash=hash,
keep=keep, verbose=verbose):
return False
在此处可以通过print url来查看。
,然后再次运行,便能在控制台上看到输出的信息。为了方便我直接用浏览器把那两个文件下了下来,放到src\native_client\toolchain\.tars\下面,然后注释了上面那条下载文件的语句。
接着往下面走,gclient runhooks会在src\native_client\toolchain\下创建一个临时文件夹,把下载的文件解压到这个文件夹中,然后把解压后的第二级目录移动到src\native_client\toolchain\下,总之就是把toolchain_win_x86.tar.bz2中的toolchain\win_x86移动到src\native_client\toolchain\下,把naclsdk_win_x86.tgz中的sdk\nacl-sdk移动到src\native_client\toolchain\下,并重命名为win_x86_newlib。
过程了解清楚了,然后就能模拟程序的动作了,先把toolchain_win_x86.tar.bz2解压出来(windows下不知道为什么不能解压成功,我用linux解压的)取出toolchain\win_x86到src\native_client\toolchain\tmp(随便建的文件夹),然后用7Zip解压naclsdk_win_x86.tgz,取出sdk\nacl-sdk动到src\native_client\toolchain\tmp,并重命名为win_x86_newlib。然后开始修改程序,具体修改如下:
为了节省时间,去掉下载文件的代码chromium\src\native_client\build\download_toolchains.py 102行
#if not download_utils.SyncURL(url, filepath, stamp_dir=stamp_dir,
# min_time=min_time, hash=hash,
# keep=keep, verbose=verbose):
# return False
去掉解压相关的代码chromium\src\native_client\build\download_toolchains.py 115行
try:
#修改解压目录,自己指定上面两个解压后的路径
untar_dir = 'I:\\Projects\\OpenSource\\Chrome\\svn_src\\home\\chrome-svn\\tarball\\chromium\\src\\native_client\\toolchain\\tmp'
#print untar_dir
tar = cygtar.CygTar(filepath, 'r:*')
curdir = os.getcwd()
os.chdir(untar_dir)
try:
#tar.Extract()//不再解压了
tar.Close()
finally:
os.chdir(curdir)
if not keep:
os.remove(filepath)
# TODO(bradnelson_): get rid of this when toolchain tarballs flattened.
if 'arm' in flavor or 'pnacl' in flavor:
src = os.path.join(untar_dir)
elif 'newlib' in flavor:
src = os.path.join(untar_dir, 'sdk', 'nacl-sdk')
else:
src = os.path.join(untar_dir, 'toolchain', flavor)
#download_utils.MoveDirCleanly(src, dst)//去掉移动目录的代码
finally:
print 'finally'//替换了下面的语句
#download_utils.RemoveDir(untar_dir)//去掉清除文件的代码,也可以不去
然后再执行gclient runhooks就应该能生成project了。然后就开始编译了,暂时还没开始编译,先不写了。
时间:2012-05-08
作者:lhf