Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

30.05.2014, 15:16

Binärpakete für einen anderen Rechner bauen

Hallo,

ich möchte gerne mit meinem Desktop PC einige Pakete für meinen Laptop bauen. Z.B. webkit-gtk, das auf meinem Laptop über 5 Stunden kompiliert. Jetzt baue ich allerdings grundsätzlich alles mit -march=native, was natürlich für mein Szenario nicht mehr funktionieren kann. Jetzt frage mich, wie ich die CFLAGS am besten anpasse, damit die gebauten Pakete auch auf meinem Laptop laufen.

Die momentan aktivierten Flags lasse ich mir mit gcc -march=native -E -v - </dev/null 2>&1 | grep cc1 ausgeben.

Desktop

Quellcode

1
/usr/libexec/gcc/x86_64-pc-linux-gnu/4.7.3/cc1 -E -quiet -v - -march=amdfam10 -mcx16 -msahf -mno-movbe -mno-aes -mno-pclmul -mpopcnt -mabm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mno-avx -mno-avx2 -mno-sse4.2 -mno-sse4.1 -mlzcnt -mno-rdrnd -mno-f16c -mno-fsgsbase --param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512 -mtune=amdfam10


Laptop

Quellcode

1
 /usr/libexec/gcc/x86_64-pc-linux-gnu/4.7.3/cc1 -E -quiet -v - -march=btver1 -mcx16 -msahf -mno-movbe -mno-aes -mno-pclmul -mpopcnt -mabm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mno-avx -mno-avx2 -mno-sse4.2 -mno-sse4.1 -mlzcnt -mno-rdrnd -mno-f16c -mno-fsgsbase --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=512 -mtune=btver1


Was nehme ich denn jetzt am besten in die make.conf auf? -march weglassen und stattdessen die Flags manuell setzen? Wenn ja, welche genau? Alles, was übereinstimmt?

Die -march Einträge bedeuten

Zitat

amdfam10
AMD Family 10h core based CPUs with x86-64 instruction set support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set extensions.)

Zitat

bdver1
AMD Family 15h core based CPUs with x86-64 instruction set support. (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)


Mit Hilfe der Dokumentation https://gcc.gnu.org/onlinedocs/gcc-4.7.3…_002d64-Options würde ich jetzt folgendes vorschlagen:

Quellcode

1
CFLAGS="-O2 -pipe -mmmx -msse -msse2 -msse3 -msse4a -mabm -m64 -mcx16 -msahf -mno-movbe -mno-aes -mno-pclmul -mpopcnt -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mno-avx -mno-avx2 -mno-sse4.2 -mno-sse4.1 -mlzcnt -mno-rdrnd -mno-f16c -mno-fsgsbase"


Was bedeutet eigentlich dieses -mno? Also -mno-sse? Ich merke gerade, mit CFLAGS bin noch nicht so wirklich vertraut :(. Wäre das so ok oder mache ich gerade ziemlichen Unsinn? Vielleicht kann mir hier jemand auf die Sprünge helfen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dexfill« (04.07.2014, 15:53)


2

31.05.2014, 21:37

Hallo,

wenn nicht wirklich etwas spezielles mit deinen PCs machst, dann vergiss das mal alles. Wir arbeiten in der Firma (jetzt ca. 30 Gentoo Server) alles mit Binary Paketen wo es möglich ist. Wichtig ist die Rechner die Binary aufnehmen sollen, müssen generic gebaut werden. Ausnahme, ist in alles zu 100% gleiche CPUs, Nut weil man alle Geräte mit Pentium i7 ausgestatttet hat, heist das noch lange nicht dies alles die gleichen CPUs sind.

Bei 64 bit:
CFLAGS="-march=x86-64 -O2 -pipe"

Bei 32 bit:
CFLAGS="-march=i686 -O2 -pipe"

Danach musst du ein System zuerst komplett neu bauen lassen. Natürlich gleich mit den Flags für den Paketbau in der make.conf

Quellcode

1
FEATURES="buildpkg"


Befehl hierfür: emerge -vpuDNe world Vorher aber gcc und glibc bauen!!!

Hast du den ersten durch (am besten der mit den meisten Paketen, oder eben der schnellste) kannst du schon auf allen anderen Geräten die Binarys über emrege installieren. Die Binarys die nicht existieren, werden wieder von den anderen Geräten gebaut.
Hast du die Möglichkeit die Pakete gleich wo Zentral bauen zu lassen, wäre es natürlich optimal. Event. Webserver drauf, und los gehts.

Du kannst auch gerne unseren Paketserver einbinden. Werden ca. wöchentlich gebaut. Sind aber alles Server, wird also nicht so viel dabei sein:

Quellcode

1
PORTAGE_BINHOST="https://styrion.at/gentoo/packages-hardened-amd64-generic"


Der Befehl zum Bauen von einem Binhost wäre:

Quellcode

1
emerge -vakg htop



lg
boospy
Gentoo Can Do!

Wiki auf: http://deepdoc.at

3

02.06.2014, 12:52

Hallo boospy,

danke für den Tipp! Wenn ich das richtig verstehe, reicht es doch aber, wenn ich die CFLAGS auf dem Build-Rechner ändere, d.h. ich trage bei meinem Desktop Rechner CFLAGS="-march=x86-64 -O2 -pipe" ein. Ein kompletten Rebuild des Systems möchte ich eigentlich nicht. Reicht es, wenn ich mit der geänderten make.conf webkit-gtk baue (würde ich in diesem Fall mit --buildpkgonly machen) oder muss ich zuerst gcc neu bauen?

4

04.07.2014, 15:53

Kurzes Update

Es hat geklappt. Ich habe nach einigen Überlegungen in der make.conf meines Desktop PCs folgende Änderung durchgeführt

Quellcode

1
CFLAGS="-O2 -pipe -march=x86-64 -mmmx -msse -msse2 -msse3 -msse4a -mabm -mlzcnt -mtune=generic"

Damit gebaute Pakete kann ich problemlos auf meinem Laptop installieren und sie laufen bisher auch ohne Fehler. An der make.conf von meinem Laptop habe ich allerdings nichts geändert. Brauche ich anscheinend auch nicht.

Auf meinem Desktop habe ich jetzt noch einen Apache2 Webserver eingerichtet, damit ich die Pakete komfortabel über das Netzwerk beziehen kann. Ich setze damit das Thema mal auf "gelöst".