不久以前,KlayGE附带的boost破例升级到了1.56.0。随着boost的开发进度重回正轨,1.57又如期发布了。所以KlayGE第三方库的boost再次回到传统的只更新单数版本的规则。
在boost 1.57之前,any用的是C++原生的typeid,在使用的时候必须打开编译器的RTTI。于是我提交了一个补丁,让any使用Boost.Core中的一个替代typeinfo。由于现在有了更完善的Boost.TypeIndex,any可以直接使用它。这样就能在不打开RTTI的情况下使用any。再加上1.57更好地兼容了WinRT和Android,原先很多修改变得不必要了。这么一来,要在KlayGE支持的所有平台上都使用boost,需要修改的地方前所未有地少了。
接下去我还打算把Boost.SmartPtr等地方用到typeid的也都改成 ...
传统上,KlayGE集成的是单数版本的boost。但这次1.56的开发周期实在太长了,原定2月份出来的,足足延期了6个月。原因应该是他们在往git上迁移,并且在做模块化的重构。现在每个boost库的头文件、源文件和帮助文件都在一个单独的git库里,通过submodule的方式加到boostorg这个上层git库中。
还好,对使用boost来说,差别不大,照样可以永远原先的方法编译和使用。所以和升级Python不同的是,把boost升级到1.56.0没有遭遇太大的麻烦。
补丁
在之前的版本里,为了在WinRT和Android上使用boost,需要打很多补丁,修改很多地方才行。这些修改在这几个版本的boost里被逐渐集成进去,所以补丁的数量减少了很多。尤其是,微软的OpenTech团队直接 ...
自从2011年KlayGE在代码库中包含所有第三方库以来,Python一直都是基于3.2的版本,这几年来Python本身的发展都没跟上。最近打算把Python移植到WinRT平台,所以干脆先一鼓作气,更新到最新的3.4.1上。
升级3.4.1
把代码更新到3.4.1,虽然文件添加、删除、修改都很多,但cmake里只要做很少的修改,就能完成编译和执行。但原装的python仍然不支持android,所以还得把以前的补丁手工修改到新版本上。另外,默认情况下python用的是mbcs进行编译的,改成unicode之后有几个编译错误,也顺便修改了。纯unicode版本的好处是,Lib/encode目录下不再需要带着各种编码的.py文件,全都用utf-8就行了。
WinRT的支持
原装的python也不支持WinRT。如果直 ...
KlayGE的源代码包里带了包括boost在内的所有第三方库。如果使用完整版的boost,那么大小会吃不消的。因为只用了boost中很少的一部分(列表在这里),以前用的方法是手工删掉了libs和tools等目录下所有不使用子目录,以及帮助文件和例子。通过这样的缩减,已经让boost从356M减少到了96.8M。但是,头文件的目录仍不容易直接删减,因为互相依赖很大。
上周空明流转大牛说他在SALVIA里也遇到了类似的问题,打算用boost自带的bcp工具处理一下。所以我也做了一下测试,用bcp来砍掉所有不用的库:
bcp atomic chrono filesystem program_options regex system thread algorithm any array assert assign bind circular_buffer container foreach ...
KlayGE 4.4的开发刚刚开始。在目前的开发版本里,编译脚本有了较大的改进,速度提升、内存消耗降低。这里就先总结一下一些经验。
MSBuild
KlayGE的编译脚本原先是通过调用devenv,也就是Visual Studio的IDE来编译工程的。用户的普遍反映是编译信息不断滚动,很难看清是否有错误。前不久在编译Salvia的时候,看到空明大大的脚本输出通过不同颜色区分warning和error。问了一下才知道他调用的是MSBuild,本身就带颜色高亮。
MSBuild从VS2008开始就集成到Visual Studio了,在VS2010的时候已经全面接管了C++工程的编译。所以,如果调用devenv来编译一个工程,那么它的流程是:
启动VS IDE
启动MSBuild,调用cl和linker等
关闭VS IDE
...
KlayGE开发版本所需的一些第三方库升级了,包括:
Boost升级到1.46
Python升级到3.2
Cg升级到Feb 2011版
完整的第三方库列表和下载链接可以在这里找到
[zh]不少朋友都提出KlayGE应该提供一个编译好的第三方库和工具下载,现在可以在下载页面找到。[/zh]
[en]From user's feedback, KlayGE should provide all 3rd-party library and tools to simplify its compilation. Now the dependencies package can be found HERE.[/en]