# Compiler flags

## JnZn558

ich habe intel quad core 2500k, wie soll ich den CLFAGS march angeben?

----------

## aleph-muc

aus dem gcc-manual:

-mtune=native

This selects the CPU to tune for at compilation time by determining the processor type of the compiling machine. Using -mtune=native will produce code optimized for the local machine under the constraints of the selected instruction set. Using -march=native will enable all instruction subsets supported by the local machine (hence the result might not run on different machines).

gilt ebenso für -march

Grüße

aleph

----------

## Josef.95

Siehe zb auch:

Gentoo Kompilations-Optimierungs-Leitfaden

http://en.gentoo-wiki.com/wiki/Safe_Cflags

http://gcc.gnu.org/onlinedocs/gcc-4.4.5/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

----------

## LinuxTom

```
cc -march=native -E -v - </dev/null 2>&1 | grep cc1
```

Lass dann aber die param-Parameter weg, mit denen kommen manche Pakte nicht zurecht.

Bei mir bspw. von

```
/usr/libexec/gcc/x86_64-pc-linux-gnu/4.4.4/cc1 -E -quiet -v - -D_FORTIFY_SOURCE=2 -march=core2 -mcx16 -msahf -msse4.1 --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=3072 -mtune=core2
```

zu

```
CFLAGS="-march=core2 -mcx16 -msahf -msse4.1 -mtune=core2 -O2 -pipe"
```

das -O2 und -pipe muss auch hinzu. Ohne kommen auch wieder einige GNU-Programme nicht klar damit (insbesondere -pipe).

----------

## astaecker

 *LinuxTom wrote:*   

> 
> 
> ```
> CFLAGS="-march=core2 -mcx16 -msahf -msse4.1 -mtune=core2 -O2 -pipe"
> ```
> ...

 

Wieso sollte man dieses CFLAGS setzen, wenn sie doch nichts anderes als ein 

```
-march=native
```

 sind ? 

```
-march=native
```

 ist kürzer und wird sogar beim GCC-Upgrade entsprechend den Fähigkeiten von GCC aktualisiert.

----------

## LinuxTom

 *arlsair wrote:*   

> Wieso sollte man dieses CFLAGS setzen, wenn sie doch nichts anderes als ein ...

 

Weil ich insgesamt 8 Rechner habe, die alle auf Gentoo laufen. Viele davon sind ganz einfache und auch Netbooks sind dabei. Da distcc und ccache alle nicht so Problemlos arbeiten und auch immer die Mitarbeit des eigentlichen Rechners vorraussetzen, habe ich mir einen fetten Server hingestellt, der alle Pakete für all meine Rechner kompiliert.

Meine anderen (langsameren) Rechner verbinden sich bei einem Update mit diesem und ziehen dann alles runter und brauchen nur noch das bin-Package zu installieren. Da stört es dann auch mal nicht, dass ich noch einen Laptop mit Pentium-233MHz habe. Auch der braucht dann für ein OpenOffice nur 10 Minuten (der Server nur 40 Minuten).

Und deshalb brauche ich die Angaben von den "Clients", weil da der Server mit "native" nicht wirklich gute Arbeit leisten kann.  :Wink: 

Weitere Vorteile:

* Für die Vorbereitung ist der Client nicht notwendig.

* Treten Probleme auf, sind die nur im Server-Chroot und ich kann mir Zeit nehmen, die in Ruhe zu lösen. Der Client arbeiten wie gewohnt weiter, weil der davon ja noch nichts weiß.

* usw.

----------

## astaecker

Schon klar, dass dies für Cross-Compiling notwendig ist, aber JnZn558 hat nicht nach distcc und ccache gefragt, sondern einfach nur nach optimierten CFLAGS.

----------

## LinuxTom

Und darum auch meine Antwort, wie man diese auf eine andere konkrete einfache Art und Weise herausbekommt. Wieso ist ja nun egal. Ende hier!

----------

