Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[EMERGE]régler les CFLAGS par paquet \o/
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
fabienZ
n00b
n00b


Joined: 12 Oct 2004
Posts: 34
Location: France

PostPosted: Tue Jul 11, 2006 8:29 am    Post subject: [EMERGE]régler les CFLAGS par paquet \o/ Reply with quote

C'est avec une joie indescriptible que j'ai découvert dans les recoins d'une ml, comment configurer proprement mes CFLAGS par paquet.

Et c'est avec la même joie que je vais tacher de vous l'expliquer au mieux.
Rien ne vaut un exemple.
Prennons une appli rapide à compiler : app-office/grisbi

il faut tout d'abord créer un dossier :
Code:
mkdir -p /etc/portage/env/app-office

ensuite créer un fichier "/etc/portage/env/app-office/grisbi" qui contient :
Code:
CFLAGS=-march="ce-que-vous-voulez -pipe"


et voilà, c'est tout !

NOTE: Au On peut aussi préciser le no de version et même le no de révision (qui doit être précisé dans le nom de fichier).
NOTE BIS : Ca marche avec n'importe qulle variable (CXXFLAGS, LDFLAGS etc ...)

Ceci fonctione grâce à /usr/portage/profiles/base/profile.bashrc qui est executé par emerge.

Bon je vous laisse, j'ai plein de trucs à configurer du coup :)
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3514
Location: Alsace (France)

PostPosted: Tue Jul 11, 2006 9:32 am    Post subject: Reply with quote

8O pitain je savais pas!!!!!!!!!!!!
_________________
le "lol" est aux boulets ce que le ";" est au programmeurs
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Tue Jul 11, 2006 10:15 am    Post subject: Reply with quote

Intéressant. Pour les CFLAGS je préfère toujours la solution du script dans /etc/portage/bashrc qui permet un réglage plus fin (juste ajouter ou retirer un cflag), mais pour régler d'autres variables d'environnement cette solution est beaucoup plus simple!
Back to top
View user's profile Send private message
yoyo
Bodhisattva
Bodhisattva


Joined: 04 Mar 2003
Posts: 4273
Location: Lyon - France

PostPosted: Tue Jul 11, 2006 10:38 am    Post subject: Reply with quote

KarnEvil wrote:
Intéressant. Pour les CFLAGS je préfère toujours la solution du script dans /etc/portage/bashrc qui permet un réglage plus fin (juste ajouter ou retirer un cflag), mais pour régler d'autres variables d'environnement cette solution est beaucoup plus simple!
Un réglage plus fin ? D'après ce que j'ai saisi de cette feature, il est possible de choisir des CFLAGS spécifiques pour chaque paquet, voir pour chaque version de paquet. J'ai du mal à comprendre comment on peut faire plus fin.
Mais d'un autre côté, je ne connais pas non plus la solution du script dans /etc/portage/bashrc. :roll: Tu peux nous en dire plus KarnEvil ?
_________________
La connaissance s'accroît quand on la partage.
JCB
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Tue Jul 11, 2006 11:21 am    Post subject: Reply with quote

yoyo wrote:
KarnEvil wrote:
Intéressant. Pour les CFLAGS je préfère toujours la solution du script dans /etc/portage/bashrc qui permet un réglage plus fin (juste ajouter ou retirer un cflag), mais pour régler d'autres variables d'environnement cette solution est beaucoup plus simple!
Un réglage plus fin ? D'après ce que j'ai saisi de cette feature, il est possible de choisir des CFLAGS spécifiques pour chaque paquet, voir pour chaque version de paquet. J'ai du mal à comprendre comment on peut faire plus fin.
Mais d'un autre côté, je ne connais pas non plus la solution du script dans /etc/portage/bashrc. :roll: Tu peux nous en dire plus KarnEvil ?

Oui désolé ce que j'ai dit étais un peu vague parce que j'étais pressé d'aller manger :)

Bref, pour le /etc/portage/bashrc:
http://gentoo-wiki.com/TIP_The_/etc/portage/bashrc_file

En gros, c'est un fichier qui est sourcé avant chaque emerge et qui permet de paramétrer l'environnement. Avec ce fichier on peut faire plein de choses, dont les CFLAGS par package, avec un /etc/portage/package.cflags qui s'utilise comme les /etc/portage/packages.use et compagnie (y'a quelques exemples écrits par les devs dans le wiki).

En creusant un peu et en utilisant les fonctions de portage on peu faire du versioning (=,>,etc.) et aussi modifier les CFLAGS de façon plus subtile, i.e. on peut non seulement les remplacer, mais aussi juste en ajouter ou retirer certains (je sais pas si c'est possible avec le /etc/portage/env ?), du coup on se retrouve avec un /etc/portage/package.cflags comme ça:
/etc/portage/package.cflags:

sys-apps/sed append -ftree-vectorize
>sys-libs/glibc-2.6.1 remove -ffast-math -ftrace
=sys-devel/gcc-4.0.1 replace -02 -03
...

J'avais écrit un bashrc qui fait ça, basé sur celui qu'on trouve ici http://thiefofslippers.livejournal.com/, mais modifié pour gcc et qui supporte le versioning. Je peux le poster plus tard si ça intéresse des gens (pas maintenant vu que je suis pas chez moi :) )
Back to top
View user's profile Send private message
fabienZ
n00b
n00b


Joined: 12 Oct 2004
Posts: 34
Location: France

PostPosted: Tue Jul 11, 2006 12:30 pm    Post subject: Reply with quote

KarnEvil wrote:

Bref, pour le /etc/portage/bashrc:
http://gentoo-wiki.com/TIP_The_/etc/portage/bashrc_file

En gros, c'est un fichier qui est sourcé avant chaque emerge et qui permet de paramétrer l'environnement. Avec ce fichier on peut faire plein de choses, dont les CFLAGS par package, avec un /etc/portage/package.cflags qui s'utilise comme les /etc/portage/packages.use et compagnie (y'a quelques exemples écrits par les devs dans le wiki).

En creusant un peu et en utilisant les fonctions de portage on peu faire du versioning (=,>,etc.) et aussi modifier les CFLAGS de façon plus subtile, i.e. on peut non seulement les remplacer, mais aussi juste en ajouter ou retirer certains (je sais pas si c'est possible avec le /etc/portage/env ?), du coup on se retrouve avec un /etc/portage/package.cflags comme ça:
/etc/portage/package.cflags:

sys-apps/sed append -ftree-vectorize
>sys-libs/glibc-2.6.1 remove -ffast-math -ftrace
=sys-devel/gcc-4.0.1 replace -02 -03
...

J'avais écrit un bashrc qui fait ça, basé sur celui qu'on trouve ici http://thiefofslippers.livejournal.com/, mais modifié pour gcc et qui supporte le versioning. Je peux le poster plus tard si ça intéresse des gens (pas maintenant vu que je suis pas chez moi :) )


Je ne connaissais pas pas du tout cette fonctionalité, c'est vraiment bien pratique.
En effet ça permet beaucoup plus de choses, par exemple de pouvoir changer des flags pour toute une catégorie, c'est génial :).
Juste un peu plus contraignant à mettre en place (bon, copier un script dans /etc/portage c'est pas la mort, sauf que vu que c'est de l'expérimental j'aurais tendance à vouloir refaire tout ce qui ne me plait pas à ma façon :lol:).
Je te rejoins quand même là dessus, je préfére aussi la solution avec /etc/portage/bashrc (et pas seulement pour les cflags d'ailleurs).

Sinon, oui on peut ajouter ou retirer certains flags /etc/portage/env en jouant avec les variables, mais c'est moins joli :
- append :
Code:
CFLAGS="${CFLAGS} -ftree-vectorize"

- remove : (là c'est moins bien ^^)
Code:

CFLAGS="${CFLAGS/-ffast-math }"
CFLAGS="${CFLAGS/-ftrace }"

- replace :
Code:
CFLAGS="${CFLAGS/-O2/-O3}"
Back to top
View user's profile Send private message
titoucha
Advocate
Advocate


Joined: 21 Jul 2005
Posts: 2374
Location: Genève

PostPosted: Tue Jul 11, 2006 1:44 pm    Post subject: Reply with quote

Merci aux deux j'avais justement quelques petits soucis qui vont pouvoir être solutionnés avec l'une ou l'autre des méthodes je vais de ce pas me plonger dedans mais de prime abord j'ai une petite préférence pour le fichier package.cflags.


Edit: je suis intéressé par ton bashrc.


Last edited by titoucha on Tue Jul 11, 2006 2:10 pm; edited 1 time in total
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Tue Jul 11, 2006 2:05 pm    Post subject: Reply with quote

Je suppose donc que ça peut marcher avec la variable EXTRA_CONF normalement disponible pour les package?! parce que, c'est vite pénible de devoir lancer des merge manuellement, tout ça pour modifier cette variable.. :/

merci :)
Back to top
View user's profile Send private message
titoucha
Advocate
Advocate


Joined: 21 Jul 2005
Posts: 2374
Location: Genève

PostPosted: Tue Jul 11, 2006 2:22 pm    Post subject: Reply with quote

J'ai pas essayé pour cette variable mais par contre je viens de tester pour la variable FEATURES et sa fonctionne bien avec la méthode décrite en premier, le fichier dans /etc/portage/env/....
Back to top
View user's profile Send private message
Trevoke
Advocate
Advocate


Joined: 04 Sep 2004
Posts: 4099
Location: NY, NY

PostPosted: Tue Jul 11, 2006 2:33 pm    Post subject: Reply with quote

C'est pas plutot une astuce, ca? ;-)
_________________
Votre moment detente
What is the nature of conflict?
Back to top
View user's profile Send private message
titoucha
Advocate
Advocate


Joined: 21 Jul 2005
Posts: 2374
Location: Genève

PostPosted: Tue Jul 11, 2006 2:37 pm    Post subject: Reply with quote

Oui et même une bonne :D
Back to top
View user's profile Send private message
yoyo
Bodhisattva
Bodhisattva


Joined: 04 Mar 2003
Posts: 4273
Location: Lyon - France

PostPosted: Tue Jul 11, 2006 3:00 pm    Post subject: Reply with quote

titoucha wrote:
Edit: je suis intéressé par ton bashrc.
++

@Trevoke et titoucha : on a eu une conversation avec l'auteur pour déplacer ce thread dans le sous-forum. J'ai voulu le laisser ici quelques temps car certains ne vont qu'occasionnellement dans le sous-forum et auraient pu rater celà.

Mais je vais le déplacer de ce pas et laisser un pointeur ici.

Enjoy !

EDIT : done
_________________
La connaissance s'accroît quand on la partage.
JCB
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Wed Jul 12, 2006 10:17 pm    Post subject: Reply with quote

Ca marche avec EXTRA_ECONF , c'est de la balle ce truc, je suis fan (de moi? :lol: )
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Fri Jul 14, 2006 7:53 pm    Post subject: Reply with quote

Désolé pour le retard, voila mon /etc/portage/bashrc.

En fait je me suis souvenu que je l'avais perdu (je crois même que je l'ai dit dans un autre thread :oops:), et donc je l'ai réécrit en catastrophe.

/etc/portage/bashrc:

replace-all-flags() {
    CFLAGS=$*
    CXXFLAGS=${CFLAGS}
}


override-env() {
    inherit versionator flag-o-matic

    [[ -r ${ROOT}/etc/portage/package.cflags ]] || return 0
    while read -a target ; do
        package_string=${target}
        action=${target[1]}
        flags=${target[@]:2}

        match=0
        comp=$(expr "$package_string" : "\([<>=]\)")

        package_string=${package_string##"$comp"}

        package=$(expr "$package_string" : "\(${CATEGORY}/${PN}\)")

        if [[ ! "$package" == "" ]]; then
            package_string=${package_string##"$package"}
            if [[ $package_string == "" ]]; then
                match=1
            else
                if [[ ${package_string:0:1} == "-" ]]; then
                    version=${package_string##"-"}
                    if (($(expr "$version" : [0-9]) > 0 )); then
                        version_compare "$version" "$PV"
                        comp_result=$?
                        case "$comp_result" in
                            1) [[ $comp == ">" || $comp == ">=" ]] && match=1 ;;
                            2) [[ $comp == "=" ]] && match=1 ;;
                            3) [[ $comp == "<" || $comp == "<=" ]] && match=1 ;;
                            *) match=0;;
                        esac
                    fi
                fi
            fi
        fi

        if [[ $match == "1" ]]; then
            einfo "Flags will be modified with the following action: $action $flags"
            case "${action}" in
                a|append) append-flags $flags ;;
                r|replace) replace-flags $flags ;;
                o|override) replace-all-flags $flags ;;
                s|strip) filter-flags $flags ;;
                *) : ;;
            esac

            export CFLAGS CXXFLAGS
            einfo CFLAGS=$CFLAGS
            einfo CXXFLAGS=$CXXFLAGS
        fi
    done < ${ROOT}/etc/portage/package.cflags
    export ALLOWED_FLAGS=${CFLAGS} #update our flags if they changed
}

case "$*" in
    depend) : ;;
    *)
        [[ "$*" = "compile" ]] && override-env
    ;;
esac


Donc ça s'utilise avec un /etc/portage/package.cflags dans ce genre là:
/etc/portage/package.cflags:

>x11-wm/fvwm-2.15.5 append -ftree-vectorize
sys-devel/bc replace -O2 -O3
sys-devel/bc strip -ffast-math
<=sys-devel/glibc-2.3.5 override -march=k8 -02 -pipe

(c'est juste des exemples hein, c'est à vous seul de voir ce que voulez faire)
Les actions possibles sont:
-append: ajouter des flags
-strip: retirer des flags
-replace: remplacer un flag par un autre
-override: remplacer tout les flags

Ça supporte le versioning comme vous pouvez le voir (sauf les ~), et il est possible de mettre plusieurs lignes pour combiner les actions.

J'ai testé avec quelques exemples et ça a l'air de marcher, mais il est possible qu'il y ait des bugs dûs soit à mes pauvres compétences en bash, soit à l'eclass versionator qui ne marche pas tout le temps.

Si quelqu'un a des suggestions d'amélioration, qu'il n'hésite pas :) .
Back to top
View user's profile Send private message
titoucha
Advocate
Advocate


Joined: 21 Jul 2005
Posts: 2374
Location: Genève

PostPosted: Sun Jul 23, 2006 3:26 am    Post subject: Reply with quote

Il fonctionne très bien.

Au rayon suggestions ce serait bien qu'il supporte la gestion des flags par groupe, par exemple si je veux modifier les CFLAGS pour tous les ebuilds dans sys-devel en même temps.
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Mon Jul 24, 2006 11:55 pm    Post subject: Reply with quote

titoucha wrote:
Il fonctionne très bien.

Au rayon suggestions ce serait bien qu'il supporte la gestion des flags par groupe, par exemple si je veux modifier les CFLAGS pour tous les ebuilds dans sys-devel en même temps.


Perso, je vois pas trop l'utilité, mais pourquoi pas :) Le script légèrement modifié.

On peut maintenant utiliser un truc du genre:
/etc/portage/package.cflags:

sys-devel remove -ftree-vectorize
Back to top
View user's profile Send private message
titoucha
Advocate
Advocate


Joined: 21 Jul 2005
Posts: 2374
Location: Genève

PostPosted: Tue Jul 25, 2006 2:14 am    Post subject: Reply with quote

Je vais tester, j'y vois l'utiliter surtout pour modifier le flag -Ox pour tout un groupe de programme par exemple j'essaye d'optimiser la vitesse au maximum pour tout ce qui est dans media-video.

PS: encore merci pour le script.
Back to top
View user's profile Send private message
GentooUser@Clubic
l33t
l33t


Joined: 01 Nov 2004
Posts: 819

PostPosted: Sun Sep 03, 2006 10:23 pm    Post subject: Reply with quote

Up pour ce topic très intéressant

Le script de KarnEvil est très interessant, cependant depuis que je l'ai installé j'ai ces messages a chaque emerge

Quote:
QA Notice: ECLASS 'versionator' inherited illegally in sys-devel/m4-1.4.6
QA Notice: ECLASS 'flag-o-matic' inherited illegally in sys-devel/m4-1.4.6
QA Notice: ECLASS 'eutils' inherited illegally in sys-devel/m4-1.4.6
QA Notice: ECLASS 'multilib' inherited illegally in sys-devel/m4-1.4.6
QA Notice: ECLASS 'portability' inherited illegally in sys-devel/m4-1.4.6
QA Notice: ECLASS 'toolchain-funcs' inherited illegally in sys-devel/m4-1.4.6


Je pense qu'il ne sont pas important, mais y'a moyen de corriger ?

Sinon si j'ai dans mon package.cflags

Code:
media-video append -ffast-math
media-video/kaffeine strip -ffast-math


Ça donne bien le résultat escompté (soit l'ajout de -ffast-math pour tous le paquets de media-video sauf kaffeine) ?


J'aurais bien testé moi-même mais comme je suis en plein emerge -e world
Back to top
View user's profile Send private message
Max.Lelubre
n00b
n00b


Joined: 25 Dec 2005
Posts: 19
Location: Lyon, France

PostPosted: Tue Jun 29, 2010 6:36 pm    Post subject: Reply with quote

up antédiluvien ^^

Ça marche toujours !
Par contre depuis le temps portage a-t-il intégré une autre fonctionnalité équivalente ?
Merci :)
Back to top
View user's profile Send private message
RaX
Apprentice
Apprentice


Joined: 16 Aug 2007
Posts: 166

PostPosted: Mon Aug 02, 2010 7:24 pm    Post subject: Reply with quote

Très sympa comme astuce.

Merci.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum