# [CFLAGS] Cambiar CFLAGS

## chaim

Hola!

Ultimamente escribo bastante por aquí y eso no es que sea demasiado bueno (si se trata de hacer nuevos post  :Razz: )

El caso es que actualmente uso estas CFLGAS en mi make.conf

```
CFLAGS="-O2 -march=i686 -pipe"

CXXFLAGS="-O2 -march=i686 -pipe"

CHOST="i686-pc-linux-gnu"
```

Pero he visto que para mi procesador que es este:

```

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 6

model           : 14

model name      : Genuine Intel(R) CPU           T2300  @ 1.66GHz

stepping        : 8

cpu MHz         : 1667.000

cache size      : 2048 KB

physical id     : 0

siblings        : 2

core id         : 0

cpu cores       : 2

fdiv_bug        : no

hlt_bug         : no

f00f_bug        : no

coma_bug        : no

fpu             : yes

fpu_exception   : yes

cpuid level     : 10

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 

pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon

 bts pni monitor est tm2 xtpr

bogomips        : 3328.67

clflush size    : 64

processor       : 1

vendor_id       : GenuineIntel

cpu family      : 6

model           : 14

model name      : Genuine Intel(R) CPU           T2300  @ 1.66GHz

stepping        : 8

cpu MHz         : 1667.000

cache size      : 2048 KB

physical id     : 0

siblings        : 2

core id         : 1

cpu cores       : 2

fdiv_bug        : no

hlt_bug         : no

f00f_bug        : no

coma_bug        : no

fpu             : yes

fpu_exception   : yes

cpuid level     : 10

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 

pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon

 bts pni monitor est tm2 xtpr

bogomips        : 3325.24

clflush size    : 6
```

Vi en GentooWiki-Safe_Cflags que para mi procesador serían más optimas estas:

 *Quote:*   

> 
> 
>  Intel Core Solo/Duo, Pentium Dual-Core T20xx/T21xx
> 
> vendor_id  : GenuineIntel
> ...

 

¿Simplemente las cambio en el make.conf y a rular? Puede dañar el sistema? Tengo que recompilar todas las aplicaciones? Quería que me informarais un poco acerca de esto. Gracias!

----------

## gringo

en mi opinión cambiar el -march implica un cambio radical en el comportamiento del compilador, por lo que si, tendrás que recompilar todo el sistema para evitar problemillas. 

Creo que hay una guía oficial para esto pero yo lo hago de la siguiente manera :

- cambio los valores en el make.conf

- recompilo / actualizo gcc

- cambio al nuevo compilador ( si procede)

- compilo binutils, linux-headers, glibc, libtool, etc y nuevamente gcc

- compilo todo el sistema

Veo que tienes un core, no ? Si es así y ya puestos a recompilar, te sugeriría que miraras el gcc-4.3.x que viene con un -march=core2, específico para tu cpu. No es que vayas a notar mucha diferencia salvo en un par de aplicaciones concretas, pero por si te interesa mirarlo. Además, gcc-4.3 posiblemente será el siguiente compilador estable en gentoo así que creo que vale la pena pasarse.

saluetes

----------

## chaim

Gracias por la respuesta.

He leido en GCC - Changes 4.3  :

 *Quote:*   

> 
> 
> New Targets and Target Specific Improvements
> 
> IA-32/x86-64
> ...

 

¿Esto no querrá decir que es para 64 bits porque mi pc es de 32 bits? Aún así no sé si arriesgarme a instalar esa versión de gcc ahora o quizá esperarme a que sea estable. Aunque la verdad recompilar el sistema me parece una tarea muy ardua para hacerla...En estos momentos no sé si investigar o seguír el KISS principle  :Smile: 

----------

## Coghan

Tu procesador es de 64 bit, puedes usar estos Cflags:

http://gentoo-wiki.com/Safe_Cflags#Intel_Core_2_Duo.2FQuad_.2F_Xeon_51xx.2F53xx.2C_Pentium_Dual-Core_T23xx.2B.2FExxxx

----------

## chaim

¿Qué es de 64 bits? Yo siempre he pensado que es de 32

Mi procesador es el T2300 que viene en esta página

Y según la salida del /proc/cpuinfo yo creo que me correspondería estos: http://gentoo-wiki.com/Safe_Cflags#Intel_Core_Solo.2FDuo.2C_Pentium_Dual-Core_T20xx.2FT21xx, Concuerda en Familia, Modelo...todo, di que los cflags serían los mismos para la versión 32bits...

No sé, a ver si me puedes dar una explicación mejor de lo que opinas al respecto. Gracias

----------

## Coghan

Tu modelo es un T2XX y concuerda mejor con los que te apunté antes, puedes confirmarlo en la siguiente hoja de datos de intel:

http://www.intel.com/products/centrino/duo/310199.pdf

----------

## i92guboj

Últimamente ando algo ocupado y además no estoy al día en lo que a cpus se refiere. Pero hasta donde yo se creo que las cpus de 64 bits se identifican entre otras cosas por el flag "lm", que ésta no tiene. Sin embargo, como ya digo, no estoy al día en el asunto. La forma más sencilla de comprobarlo es descargar un livecd de 64 e intentar arrancarlo.

Sobre lo de recompilar: no es estrictamente necesario, aunque en algunos paquetes si puede haber problemas. Yo recompilaría al menos system. Lo demás puedes dejar que se vaya actualizando poco a poco, o recompilarlo también si lo deseas.

----------

## chaim

La verdad es que sí, se trata de un Intel Centrino Duo con esos chipset para wireless y el procesador es ese. Al concordar la Familia y el Modelo de la gentoo-wiki creí que se referíría al otro. Me voy a 'arriesgar' y a instalar gcc-4.3.1 y a poner esos CFLAGS, les pondré los pasos que tengo pensado hacer y cuando me confirmen si creen que están bien o no lo hago.

1. Actualizar Gcc de 4.1.2 a ~4.3.1 (lo desenmascaro y emerJo)

2. (borrar versión 4.1.2) de GCC con emerge -C gcc-4.1.2

3. Actualizar /etc/make.conf

    Pasar de CFLAGS="-O2 -march=i686 -pipe" => CFLAGS="-02 -march=core2 -pipe"

4. emerge -uNDav system

5. Dejar que los demas paquetes se vayan recompilando según se vayan actualizando

¿Qué les parece?

----------

## i92guboj

 *chaim wrote:*   

> La verdad es que sí, se trata de un Intel Centrino Duo con esos chipset para wireless y el procesador es ese. Al concordar la Familia y el Modelo de la gentoo-wiki creí que se referíría al otro. Me voy a 'arriesgar' y a instalar gcc-4.3.1 y a poner esos CFLAGS, les pondré los pasos que tengo pensado hacer y cuando me confirmen si creen que están bien o no lo hago.
> 
> 1. Actualizar Gcc de 4.1.2 a ~4.3.1 (lo desenmascaro y emerJo)
> 
> 2. (borrar versión 4.1.2) de GCC con emerge -C gcc-4.1.2
> ...

 

Yo no borraría el compilador antiguo. Si algo falla sería bueno tener un compilador que sabes que funciona. Si no, tendrías que reinstalarlo a mano desde binarios, o reinstalar Gentoo.

----------

## chaim

 *Quote:*   

> Yo no borraría el compilador antiguo. Si algo falla sería bueno tener un compilador que sabes que funciona. Si no, tendrías que reinstalarlo a mano desde binarios, o reinstalar Gentoo.

 

¿Y cómo le digo que compile con ~gcc-4.3.1 en vez de con gcc-4.2.1?

[ebuild  NS   ] sys-devel/gcc-4.3.1  USE="fortran gtk mudflap nls openmp (-altivec) -bootstrap -build -doc -gcj (-hardened) -ip28 -ip32r10k -libffi (-multilib) -multislot (-n32) (-n64) -nocxx -objc -objc++ -objc-gc -test -vanilla" 57,610 kB

Estarían bien estas use para el gcc?

Gracias por la respuesta tan rápida

----------

## i92guboj

 *chaim wrote:*   

>  *Quote:*   Yo no borraría el compilador antiguo. Si algo falla sería bueno tener un compilador que sabes que funciona. Si no, tendrías que reinstalarlo a mano desde binarios, o reinstalar Gentoo. 
> 
> ¿Y cómo le digo que compile con ~gcc-4.3.1 en vez de con gcc-4.2.1?
> 
> 

 

```
gcc-config -l

gcc-config <numerito>

env-update

source /etc/profile
```

Las flags están bien, lo que actives o desactives dependerá de tus necesidades concretas. Ninguna de ellas es crítica (las que lo son están fijas en tu perfil).

----------

## ekz

 *chaim wrote:*   

> 
> 
> 3. Actualizar /etc/make.conf
> 
>     Pasar de CFLAGS="-O2 -march=i686 -pipe" => CFLAGS="-02 -march=core2 -pipe"
> ...

 

Sólo apuntar que lo correcto es -O2 "menos o dos", no "menos cero dos".

Saludos!

----------

## Coghan

 *chaim wrote:*   

> La verdad es que sí, se trata de un Intel Centrino Duo con esos chipset para wireless y el procesador es ese. Al concordar la Familia y el Modelo de la gentoo-wiki creí que se referíría al otro. Me voy a 'arriesgar' y a instalar gcc-4.3.1 y a poner esos CFLAGS, les pondré los pasos que tengo pensado hacer y cuando me confirmen si creen que están bien o no lo hago.
> 
> 1. Actualizar Gcc de 4.1.2 a ~4.3.1 (lo desenmascaro y emerJo)
> 
> 2. (borrar versión 4.1.2) de GCC con emerge -C gcc-4.1.2
> ...

 

Ten en cuenta que cambiar de compilador no hará que tu sistema pase mágicamente a 64 bit, tu variable  CHOST="i686-pc-linux-gnu" indica que tienes un sistema de 32 bit y seguirá siendo así, pero cambiar de CHOST no es algo trivial y los que lo han intentado suelen aconsejar luego hacer una instalación limpia.

----------

## chaim

Ya está hecho, lo único que me falta sería recompilar el system, pero un emerge -uDNav system no me devuelve nada porque está todo actualizado. ¿Qué tengo que poner?

 *Quote:*   

> 
> 
> Ten en cuenta que cambiar de compilador no hará que tu sistema pase mágicamente a 64 bit, tu variable CHOST="i686-pc-linux-gnu" indica que tienes un sistema de 32 bit y seguirá siendo así, pero cambiar de CHOST no es algo trivial y los que lo han intentado suelen aconsejar luego hacer una instalación limpia.

 

-> La verdad es que no buscaba en un principio pasar a 64bits (ni sabía que mi procesador tenía tal capacidad) si no simplemente optimizar un poco la compilación sin que acarreara graves problemas, si eso ya para otra instalación o para más adelante  :Smile: 

 *Quote:*   

> Sólo apuntar que lo correcto es -O2 "menos o dos", no "menos cero dos".
> 
> Saludos!

 

-> Sí, se me fue la mano  :Smile:  gracias

----------

## Coghan

 *chaim wrote:*   

> Ya está hecho, lo único que me falta sería recompilar el system, pero un emerge -uDNav system no me devuelve nada porque está todo actualizado. ¿Qué tengo que poner?

 

```
emerge -e system
```

----------

## chaim

 *Coghan wrote:*   

>  *chaim wrote:*   Ya está hecho, lo único que me falta sería recompilar el system, pero un emerge -uDNav system no me devuelve nada porque está todo actualizado. ¿Qué tengo que poner? 
> 
> ```
> emerge -e system
> ```
> ...

 

Ok gracias, ya está compilando  :Smile: 

----------

## ColdWind

No la lieis. core2 es para procesadores Core 2 Duo en instalaciones de 64 bits.

chaim no tiene ni un core2 ni una instalación de 64 bits, así que probablemente quiere usar -march=prescott y punto.

----------

## gringo

 *Quote:*   

> No la lieis. core2 es para procesadores Core 2 Duo en instalaciones de 64 bits.
> 
> chaim no tiene ni un core2 ni una instalación de 64 bits, así que probablemente quiere usar -march=prescott y punto.

 

pues acabo de mirar la documentación del gcc  ( donde pone exactamente : " [...]Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 instruction set support. [...]) así que tienes toda la razón, no sé porque pensaba que core2 era válido para ambos x86 y amd64 y que el CHOST indicaba al toolchain si era de 64 o 32 bits ... sorry por la confusión.

saluetes

----------

## i92guboj

No tengo experiencia con core2, pero puedo asegurar que -march=k8 funciona con un CHOST de 32 bits, no veo por qué con core2 tendría que ser distinto.

----------

## ColdWind

 *i92guboj wrote:*   

> No tengo experiencia con core2, pero puedo asegurar que -march=k8 funciona con un CHOST de 32 bits, no veo por qué con core2 tendría que ser distinto.

 

Es posible. Supongo que los problemas están viniendo cuando la gente cambia el CHOST a x86_64 con sus profiles de x86. En cualquier caso, mejor ir a lo seguro a la hora de aconsejar a principiantes.

----------

## i92guboj

 *ColdWind wrote:*   

>  *i92guboj wrote:*   No tengo experiencia con core2, pero puedo asegurar que -march=k8 funciona con un CHOST de 32 bits, no veo por qué con core2 tendría que ser distinto. 
> 
> Es posible. Supongo que los problemas están viniendo cuando la gente cambia el CHOST a x86_64 con sus profiles de x86. En cualquier caso, mejor ir a lo seguro a la hora de aconsejar a principiantes.

 

Sip. El cambio de CHOST es algo problemático incluso dentro la gama de 32 bits. El cambio a x86_64 es definitivamente algo que no vale la pena, porque de todas formas hay que recompilar todo. Es más sencillo empezar desde cero.

En cuanto a lo seguro, como ya dije en el otro hilo: la wiki no es oficial. Es un recurso de mucho valor, pero realmente su contenido no tiene valor oficial alguno en lo que a Gentoo respecta. Si es cierto que los flags en esa página funcionan sin problemas basándonos en la experiencia de miles de usuarios. Lo cual no quiere decir que otras combinaciones no sean igualmente estables.

----------

## chaim

Bueno acabo de leer que habeis estado comentando sobre el tema que inicié hace poco, así resumen yo puse core2 y recompilé system y la verdad no he notado ninguna diferencia palpable, este tema se me queda un poco grande y lo voy entendiendo de poco en poco. Revisaré los post con más tiempo y os diré que me parece a mí.

Un Saludo

----------

## chaim

Sé que se trata de un post un poco atrasado, pero lo he estado observando y viendo enlaces y saco de conclusión: No tengo ni idea! Cuando cambié a -march=core2 y recompilé el sistema no noté nada, todo funcionaba bien, y ahora viendo las respuestas de ColdWind no sé si dejarlo en -march=core2 o en -march=prescott.

----------

## achaw

 *chaim wrote:*   

> Sé que se trata de un post un poco atrasado, pero lo he estado observando y viendo enlaces y saco de conclusión: No tengo ni idea! Cuando cambié a -march=core2 y recompilé el sistema no noté nada, todo funcionaba bien, y ahora viendo las respuestas de ColdWind no sé si dejarlo en -march=core2 o en -march=prescott.

 

Y no creo que notes nada, las CFLAGS no son magicas...posiblemente notes mejoras en hardware antiguo, pero en un pc potente como el tuyo, las mejoras no son palpables a simple vista. No te vuelvas loco con las CFLAGS, todos tuvimos la fiebre, dedicale ese tiempo a otras cosas.

Saludos

----------

