Sono consapevole che quanto scritto qui è impreciso, incompleto e forse quasi inutile ma spero possa servire perché io mi sono sbattuto la testa tutto il pomeriggio per capire queste 4 cavolate…
Comunque sia sto facendo riferimento alla seguente versione di gcc
gcc (GCC) 4.3.1 20080626 (prerelease)
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
e per scrivere quanto sotto ho fatto riferimento soprattutto al wiki di arch, al man di gcc e di make.
Opzioni interessanti
Ho trovato questa guida per gentoo che spiega per filo e per segno le varie opzioni che si possono mettere per makepkg e make riguardo archlinux.
Io aggiungo solo che:
- per quanto riguarda march e mtune si possono mettere o una architettura generica (generic che va bene per tutti, oppure i le varie famiglie ix86 della Intel ecc ecc) o specificare in maniera esatta il tipo di processore. Un’altra opzione sarebbe native che da quanto leggo serve per selezionare automaticamente il processore. Io quindi non ho battuto ciglio avendo un E6600 Intel: core2.
- MAKEFLAGS è il parente di concurrency_level, fanno la stessa identica cosa (più o meno).
Makepkg
Quando compiliamo i pacchetti usando makepkg (quando praticamente gli prendiamo da AUR) il tutto è regolato da makepkg.conf. Nel mio caso per quanto scritto prima ho modificato, per il momento, solo la parte ARCHITECTURE, COMPILE FLAGS in questa maniera
CARCH=”i686″
CHOST=”i686-pc-linux-gnu”#– Exclusive: will only run on -march=i686
# -march (or -mcpu) builds exclusively for an architecture
# -mtune optimizes for an architecture, but builds for whole processor family
CFLAGS=”-march=core2 -O2 -pipe -fomit-frame-pointer”
CXXFLAGS=”${CFLAGS}”
#– Make Flags: change this for DistCC/SMP systems
MAKEFLAGS=”-j3″
Make
Però poi mi sono posto: come diavolo faccio a fare in modo che le compilazioni siano configurate così anche per make? Semplice, ho modificato /etc/profile
sudo nano /etc/profile
e aggiunto le seguenti righe (togliendo la parte di concurrency_level)
# per compilare con make come faccio con makepkg sfruttando il mio procio
CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=core2 -O2 -pipe -fomit-frame-pointer”
CXXFLAGS=”${CFLAGS}”
export CHOST
export CFLAGS
export CXXFLAGSMAKEFLAGS=”-j3″
export MAKEFLAGS
e infine
source /etc/profile
(Questa parte, in teoria, potrebbe essere messa esattamente come per makepkg.conf in make.conf (che però è da creare). Dato che mi sembrava inutile creare un’altro file di configurazione ho tenuto profile)
Se esiste qualche altra maniera più elegante per evitare questo “copia & incolla” che è ridondante fra makepkg.conf e profile non lo so..avevo pensato di fare uno script che si prendesse le variabili e le ricopiasse da una parte all’altra ma lo lascio ai più coraggiosi.
Occhio!
I più attenti lettori si saranno accorti che su arch c’è MAKEFLAGS e non MAKEOPTS come dovrebbe essere su gentoo ma è tutto ok. Non so il perché di questa differenza ma ho provato e MAKEOPTS sembrerebbe non fare alcun effetto.



