Ähnlich wie bei Redhat/CentOS gibt es im Makepkg-System von Arch Linux einen Parameter, der das „make -j“ – also die Anzahl der Jobs beim Kompilieren steuert. Unter /etc/makepkg.conf befinden sich sämtliche Einstellungen, die beim Paketbau den Compiler betreffen. Mittlerweile habe ich auf einem PC einen AMD FX-8350 alias ‚Vishera‘, quasi den Nachfolger des nicht so erfolgreichen Bulldozer. Die neuen Kerne nennen sich „Piledriver“, was später noch eine Rolle spielt. Wenn ich unter Arch mal ein Paket selbst baue, dann lohnt es sich aber die 8 Pseudokerne voll auszulasten, um die Kompilierzeit zu verkürzen. Naja und wenn wir eh schon an der Datei schrauben, können wir auch gleich noch die CFLAGS auf unser System anpassen – so kommt ein wenig Gentoo-Feeling auf ;).
Makepg.conf anpassen
Die Standardvariante sieht so aus:
######################################################################### # ARCHITECTURE, COMPILE FLAGS ######################################################################### # CARCH="x86_64" CHOST="x86_64-unknown-linux-gnu" #-- Compiler and Linker Flags # -march (or -mcpu) builds exclusively for an architecture # -mtune optimizes for an architecture, but builds for whole processor family CPPFLAGS="-D_FORTIFY_SOURCE=2" CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4" CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4" LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro" #-- Make Flags: change this for DistCC/SMP systems #MAKEFLAGS="-j2" #-- Debugging flags DEBUG_CFLAGS="-g -fvar-tracking-assignments" DEBUG_CXXFLAGS="-g -fvar-tracking-assignments"
Diese Konfiguration passt so ziemlich auf jedes System, das x86-64 unterstützt. Allerdings ist -j2 genauso allgemeingültig gewählt und lässt viele Mehrkernprozessoren nur mit halber Kraft arbeiten.
Wenn ich nun einen Kernel baue, wären zum einen Optmierungen möglich, die im Kernel unter „Piledriver“ laufen (bei make menuconf mal durch die Optionen schauen), zum anderen kann man dem Compiler (bei uns GCC) auch noch weitere Optionen mit auf den Weg geben. Die entsprechenden GCC Paramter wären bei mir „bdver2“ für Bulldozer Version 2 – allerdings ist makepkg hier einen Schritt voraus. Denn das Flag „native“ bestimmt selbständig die unterstützten CFLAGS und setzt auch die CXXFLAGS korrekt. Daher steht bei mir nun native. Lediglich der Parameter „MAKEFLAGS“ wurde von mir auf „-j9“ gesetzt, da das System über 8 logische Kerne in 4 Modulen verfügt.
######################################################################### # ARCHITECTURE, COMPILE FLAGS ######################################################################### # CARCH="x86_64" CHOST="x86_64-unknown-linux-gnu" #-- Compiler and Linker Flags # -march (or -mcpu) builds exclusively for an architecture # -mtune optimizes for an architecture, but builds for whole processor family CPPFLAGS="-D_FORTIFY_SOURCE=2" CFLAGS="-march=native -O2 -pipe -fstack-protector --param=ssp-buffer-size=4" CXXFLAGS="${CFLAGS}" LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro" #-- Make Flags: change this for DistCC/SMP systems MAKEFLAGS="-j9" #-- Debugging flags DEBUG_CFLAGS="-g -fvar-tracking-assignments" DEBUG_CXXFLAGS="-g -fvar-tracking-assignments"
Dank des neu gesetzten Makeflags -j9 sind nun alle Kerne beim Kernel kompilieren ausgelastet.
Die in /etc/makepg.conf gesetzte Konfiguration sollte nun bei jedem ‚makepkg $insertrandomAURpaket‘ greifen, sofern der Paketmaintainer aus dem AUR Repository in seiner Konfiguration die Parameter nicht überschreibt oder anderweitig hardcodiert.