Archive

Archive for October, 2015

如何在大陆构建 Firefox for Android

October 29th, 2015 No comments

大陆由于墙的缘故, 不仅Google的服务没有正确的部署, 所有依赖于Google的服务都会出现问题. Firefox for Android (以下称 Fennec) 需要使用 Android SDK 和 NDK 进行构建, 因此也就遇到了同样的问题, 导致了 Mozilla 仓库中的 mach bootstrap 命令无法正确执行.

一种方式是不使用 mach bootstrap 命令初始化的 toolchain, 利用你之前手工下载的 Android SDK/NDK 进行构建. 方法是配置 mozilla 仓库根目录下的 mozconfig 参数, 指定好路径.

另一种方式是死磕, 在 mach bootstrap 过程中加入一点手工的方法来绕过. 以下是方法:

  1. 首先你需要 google hosts 能够下载基本的SDK等; 具体可以自行上 github 上找找;
  2. 运行 mach bootstrap, 在尝试 refresh android repository addons list-2.xml 或者类似的文件的时候会显示读取失败.
  3. 手工的切换到 $HOME/.mozbuild 中的目录. 找到 Android 工具并运行, 一般是 $HOME/.mozbuild/android-sdk-linux/tools/android
  4. 这是就看到了熟悉的 Android SDK 管理页面. 在配置中取消 HTTPS, 强制使用 HTTP. 安装所有需要的 SDK.
  5. 回到 mozilla-central 目录下运行 mach build
  6. 这个时候可能会遇到说找不到正确的 SDK 和 NDK 路径, 这是因为 bootstrap 没有正确执行结束导致的. 解决方法是修改 mozconfig 配置文件中”–with-android-sdk”和”–with-android-ndk”选项, 指向具体的位置.

之后就可以执行 mach build & mach package 正确的编译出 apk 了.

PS: 当然还有一种最为高大上的方式就是VPN了…然而下载量很大的说…

SpiderMonkey 的版本号在代码中是如何传播的

October 27th, 2015 No comments

编译好的 SpiderMonkey JSShell 是有一个版本号的. 通过运行 js –version 可以看到(是Mozilla的版本, 不是1.7+,1.8这样的JS_VERSION). 例如我的构建版本输出的是44.0a1. 这个版本上是Mozilla仓库统一的版本号. 这个信息并不保存在 SpiderMonkey 源代码目录中, 而是保存于 Mozilla-Central(or gecko-dev) 仓库的 config/milestone.txt 目录下:

文件很简单. 就只有一个版本号.

之后, 在 SpiderMonkey 的 configure 脚本中, configure 脚本调用 $srcdir/python/mozbuild/mozbuild/milestone.py 读取 milestone.txt 并返回版本(子)字符串. 在脚本配置过程中使用到了 MOZILLA_VERSION、MOZILLA_UAVERSION、MOZILLA_SYMBOLVERSION 三种版本形式:

其中 MOZILLA_VERSION 又进一步的被分成 MOZJS_MAJOR_VERSION、MOZJS_MINOR_VERSION、MOZJS_PATCH_VERSION、IS_ALPHA 四个变量:

在本例中分别对应 44, 0, 1, a.

configure 获取到相关的信息之后, 将其写入到 js-config.h 以及 js-confdefs.h 两个文件中, 使得 JSShell 能够获得版本信息. 同时, configure 也将该信息写入 Makefile 文件, 用于在 make source-package 命令式, 将版本号正确的传递给 make-source-package.sh 脚本. make-source-package.sh 脚本可以简单的理解为一个打包脚本, 将 SpiderMonkey 在 mozilla-central 仓库中所有依赖的文件都抽取出来, 用于单独发布.

如何打包 SpiderMonkey 代码

October 27th, 2015 No comments

SpiderMonkey 提供了一个脚本make-source-package.sh来打包 SpiderMonkey 代码. 在configure生成的js/src/Makefile中, 包含了打包脚本的使用方法.

 

如果是在Debian/Ubuntu或Fedora这样的Linux系统下, 可以直接替换成以下命令生成:

对于make source-package而言, 生成的代码包会放置于./dist目录下. 注意目前make-source-package.sh并不能忽略掉js/src中的_DBG.OBJ_OPT.OBJ 这样的临时文件夹. 所以在打包的时候需要检查相关的目录中没有中间文件或临时文件.

2015开源开发工具大会(aka. HelloGCC 2015)

October 25th, 2015 No comments

转自: http://www.hellogcc.org/?p=34190

【大会简介】
2015开源开发工具大会是由HelloGCC(www.hellogcc.org)工作组举办的年度开源技术大会。我们希望通过自由,开放,共享的方式来增进大家相互的交流。目前话题主要涉及开源工具链,开源开发工具方面。感谢演讲者为我们贡献精彩的话题 ,感谢各单位和朋友对我们的赞助和支持,欢迎大家免费报名参加。
往年活动:
*) HelloGCC Workshop 2014: http://www.hellogcc.org/?p=33910
*) HelloGCC Workshop 2013: http://www.hellogcc.org/?p=33518
*) HelloGCC Workshop 2012: http://linux.chinaunix.net/hellogcc2012
*) HelloGCC Workshop 2011: http://linux.chinaunix.net/hellogcc2011
*) HelloGCC Workshop 2010: http://linux.chinaunix.net/hellogcc2010
*) HelloGCC Workshop 2009: https://sites.google.com/site/hellogccworkshop/hui-yi-ri-cheng

【日程安排】

2015年11月21日(周六)中国科学院计算技术研究所
14:00 – 14:30 入场、签到
14:30 – 15:30 Clang内部实现,邢明杰
15:30 – 16:30 SDCC,史斌
16:30 – 17:00 自由讨论

题目:Clang内部实现
演讲者:邢明杰
简介:基于clang-3.5.0版本的代码,介绍下clang(http://clang.llvm.org/)的总体架构和各模块的实现,主要包括:驱动器(Driver),前端(Frontend),核心库(Lex,Parser,Sema,AST)。

题目: Introduction to SDCC – A light-weight cross-compile tool-chain targetting 8-bit MCUs
演讲者:史斌
简介: SDCC is a retargettable, optimizing ANSI – C compiler suite that targets the Intel MCS51 based microprocessors (8031, 8032, 8051, 8052, etc.), Maxim (formerly Dallas) DS80C390 variants, Freescale (formerly Motorola) HC08 based (hc08, s08), Zilog Z80 based MCUs (z80, z180, gbz80, Rabbit 2000/3000, Rabbit 3000A, TLCS-90) and STMicroelectronics STM8. Work is in progress on supporting the Microchip PIC16 and PIC18 targets. It can be retargeted for other microprocessors. It includes sdcpp (the preprocessor), sdcc (the compiler), sdas (the assembler), sdld (the linker), ucsim (the simlulator), and a lots of other useful components.

Ben Shi works for a private company as a technical manager. He joined SDCC community in Nov 2013 for filling his spare time, and has made 130+ commits since then, invloving bug fixes in the front end and assembly optimization for the STM8 back end. He will brief introduce SDCC features and his work on it.

【大会地址】

中国科学院计算技术研究所,北京海淀区中关村科学院南路6号(大门在中关村南三街)

http://www.hellogcc.org/?p=34190

【赞助单位】

场地支持 http://www.ict.ac.cn