Cet article donne les instructions sur la façon de compiler Firefox OS pour les appareils Flame en utilisant un système Mac OS X comme plate-forme de compilation.
Préparation de l'environnement de compilation
La première étape consiste à installer les prérequis pour la compilation comme d'habitude. Installez ensuite binutils afin que la commande objdump
soit disponible pour les builds de débogage :
brew install binutils
Créez une image disque en utilisant le système de fichiers journalisé et sensible à la casse HFS+ puis montez l'image avec les commandes suivantes.
hdiutil create -volname 'firefoxos' -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/firefoxos.sparseimage open ~/firefoxos.sparseimage cd /Volumes/firefoxos/
Note : Comme l'image est créée en tant qu'image de type "sparse", seuls les blocs du disque réellement utilisés prendront de l'espace disque sur le support physique. Cela signifie qu'une image de 40 Go, comme celle ci-dessus, ne prendra pas vraiment jusqu'à 40 Go d'espace. Au lieu de ça, elle va croître progressivement au fur et à mesure que vous y écrirez des données.
Clonage du dépôt B2G
Évidemment, avant de pouvoir lancer votre première compilation, il est nécessaire de cloner le dépôt B2G. Il est important de noter que cela ne va pas tout récupérer. Seuls le système de construction et les utilitaires de configuration seront obtenus. La quasi-totalité du code proprement dit se trouve dans le principal dépôt Mercurial de Mozilla ; ces fichiers seront rapatriés plus tard lors du processus de configuration.
Pour cloner le dépôt, utilisez git :
git clone git://github.com/mozilla-b2g/B2G.git
Une fois l'opération terminée (ça ne devrait prendre qu'une minute avec une connexion rapide), utilisez cd
pour aller dans le répertoire B2G :
cd B2G
Configuration de B2G pour le flame
Après avoir récupéré le cœur du système de construction de B2G, vous devez le configurer pour l'appareil sur lequel vous prévoyez de l'installer ; dans le cas présent, il s'agit du "flame". Exécutez la commande suivante depuis le répertoire B2G :
./config.sh flame-kk
C'est à ce moment que la plus grande partie du code sera téléchargée. Le code source faisant environ une quinzaine de giga-octets, le téléchargement va prendre un certain temps même avec une connexion internet rapide. Même avec une bonne connexion haut-débit, cela peut prendre une heure ou davantage.
Note : Sérieusement, cela prendra vraiment énormément de temps si vous avez une connexion Internet plutôt lente. Tenez-en compte (ainsi que des coûts de connexion au méga-octet que vous pourriez avoir à payer) avant d'effectuer cette étape.
Sauvegarde des fichiers importants de l'appareil
Avant de commencer le processus d'installation, il est important de faire une sauvegarde de certains fichiers clés de l'appareil. Ceux-ci seront nécessaires si vous avez besoin de reflasher l'appareil.
À ce stade, branchez votre Flame s'il ne l'était pas déjà ; le processus de configuration aura besoin d'y accéder. Utilisez la commande adb devices
pour vérifier s'il est connecté :
adb devices -l
Seront listés tous les appareils compatibles Android ou B2G connectés. Si le vôtre n'est pas dans la liste, c'est que quelque chose n'est pas connecté correctement.
Après avoir obtenu la confirmation que l'appareil est bien connecté, vous pouvez réaliser la sauvegarde avec les commandes suivantes :
mkdir flame-backup cd flame-backup adb pull /system system adb pull /data data
À noter, si vous compilez pour la première fois, vous pouvez décider de partir sur la version la plus récente de l'image de base du flame ; voir https://developer.mozilla.org//fr/Firefox_OS/Guide_Telephone_Developpeur/Flame/mettre_a_jour_Flame#Flashage_vers_la_dernière_image_(2.5) pour davantage de détails.
Contournement d'un problème de compilation avec Mac OS X
Un problème peut survenir lors de la compilation sur Mac OS X. La communauté Mozilla a conçu une solution pour celui-ci ; elle a été testée sur Mac OS X 10.9.4 "Mavericks."
mkfs.vfat non existant
Il est nécessaire d'installer un port de dosfstools
afin de pouvoir utiliser l'image.
brew create https://github.com/sv99/dosfstools-osx.git
Éditez ensuite la formule que brew
va utiliser pour construire le logiciel dosfstools
:
require "formula"
class Dosfstools < Formula
homepage "https://github.com/sv99/dosfstools-osx"
url "https://github.com/sv99/dosfstools-osx.git"
sha1 ""
def install
system "make", "install"
end
end
À présent, vous êtes prêt pour l'installer :
brew install dosfstools
Modification de la configuration pour contourner les bogues
Dans certaines circonstances, des bogues du système de construction peuvent empêcher la compilation sur Mac OS X. Les cas en question sont :
- Bug 1039223 - La compilation pour le flame échoue en indiquant l'absence de dt.img
- Bug 1027682 - [Flame][Build] Échec de la compilation sur Mac OS X 10.9, fichier elf.h introuvable
Utilisez votre éditeur de texte préféré pour créer un fichier appelé .userconfig
dans le répertoire B2G. Le contenu suivant doit être placé à l'intérieur de ce fichier .userconfig
:
# .userconfig for Flame build 14.08.2014
# osx repo change
# Bug 1039223 - Build for flame fails complaining of missing dt.img
# https://bugzilla.mozilla.org/show_bug.cgi?id=1039223
pushd device/qcom/common/dtbtool
patch -N << EOF
--- a/dtbtool/dtbtool.c
+++ b/dtbtool/dtbtool.c
@@ -616,7 +616,7 @@ int main(int argc, char **argv)
extract "qcom,msm-id" parameter
*/
while ((dp = readdir(dir)) != NULL) {
- if ((dp->d_type == DT_REG)) {
+ if ((dp->d_type == DT_REG||dp->d_type == DT_UNKNOWN)) {
flen = strlen(dp->d_name);
if ((flen > 4) &&
(strncmp(&dp->d_name[flen-4], ".dtb", 4) == 0)) {
EOF
popd
# Bug 1027682 - [Flame][Build] Failed to build on Mac OS X 10.9, elf.h file not found
# https://bugzilla.mozilla.org/show_bug.cgi?id=1027682
if [[ ! -e /usr/local/include/elf.h ]]; then
cp "${B2G_DIR}/external/elfutils/libelf/elf.h" /usr/local/include
echo "Bug 1027682: elf.h copied into /usr/local/include"
fi
# Disable First Time User experience
export NOFTU=1
echo "NOFTU = ${NOFTU}"
# Enable gaia developer mode
export DEVICE_DEBUG=1
echo "DEVICE_DEBUG = ${DEVICE_DEBUG}"
# Keeping both debug and non-debug objects
#export GECKO_PATH=${B2G_DIR}/mozilla-inbound
echo "GECKO_PATH = ${GECKO_PATH}"
export B2G_DEBUG=1
echo "B2G_DEBUG = ${B2G_DEBUG}"
#export GECKO_OBJDIR=${GECKO_PATH}/objdir-gonk
if [[ "${B2G_DEBUG}" != "0" ]]; then
export GECKO_OBJDIR=${GECKO_OBJDIR}-debug
fi
echo "GECKO_OBJDIR = ${GECKO_OBJDIR}"
Lancement de votre première compilation
Maintenant vous êtes enfin prêt à lancer la compilation ! Lancez-la de la même manière que pour toute autre compilation de Firefox OS :
./build.sh