# Settings in make.conf affects compilation only?

## kbzium

Hello,

does settings in make.conf affect compilation only or general speed of applications after it? I mean if for instance sse4 is enabled during compilation, does this software use it later alone?

Here's my config

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

CXXFLAGS="${CFLAGS}"

# WARNING: Changing your CHOST is not something that should be done lightly.

# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.

CHOST="x86_64-pc-linux-gnu"

# These are the USE flags that were used in addition to what is provided by the

# profile used for building.

USE="-gtk -gnome gt4 kde dvd alsa cdr mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 apache2 scanner"

```

And this looks quite concerning...!

```
kboom@kboom ~ $ gcc '-###' -e -v -march=native /usr/include/stdlib.h

Using built-in specs.

COLLECT_GCC=/usr/x86_64-pc-linux-gnu/gcc-bin/4.5.4/gcc

COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/4.5.4/lto-wrapper

Target: x86_64-pc-linux-gnu

Configured with: /var/tmp/portage/sys-devel/gcc-4.5.4/work/gcc-4.5.4/configure --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/4.5.4 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.4/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.5.4 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.5.4/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.5.4/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.4/include/g++-v4 --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --disable-altivec --disable-fixed-point --without-ppl --without-cloog --disable-lto --enable-nls --without-included-gettext --with-system-zlib --enable-obsolete --disable-werror --enable-secureplt --enable-multilib --enable-libmudflap --disable-libssp --enable-libgomp --with-python-dir=/share/gcc-data/x86_64-pc-linux-gnu/4.5.4/python --enable-checking=release --disable-libgcj --enable-languages=c,c++,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-targets=all --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.5.4 p1.1, pie-0.4.7'

Thread model: posix

gcc version 4.5.4 (Gentoo 4.5.4 p1.1, pie-0.4.7) 

COLLECT_GCC_OPTIONS='-e' '-v' 

 "/usr/libexec/gcc/x86_64-pc-linux-gnu/4.5.4/cc1" "-quiet" "/usr/include/stdlib.h" "-D_FORTIFY_SOURCE=2" "-march=core2" "-mcx16" "-msahf" "-maes" "-mpclmul" "-mpopcnt" "-mavx" "--param" "l1-cache-size=32" "--param" "l1-cache-line-size=64" "--param" "l2-cache-size=8192" "-mtune=generic" "-quiet" "-dumpbase" "stdlib.h" "-auxbase" "stdlib" "-o" "/tmp/cc6L1chH.s" "--output-pch=/usr/include/stdlib.h.gch"

```

while flags in cpuinfo are

```
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl x

topology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts 

dtherm tpr_shadow vnmi flexpriority ept vpid

```

What's more how about:

```
USE="-gtk -gnome gt4 kde dvd alsa cdr mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 apache2 scanner"

```

Maybe this may affect performance of an running application? If so, what should i set there too?

Thank you!

----------

## Gentoo64

If your cpu supports for eg sse 4.2, then any program with the USE flag sse4_2 will take advantage of it. A lot of programs have support for things like sse etc by default with no optional use flags. As you have sse 4.2 support on your cpu then sse4_2 USE is right.

The make.conf just includes the compile time stuff which can affect the performance of the program when it's run, so the CFLAGS have an effect, and the USE removes / includes support for certain things. The main thing that would speed up compilation speed on its own is makejobs, which looks like you haven't set. Most people will use a makejobs of the number of your cpu cores, or add 1 on, so if your cpu is quad core try adding the line MAKEJOBS="-j5" to the /etc/portage/make.conf and you should compile much much faster than with default.

----------

## kbzium

Ok so i run into idea to compare:

my cpu spec flags:

 *Quote:*   

> fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl x
> 
> topology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid

 

and those valid to be used in make.conf

```
3dfx

3dnow

X

Xaw3d

a52

aac

aalib

accessibility

acl

acpi

adns

afs

aim

alsa

altivec

ao

apache2

apm

aqua

atm

audiofile

ayatana

avahi

bash-completion

bcmath

berkdb

bidi

bindist

blas

bluetooth

bootstrap

boundschecking

branding

bsf

build

bzip2

cairo

calendar

canna

caps

cdb

cdda

cddb

cdinstall

cdparanoia

cdr

cgi

cjk

clamav

coreaudio

cracklib

crypt

cscope

css

ctype

cups

curl

curlwrappers

custom-cflags

cvs

cxx

dbi

dbm

dbus

debug

dedicated

dga

directfb

djvu

doc

dri

dts

dv

dvb

dvd

dvdr

eds

emacs

emboss

encode

enscript

evo

examples

exif

expat

fam

fastcgi

fbcon

ffmpeg

fftw

firebird

flac

flatfile

fltk

fontconfig

foomaticdb

fortran

freetds

freewnn

frontbase

ftp

gcj

gd

gdbm

geoip

ggi

gif

gimp

glut

gmp

gnome

gnome-keyring

gnuplot

gnutls

gphoto2

gpm

gps

graphviz

gsl

gsm

gstreamer

gtk

gtkhtml

guile

gzip

handbook

hardened

hddtemp

hdf5

hscolour

ibm

iconv

icq

icu

idn

ieee1394

imagemagick

imap

imlib

infiniband

inifile

introspection

iodbc

ios

ipod

ipv6

iwmmxt

jabber

jack

java

java6

javascript

jbig

jingle

jit

joystick

jpeg

jpeg2k

kde

kdeprefix

kerberos

kolab

kontact

ladspa

lame

lapack

lash

latex

lcms

ldap

libass

libcaca

libedit

libffi

libnotify

libsamplerate

libwww

lirc

livecd

lm_sensors

lua

lzma

lzo

m17n-lib

mad

maildir

matroska

matrox

mbox

memlimit

mhash

migemo

mikmod

milter

mime

minimal

mmap

mms

mmx

mng

modplug

modules

mono

motif

mozilla

mp3

mp4

mpeg

mpi

mplayer

msn

mssql

mtp

mule

multilib

musepack

musicbrainz

mysql

mysqli

nas

ncurses

neXt

neon

netboot

netcdf

networkmanager

nis

nls

nntp

nocd

nocxx

nptl

nsplugin

ocaml

ocamlopt

oci8

oci8-instant-client

odbc

offensive

ofx

ogg

old-linux

openal

openexr

opengl

openmp

oracle

orc

osc

oscar

oss

pam

pch

pcmcia

pcntl

pcre

pda

pdf

perl

php

plasma

plotutils

png

policykit

portaudio

posix

postgres

postscript

ppds

prefix

prelude

profile

pulseaudio

python

qdbm

qmail-spp

qt4

quicktime

radius

raw

rdesktop

readline

recode

rss

ruby

samba

sasl

savedconfig

scanner

sdl

seamonkey

selinux

semantic-desktop

session

sharedmem

shorten

simplexml

skey

slang

slp

smartcard

smp

sndfile

snmp

soap

sockets

socks5

sound

source

sox

speex

spell

sqlite

sqlite3

sse

sse2

sse3

ssl

startup-notification

static

static-libs

subversion

suid

svg

svga

sybase

sybase-ct

symlink

syslog

systemd

sysvipc

szip

taglib

tcl

tcmalloc

tcpd

test

theora

threads

tidy

tiff

timidity

tk

tokenizer

truetype

uclibc

udev

unicode

upnp

upnp-av

usb

v4l

vanilla

vcd

vdpau

vhosts

videos

vim-syntax

vnc

vorbis

wayland

wavpack

wddx

webkit

wifi

win32codecs

wmf

wxwidgets

x264

xattr

xcb

xcomposite

xemacs

xface

xft

xine

xinerama

xinetd

xml

xmlrpc

xmp

xmpp

xosd

xpm

xscreensaver

xsl

xv

xvid

yahoo

yaz

zeroconf

zlib

zsh-completion

```

Maybe i should just include those that match?

----------

## Gentoo64

The USE flags are mostly not cpu related but include support for certain features. I remember what I did when I first installed Gentoo was go through the big list of USE flags and add the ones I definately want globally in my make.conf. If you use alsa and want programs to support it just add alsa to your use flags. Do that for any others, same with removing support, ie if you know you're not going to use pulseaudio then put -pulseaudio in there.

----------

## kbzium

I see. Last thing:

```
kboom@kboom ~ $ echo "" | gcc -march=native -v -E - 2>&1 | grep cc1

 /usr/libexec/gcc/x86_64-pc-linux-gnu/4.5.4/cc1 -E -quiet -v - -D_FORTIFY_SOURCE=2 -march=core2 -mcx16 -msahf -maes -mpclmul -mpopcnt -mavx --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=8192 -mtune=generic

```

what about cache level 3?! And why is it core2?

----------

## toralf

 *kbzium wrote:*   

> And why is it core2?

 Because you set "march=native" and therefore the gcc expanded it to your system specific values.

----------

## dmpogo

 *Gentoo64 wrote:*   

> The USE flags are mostly not cpu related but include support for certain features. I remember what I did when I first installed Gentoo was go through the big list of USE flags and add the ones I definately want globally in my make.conf. If you use alsa and want programs to support it just add alsa to your use flags. Do that for any others, same with removing support, ie if you know you're not going to use pulseaudio then put -pulseaudio in there.

 

Most of the needed USE flags are set/unset  when you choose the appropriate profile, and need not be explicitly played with manually.

----------

## wcg

"-march=native" in CFLAGS will override things like USE="sse4_2" at compile

time. If gcc has a use for sse4_2 instructions in the code it compiles, with

"-march=native" it will check the cpu itself to see if that cpu architecture

supports the sse4_2 instructions. That goes for sets of instructions supported

by some x86 or x86_64 cpus but not others.

The USE flag will mainly affect packages like openssl, multimedia stuff,

graphics code, compression/decompression, encryption/decryption, etc,

where some package has assembler level support for those specialized

instructions that is enabled or disabled at compile time with a GNU configure

command line option (or some alternative for build trees that do not use

GNU configure). The ebuild for the package will check the USE flags and

call configure accordingly with the parameter to enable or disable that

asm code in the package that it is compiling.

If openssl is built with sse support, then it will use sse instructions every

time it runs. Whether it uses any sse4_2 instructions depends on whether

there are any in the openssl source code as well as whether the ebuild

sees the sse4_2 USE flag.

The USE flags are a Portage feature rather than a gcc feature. They are

a way to tell Portage ebuilds how to configure packages for compiling,

how to configure installation, etc.

----------

## kbzium

Take a look here:

https://forums.gentoo.org/viewtopic-t-861618-start-75.html

He put "march=native" in his config and he got

```
Linux1 billydv # echo "" | gcc -march=native -v -E - 2>&1 | grep cc1

/usr/libexec/gcc/x86_64-pc-linux-gnu/4.6.0/cc1 -E -quiet -v - -D_FORTIFY_SOURCE=2 -march=corei7-avx -mcx16 -msahf -maes -mpclmul -mpopcnt -mavx --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=8192 -mtune=corei7-avx 

```

When run on mine:

```
kboom@kboom-laptop ~ $ echo "" | gcc -march=native -v -E - 2>&1 | grep cc1

 /usr/libexec/gcc/x86_64-pc-linux-gnu/4.5.4/cc1 -E -quiet -v - -D_FORTIFY_SOURCE=2 -march=core2 -mcx16 -msahf -maes -mpclmul -mpopcnt -mavx --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=3072 -mtune=generic

```

and if i use march=corei7-avx i get no other flags:

```
kboom@kboom-laptop ~ $ echo "" | gcc -march=corei7-avx -v -E - 2>&1 | grep cc1

 /usr/libexec/gcc/x86_64-pc-linux-gnu/4.5.4/cc1 -E -quiet -v - -D_FORTIFY_SOURCE=2 -march=corei7-avx

```

----------

