# [risolto] cflags dubbio su parametro

## polslinux

una cosa...ho un dubbio...

```
gcc -march=native -E -v - </dev/null 2>&1 | sed -n 's/.* -v - //p' 
```

mi restituisce:

```
-D_FORTIFY_SOURCE=2 -march=core2 -mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 -mtune=core2
```

quindi nella riga cflags devo mettere tutta quella roba li giusto? compreso il D_FORTIFY ecc??? è un parametro che non ho mai sentito...Last edited by polslinux on Wed May 05, 2010 8:20 pm; edited 1 time in total

----------

## armaoin

No no.

Quel comando serve per vedere quale -march devi mettere in questo caso core2.

Personalmente avrei fatto come ti hanno consigliato mettendo -march=native.

Inoltre metti le varie ottimizzazioni.

Qualcosa del tipo:

```

CFLAGS="-O2 -pipe -march=native"

CXXFLAGS="${CFLAGS}"

```

----------

## polslinux

ahhh ok...quindi se io metto:

```
-narch=native
```

tutte queste opzioni:

```
-D_FORTIFY_SOURCE=2 -march=core2 -mcx16 -msahf --param l1-cache-size=32 --param l1-cache-line-size=64 -mtune=core2
```

sono già incluse in native e quindi non le devo scrivere giusto?

----------

## djinnZ

no, -D_FORTIFY_SOURCE=2 per esempio è di default del gcc le altre sono implicite al native (o sono ridondanti come mtune uguale a march).

In generale: se usi una macchina per compilare anche per altre o se vuoi portare in giro pacchetti binari native è una gigantesca idiozia, negli altri casi è una comodità.

Attenzione che alcune flag non vengono filtrate dagli ebuild.

"-O2 -march=core2 -fomit-frame-pointers -pipe" e "-Wl, -O1 -Wl, --as-needed" ottengono un risultato milgiore (in attesa che diventino di default, per --as-needed dovremmo esserci ormai).

Attenzione ad opzioni come -mshaf, su alcuni celeron o sempron sono presenti alcune istruzioni di questo set ma non tutte ed i risultati potrebbero lasciare a desiderare.

----------

## polslinux

ok, grazie mille dell'esaustiva risposta  :Smile: 

una cosa...tu hai scritto:

```
"-O2 -march=core2 -fomit-frame-pointers -pipe" e "-Wl, -O1 -Wl, --as-needed"
```

ma non si possono mettere -02 e -01 insieme vero   :Question:   :Question: 

Comunque, praticamente la CFLAGS viene fuori così giusto?:

```
"-O2 -march=core2 -fomit-frame-pointers -pipe -Wl --as-needed"
```

----------

## djinnZ

le seconde sono LDFLAGS (istruzioni per il linker non vanno mai messe nelle cflags).

Quindi o scrivi (documentati e verifica che sto andando a memoria)

```
CFLAGS="-O2 -march=core2 -fomit-frame-pointers -pipe"

LDFLAGS="-Wl,-O1 -Wl,--as-needed"
```

o

```
CFLAGS="-O2 -march=native -fomit-frame-pointers -pipe"

LDFLAGS="-Wl,-O1 -Wl,--as-needed"
```

Se pensi di creare pacchetti binari e gestire macchine differenti meglio la prima (così sai per cosa hai compilato un pacchetto), se hai solo un pc tanto vale usare direttamente la seconda.

Per me avere pieno controllo è meglio e quindi "native" é solo fonte di guai e limita molto ma sono opinioni personali.

Per esempio c'era un utente del forum che usava -march=i686 -mtune=athlon-xp (o qualcosa del genere). Cosa comporta una simile scelta? Il codice è ottimizzato nei limiti del possibile per athlon-xp ma gira senza alcun problema su tutte le cpu i686 e successive.

Eccellente soluzione per condividere il codice in un parco macchine eterogeneo ma per un singolo pc è solo meno ottimizzato.

----------

## polslinux

 *djinnZ wrote:*   

> le seconde sono LDFLAGS (istruzioni per il linker non vanno mai messe nelle cflags).
> 
> Quindi o scrivi (documentati e verifica che sto andando a memoria)
> 
> ```
> ...

 

ok, grazie mille dell'aiuto!

Mi sono informato e si, le LDFLAGS dette da te vanno benissimo  :Smile: 

Grazie ancora!

----------

