Comprendre le fonctionnement d’OpenWRT

Publié le 12 avril 2008 par Goundoulf

OpenWRT étant l’avenir du projet OpenBox4, l’idée est d’en apprendre le fonctionnement progressivement dans le but ultime de le maîtriser totalement.

Cela permettra par la même occasion d’apprendre de GNU make dans toutes ses subtilités. Il peut être utile de se référer au manuel, ainsi qu’aux conventions d’écritures de Makefiles pour les logiciels GNU.

Il est également utile d’installer le paquet make-doc (c’est comme ça qu’il s’appelle sous Debian, il peut avoir un autre nom sur une autre distribution Linux) pour pouvoir s’y référer ultérieurement :

# aptitude install make-doc

Passons maintenant aux choses sérieuses

On va commencer par le Makefile principal, qui est le point d’entrée du système de compilation d’OpenWRT.

La première ligne est :

TOPDIR:=${CURDIR}

C’est le bon moment pour consulter la documentation :

$ info make

On cherche alors CURDIR (touche /, taper CURDIR, puis Entrée). Résultat :

For your convenience, when GNU `make’ starts (after it has processed
any `-C’ options) it sets the variable `CURDIR’ to the pathname of the
current working directory. This value is never touched by `make’
again: in particular note that if you include files from other
directories the value of `CURDIR’ does not change. The value has the
same precedence it would have if it were set in the makefile (by
default, an environment variable `CURDIR’ will not override this
value). Note that setting this variable has no impact on the operation
of `make’ (it does not cause `make’ to change its working directory,
for example).

Au lancement de make, la variable CURDIR reçoit le chemin du répertoire de travail courant, c’est-à-dire le répertoire contenant le Makefile courant. Cette variable gardera la même valeur dans tout le Makefile (à part si on la change explicitement bien sûr), et n’est pas affectée par une variable d’environnement du même nom. Le fait de changer la valeur de CURDIR n’a aucun impact sur le déroulement du make, en particulier cela ne changera pas le répertoire de travail courant.

On comprend bien alors l’intérêt de cette première ligne. Dans les sous-Makefiles qui seront appelés récursivement, la variable CURDIR va changer pour contenir successivement les différents chemins du répertoire de travail courant.

La variable TOPDIR, elle, conservera toujours la même valeur, le chemin du répertoire contenant le Makefile principal, c’est-à-dire le répertoire à la racine de l’arborescence d’OpenWRT.

Nous verrons par la suite que TOPDIR servira à désigner des sous-répertoires dans l’arborescence d’OpenWRT, sans dépendre du chemin absolu où il est installé.