Compiler Firefox OS pour le Flame sur Mac OS X

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.

Note : Ce guide part du principe que le célèbre gestionnaire de paquets Homebrew est installé. Si ce n'est pas le cas, vous allez devoir soit l'installer, soit installer un gestionnaire de paquets équivalent et apprendre à vous en servir.

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

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : jwhitlock, xdelatour
 Dernière mise à jour par : jwhitlock,