Forum général.général compilation dans un tmpfs

Posté par .
2
18
mar.
2012

Hi,

J'ai divers répertoires sources dans /opt.
Je voudrais compiler ces fichiers dans /tmp (qui grace à mon /etc/fstab est un tmpfs).
Comment dois-je faire ?
Dois faire un cp des sources dans /tmp, compiler dans ce /tmp et utiliser un script rc.local.shutdown qui copie le contenu de /tmp dans /opt ?
Ou dois-je utiliser une option de .configure ou make pour lui dire de mettre les fichiers objets dans /tmp ?

Merci et bonne fin de weekend !

PS : je tourne en Arch GNU/Linux et le but de la manipulation est de gagner du temps et d'éviter de solliciter inutilement mon SSD M4

  • # man gcc propose quelques options

    Posté par . Évalué à 5.

    une option de compilation pour carrement ne pas utiliser de fichier temporaire

    -pipe
    Use pipes rather than temporary files for communication between the various stages of compilation. This fails to work on some systems where the assembler is unable to read from a pipe; but the GNU assembler has no trouble.

    ou une variable d'environnement pour definir ou seront placé les fichiers temporaires

    TMPDIR
    If TMPDIR is set, it specifies the directory to use for temporary files. GCC uses temporary files to hold the output of one stage of compilation which is to be used as input to the next stage: for example, the output of the preprocessor, which is the input to the compiler proper.

    • [^] # Re: man gcc propose quelques options

      Posté par . Évalué à 1.

      Hi !

      Merci beaucoup !

      Si je comprends bien, voici les avantages et inconvénients de ces solutions :

      Dans un tmpfs :

      • si on modifie ne serait-ce qu'une ligne de code sur 1 million et qu'on a rebooté depuis la dernière compilation, alors il faut tout recompiler car le reboot a purgé /tmp
      • gain de temps (pour du code que l'on ne modifie pas) et d'espace
      • on épargne son SSD

      TMPDIR pointé vers /tmp (tmpfs) :

      • Idem ci-dessus
      • très simple à mettre en place car c'est juste une variable d'environnement

      -pipe :

      • Plus compliqué à mettre en place car il faut modifier les Makefiles soit même

      Je pense opter pour le TMPDIR !

      +

      • [^] # Re: man gcc propose quelques options

        Posté par (page perso) . Évalué à 5.

        -pipe :
        Plus compliqué à mettre en place car il faut modifier les Makefiles soit même

        En principe, il suffit de changer la valeur de CFLAGS dans ton environnement.

        Ensuite, il y a des versions de Make qui ont une fonction objdir qui permet de définir un dossier où sont stockés les fichiers produits par la compilation (les .o, etc.). Si ton Make dispose d'une telle fonction, choisir comme objdir un dossier situé sur un périphérique différent des sources permet de compiler plus rapidement, le meilleur gain allant à un tmpfs si tu as de la RAM et du cache à revendre.

        Bein-sûr, si tu veux conserver ces fichiers, il vaut mieux les recopier dans un endroit sûr… (non tmpfs) quitte à les recopier sur un tmpfs après chaque reboot, cela te fera gegner du temps pour tes mises au point.

        Une autre fonction intéressante pour toi est la possiblité de monter un dossier sur un autre: tu peux monter un tmpfs sur ton dossier objdir, les lectures se font alors sur l'objdir et les écritures sur le tmpfs (utile si tu compiles beaucoup et souhaite préserver ton SSD). Dans FreeBSD, cela s'appelle un unionfs, Linux sait faire aussi mais je ne connais pas le nom.

        • [^] # Re: man gcc propose quelques options

          Posté par (page perso) . Évalué à 5. Dernière modification le 18/03/12 à 13:41.

          Reste le problème de bien comprendre de quoi l'on parle en matière de fichiers temporaires de compilation. Ainsi, le plus souvent, les .o — par exemple — ne seront pas considérés comme des fichiers temporaires. Du coup les solutions à base de TMPDIR ou de -pipe n'épargnerons que modérément un SSD.

          Du coup, j'utilise un tmpfs pour mes compilations ; avec gentoo, cela se fait très simplement pour les ebuild. Si je devais faire une compilation manuelle (et que je veuille réellement le faire en répertoire temporaire), j'utiliserais des commandes dans ce genre:

          cd /tmp
          make -f /vers/mon/projet/makefile

          ou bien

          /vers/mon/projet/configure
          cd /tmp
          make

          Considérant que la plupart des makefiles et scripts configure sont suffisamment bien faits pour être utilisables depuis un répertoire distant de celui d'origine.

          • [^] # Re: man gcc propose quelques options

            Posté par . Évalué à 1.

            Hi,

            Merci pour vos réponses.
            Je crois que tout compte fait, je vais continuer à compiloner sur /opt, donc sur le SSD. De toute façon, ce n'est pas comme si je compilonais tous les jours… Je ne suis pas Linus !

            Mais vos réponses n'en restent pas moins très intéressantes.

            +

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.