Autor Wątek: Tworzenie aplikacji qmake pod własny procesor z użyciem PKGBUILD  (Przeczytany 5829 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

pavbaranov

  • Administrator
  • Ekspert
  • *****
  • Wiadomości: 848
  • Reputacja +25/-0
  • Architektura: x86_64
  • DE/WM: KF5.16+Plasma5.4.95+KDEApps 15.11.80+git na KF5
  • Distro: Arch Linux
  • GPU: Radeon free
  • Kernel: 4.3 (BFQ/CK/BLD/UKSM/+optymalizacje)
Wiemy już, że w makepkg.conf możemy ustawić flagi dla kompilatora, które powodują tworzenie paczek z uwzględnieniem szczególnych procesorowi właściwości. Część bawiących się w kompilację twierdzi, że tak skompilowany program działa lepiej od skompilowanego przy użyciu "ogólnych" reguł. Problem w tym, że aplikacje budowane w oparciu o Qt zwykle "wiedzą lepiej" od makepkg.conf i wykorzystują "ogólne" reguły, tworząc program "generyczny", czyli korzystający z podstawowych flag.
Niestety prosto nie będzie.
Możemy oczywiście zmienić qmake.conf i wprowadzić tam zmienną QMAKESPEC. Wówczas każdy program kompilowany przy użyciu qmake będzie korzystać z tych zmiennych. O tym jednak później.
Możemy również zmodyfikować dowolny PKGBUILD programu korzystającego z qmake dla wstępnej kompilacji. Robimy to następująco:
1. Przede wszystkim musimy ściągnąć sobie PKGBUILD. Najprościej jest to zrobić przez:
yaourt -G nazwa_paczkiW ten sposób zostaną ściągnięte "reguły", które budują w Archu określoną paczkę.
2. Przechodzimy do ściągniętej "paczki" i edytujemy PKGBUILD:
cd nazwa_paczki
nano PKGBUILD
3. Musimy dodać zmienne CFLAGS i CXXFLAGS. Dopisujemy zatem w dowolnym miejscu np. po sources:
CFLAGS="-march=X ewentualnie_coś_innego"
CXXFLAGS="march=X ewentualnie_coś_innego"
W miejscu X wpisać powinniśmy flagę dla naszego procesora, potem dodać zmienną -mtune= i również jego flagę itp. itd. Niemniej jednak od G++ w wersji 4.2, kompilator ten potrafi odczytać właściwe flagi dla naszego procesora. Wystarczy w -march= wpisać native, czyli:
CFLAGS="-march=native"i to winno wystarczyć za wszelkie flagi. Jeśli chcemy je wpisać dokładnie, to najpierw musimy je poznać poprzez:
gcc -march=native -E -v - </dev/null 2>&1 | sed -n 's/.* -v - //p'i efekt wpisać w zmienną.
CXXFLAGS ustawiamy tak samo jak CFLAGS.
4. Oszukujemy sekcję build. Znajdziemy tam linię rozpoczynającą się od qmake/qmake-qt4/qmake-qt5. Do tej linii dodajemy wskazanie na plik *.pro. Najczęściej będzie to plik, gdzie w miejscu * należy wskazać nazwę taką samą jak nazwa programu. Możemy spróbować wykorzystać tego typu składnię:
qmake-qt4 "$srcdir/$_pkgname-$pkgver-src/$_pkgname.pro" \dla aplikacji Qt4 lub:
qmake "$srcdir/$_pkgname-$pkgver-src/$_pkgname.pro" \dla aplikacji Qt5.
Niekiedy sztuczka ta się nie udaje, zatem będziemy musieli podać bezwzględną ścieżkę do pliku *.pro. Najprościej jest wykonać polecenie:
makepkg -olub makepkg -soa następnie przejść to katalogu src/nazwa/ i odnaleźć nazwę pliku *.pro, którą należy wpisać po qmake.
5. Dodajemy zmienne dla qmake.
Pośród różnych zmiennych, które tam muszą być, dodajemy:
CONFIG+=LINUX_INTEGRATED \
        QMAKE_CFLAGS_RELEASE="${CFLAGS}" \
        QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}"
pamiętając, że każda linia przekazywanej zmiennej kończy się znakiem "\", zaś ostatnia linia (przed "make") tego znaku nie posiada.
Finito.
Teraz jeszcze należy zbudować paczkę wykonując polecenie:
makepkg -sircOczywiście, programy/biblioteki funkcjonujące jako zależności również należałoby zoptymalizować i skompilować oraz zainstalować wcześniej (zmienne: depends, makedepends w PKGBUILD)
« Ostatnia zmiana: Wrzesień 01, 2015, 16:08:43 wysłana przez pavbaranov »

 

Polityka cookies
Darmowe Fora | Darmowe Forum
weganizm endercraft articz kociaprzystan polskiedobrerpg