Tag: Compile

  • Slax的QtWebKit 2.3及QupZilla浏览器

    不知道Slax是什么?一个小型的模块化的KDE桌面Linux发行版。

    最近又跟浏览器干上了,本来就是一个小型发行版,所以不想塞一个Firefox、Chrome、Opera这种重型浏览器。之前一直在用rekonq浏览器,后来又来试了一试QupZilla,一样的QtWebKit内核,QupZilla的浏览体验倒好多了,很顺畅,没有Rekonq那种加载时一卡一卡的感觉。不过QupZilla的sb包有2MB,而Rekonq只有800+KB。

    现在Slax搭载的Qt 4.8.4,所以QtWebKit是官方仓库里比较老的QtWebKit 2.2,WebKit版本好象是534.xx,不支持桌面通知、WebGL、拼写检查等功能(大部分和HTML5相关)。不过现在好了,我上传了QtWebKit 2.3的buildscript,并且传了一个叫作qupzilla-next的buildscript,依赖新版的WebKit编译。

    对于想在Slax下获得更好的浏览体验的朋友,在终端下执行:

    slax activate qupzilla-next

    前几天Digia发布了Qt 4.8.5,包含最新的WebKit,所以如果Slax能在下一个版本更新Qt的话,就不需要额外加载qtwebkit-23这个包,可以方便很多。 大误,Qt 4.8.5只是小幅度更新QtWebKit,还是2.2……

  • Chromium OS内核标准编译教程

    上一篇文章写得略tricky,本文改为参考官方Kernel Configuration配合Google网上论坛搜集来的各种指南写成。

    If you’re reday. Let’s rock the Chromium OS!

    准备工作就不多讲了,内核源代码(kernel或者kernel-next,本文以kernel为例)至少要同步好。进入cros_sdk(chroot),下面的操作都是在cros_sdk下,不是在宿主Linux终端下。

    (more…)

  • 简易编译Chromium OS内核教程

    Chromium是「铬」的意思,所以本文标签我用了CrOS(Cr是化学元素铬缩写)。

    转入正题,这次来讲一下怎样给Chromium OS编译内核,当然编译Chromium OS的时候会自动把内核编译上,不过出于很多原因,我们会要修改内核编译的配置文件(.config)。如果说Linux的内核编译让人很头痛,那Chromium OS的内核编译可以说让人头痛欲裂了。

    首先得chroot进入编译Chromium OS的状态(看我上一篇关于编译Chromium OS的文章)。然后获取当前版本的内核源代码,慢慢等吧,要下载接近1G的代码(如果当初你下载的是完整代码而不是minimum layout的话,时间可能会节省很多)。

    (more…)

  • 自己编译Chrome OS的开源版Chromium OS

    Chrome OS和Chromium OS的关系就是Chrome和Chromium的关系。Chrome OS现在慢慢发展起来了,不过个人觉得短期内还是没必要入一台Chromebook,特别在天朝这个网络环境下,扯远了啊……国外的Hexxeh有每天自动编译更新的Chromium OS镜像下载,但是很遗憾,在我的笔记本(全AMD平台)上从来没有正常地运行过。一般都是和ATI显卡之间的问题,后来变成和Broadcom网卡驱动的问题……总之,我觉得还是自己来编译一个适合自己电脑的Chromium OS会舒服一点。

    (more…)

  • 自己编译ownCloud for Android

    之前介绍过ownCloud私有云服务了,下面讲一下怎么自己编译它的Android客户端。之所以要自己编译,原因有两点:

    • ownCloud在Play Store上要收费的,0.99刀
    • ownCloud在Play Store上限制了区域,即使愿意出钱也不能下载

    搭建一个Android SDK环境不要我说了吧?不会的自己找块Google这样的豆腐撞了……下面以Fedora 18 64位系统为例,讲一下我的过程。

    (more…)

  • Slax中关于KDE程序编译脚本的注意事项

    Slax是个非常优秀的Linux发行版,之前说过了,也介绍过制作Slax Bundle的buildscript书写。

    但是我今天在编译rekonq的时候遇到了点麻烦,一直提示出错,跑到IRC上#rekonq频道询问,人家告诉我是少了ksgmltools2,确实少了。我发邮件告诉Tomas M(Slax作者),这位仁兄告诉我Slax是特意去除这个组件的,并告诉我要在buildscript里对CMakeLists.txt打一下“补丁”,让程序编译过程去除掉Documentation(文档),这么一来我的rekonq终于编译成功了!

    去除文档的办法,是删掉CMakeLists.txt中的ADD_SUBDIRECTORY( doc ),当然我知道可以用文本编辑器去删掉,问题是您要写的是一个脚本在服务器上运行的,所以要用到一些简单的shell脚本来操作,相关行我贴在这里。

    cd ${SLAX_BUNDLE_NAME}-${SLAX_BUNDLE_VERSION}
    
    find | grep CMakeLists.txt | while read LINE; do
    cat "$LINE" | fgrep -v "add_subdirectory( doc )" 
    | fgrep -v "add_subdirectory(doc)" 
    | fgrep -v "add_subdirectory (doc)" 
    | fgrep -v "add_subdirectory ( doc )" 
    | fgrep -v "ADD_SUBDIRECTORY( doc )" >aaa
    mv aaa "$LINE"
    done

    另外一个需要注意的事情,就是对于cmake编译安装的软件,需要在cmake参数里加上 -DLIB_SUFFIX=”${SLAX_64_FLAG}” ,不然在64位系统中也会把libraries安装到/usr/lib而不是/usr/lib64,程序无法找到lib的情况。所以这点千万切记要加上这个参数。

    2013/02/06补充:(根据Michal发给我的邮件正文,下面详细贴出buildscript软件编译部分的正确示例)

    1) 当使用./configure时,

    CFLAGS="${SLAX_CFLAGS}" CXXFLAGS="${SLAX_CFLAGS}" ./configure ${SLAX_CONFIGURE_OPTIONS}

    2) 当使用cmake时(假定先执行了mkdir build && cd build了),

    cmake -DCMAKE_C_FLAGS:STRING="${SLAX_CFLAGS}" 
     -DCMAKE_CXX_FLAGS:STRING="${SLAX_CFLAGS}" 
     -DCMAKE_INSTALL_PREFIX=/usr 
     -DINCLUDE_INSTALL_DIR=/usr/include 
     -DCMAKE_BUILD_TYPE=Release 
     -DLIB_SUFFIX=${SLAX_64_FLAG} 
     -DLIB_INSTALL_DIR="${SLAX_LIBDIR}" 
     ..

    3) 当制作商业闭源软件的Bundle时,必须准备好32位和64位两份预编译包。

    if [ "${SLAX_64_FLAG}" = "64" ]; then
     #将64位预编译文件安装到 ${SLAX_BUNDLE_TARGET}
     else
     # 将32位预编译文件安装到 ${SLAX_BUNDLE_TARGET}
     fi

    如此才能确保服务器根据buildscript编译出来的Slax Bundle正确。

  • NetBSD编译安装Go和Node.js

    现在Go和Node.js都在pkgsrc-wip项目里面,wip意思是work in progress,可以理解为开发进程中的软件包,稳定后才会被采纳进入官方维护的pkgsrc,现在好歹有wip就知足吧。嗯,写这篇文章的目的是希望能有更多人来研究BSD系统,作为Unix的较为正统的分支,BSD在很多方面还是值得Linux学习的,当然这两个流派风格是迥异的。摸索摸索几个月,以后就在自己的EC2上部署NetBSD了!

    废话少说,直接上命令内容了。我安装了curl用来下载,你也可以用你自己喜欢的工具下载pkgsrc安装好。

    curl http://ftp7.jp.netbsd.org/pub/pkgsrc/stable/pkgsrc-2012Q3.tar.xz > /PATH/pkgsrc.tar.xz

    记得到时候自行修改pkgsrc-2012Q3,不可能指望今年年底还用去年第三季度的东西对吧。。。后面PATH表示路径,记得改成你相应的下载路径。下载很快的,前面讲过了,用的是最快的镜像点了,下载完成后就解压到系统里面,执行命令:

    tar xvzf /PATH/pkgsrc.tar.xz -C /usr

    等一会吧,解压出来好几百兆的文件呢,解压完毕后再来解压一个wip的source,先去pkgsrc-wip快照列表下载一个最新的下来(注意看一下文件尺寸,2013-01-03的那个文件只有400+KB是错误的文件,一般都是10M左右,不然下载下来也解不开),然后执行命令解压到系统:

    cd /usr/pkgsrc
     tar xvzf /path/to/pkgsrc-wip-DATEHERE-snapshot.tar.gz

    解压完成之后就可以开始编译Go和Node.js了,当然其它在wip中的软件也是这样编译安装!

    cd /usr/pkgsrc/wip/go
     make install

    上面的命令最后都是su切换到root账户下执行,免得提示没有权限。

    可惜的是,pkgsrc-wip并没有把软件源代码也塞进去,所以make install其实会执行一大段复杂的过程,包括获取源代码、解决依赖关系神马的,结果服务器是自动用主站服务器,所以速度是龟速(10KB/s)……耐心等待哦。

    至于Node.js的话,cd /usr/pkgsrc/wip/node && make install,其它软件的话自己去找找在哪个文件夹下cd进去然后make install就okay了!

  • 编译CM10 for W22PRO的相关过程记录

    先说一下git的操作好了,这个git其实我也是今年刚开始用,之前都是用svn的(subversion其实也不太会……说来这些版本控制工具我都记不住指令啊……)。

    因为蓝魔W22PRO用的是Amlogic MX(meson6)方案,而Christiantroy已经专心耕耘艾诺精灵2很久了,他在github上的很多项目,只要有jellybean-aml分支的基本就是需要fetch拿来用的。不过有一点问题的就是,最近这位大哥在搞CM10.1去了,repo都没有更新上游(CyanogenMod)的改动,所以其它的部分如果用CyanogenMod的上游代码就会造成一些问题。还好有强大的git帮我们合并这些更改。

    首先进入一些需要为Amlogic修改的目录(因为我已经做了这项工作了,减轻了各位的压力,大家直接fetch我的那些github项目就好了),git checkout jellybean-aml 确保在jellybean-aml这个分支里面,然后git remote -v看一下有没有上游CyanogenMod的repo,没有的话得先git remote add NAME git://XXXXXX 添加一个NAME远程仓库(这些全部大写的字母都是可以自行变动的),然后git fetch NAME把源码下载到本地,只需简单的一个git pull NAME jellybean就能把NAME仓库的jellybean分支合并到当前分支(jellybean-aml)了!如果有冲突的话会提示的,一般不会有冲突会自动merge并做一个ref节点,如果你没有自己开项目就这样好了。如果有的话(比如我),就需要git push MINE提交这次变动到自己的远程仓库(MINE)。再说一下啦,我已经做过这项工作了,短期内大家直接取我的项目源码就可以了。

    上面讲了那么多git的废话……下面讲一下编译。

    如果你还没有W22PRO的源码,请上我的非官方项目clone下来到合适的位置(如果你这不知道就不要看这篇文章了,谢谢……)

    cd /PATH_TO_CM/
     . build/envsetup.sh
     lunch
     make -j4

    老掉牙的几个步骤……lunch菜单选择cm_w22pro-userdebug那个就好了(输入数字回车),make -j4表示用四个线程并行编译。

    在我的笔电上每次从头完整的编译要2~3个小时。我的硬件配置?AMD 四核 2.0GHz,4G RAM(显然有点小,为了避免内存消耗完毕而出错终止,强烈建议创建一个swap分区或者swap文件,大小至少1G,建议4G以上)。

    还没有开始编译的记住了,放CM/Android源代码的那个分区建议40G以上,而且必须是EXT2/3/4或者BtrFS、XFS之类的Linux分区!

  • 编译蓝魔W30的CM10之源码准备

    大体参考CM的Wiki: http://wiki.cyanogenmod.org/wiki/Galaxy_Nexus_%28GSM%29:_Compile_CyanogenMod_9_%28Linux%29

    提示一下就是repo这个脚本需要翻墙才能下载成功。

    下面简单写一下终端操作的笔记:

    #获取CM10的代码
    repo init -u git://github.com/CyanogenMod/android.git -b jellybean
    repo sync
    #获取三星Galaxy S III的源码(因为W30的CPU和Galaxy S III是一样的,这里偷懒直接用CM的脚本获得相关源码)
    . build/envsetup.sh && breakfast i9300
    #获取CM的预编译文件
    vendor/cm/get-prebuilts

    好了,现在要做的就是这么多了。接下来就是对Galaxy S III的设备源码部分进行修改,使之匹配W30, 当然,要新开一个目录,等我初步完成后会在github上托管的,到时候还会回来更新本篇文章。 W30开源项目 (fork & play!)

    还需要获取三星的部分专利源码,找了半天,终于在GitHub找到了一个项目有的,

    git clone git://github.com/TheMuppets/proprietary_vendor_samsung.git -b jellybean

    同步这个项目后,把里面的文件夹都放在vendor/samsung/下面,然后修改vendor/samsung/smdk4412-common/proprietary/Android.mk这个文件,把ifneq ($(filter i9300 n7100 n8000 n8013,$(TARGET_DEVICE)),)改成ifneq ($(filter i9300 n7100 n8000 n8013 w30,$(TARGET_DEVICE)),) ,也就是在filter后面加上w30,不然的话不能正确调用一些共享依赖库会编译出错。