Poradniki > Podstawy

Tworzenie aplikacji qmake pod własny procesor z użyciem PKGBUILD

(1/1)

pavbaranov:
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:

--- Kod: ---yaourt -G nazwa_paczki
--- Koniec kodu ---
W 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:

--- Kod: ---cd nazwa_paczki
nano PKGBUILD
--- Koniec kodu ---
3. Musimy dodać zmienne CFLAGS i CXXFLAGS. Dopisujemy zatem w dowolnym miejscu np. po sources:

--- Kod: ---CFLAGS="-march=X ewentualnie_coś_innego"
CXXFLAGS="march=X ewentualnie_coś_innego"
--- Koniec kodu ---
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:

--- Kod: ---CFLAGS="-march=native"
--- Koniec kodu ---
i to winno wystarczyć za wszelkie flagi. Jeśli chcemy je wpisać dokładnie, to najpierw musimy je poznać poprzez:

--- Kod: ---gcc -march=native -E -v - </dev/null 2>&1 | sed -n 's/.* -v - //p'
--- Koniec kodu ---
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ę:

--- Kod: ---qmake-qt4 "$srcdir/$_pkgname-$pkgver-src/$_pkgname.pro" \
--- Koniec kodu ---
dla aplikacji Qt4 lub:

--- Kod: ---qmake "$srcdir/$_pkgname-$pkgver-src/$_pkgname.pro" \
--- Koniec kodu ---
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:

--- Kod: ---makepkg -o
--- Koniec kodu ---
lub
--- Kod: ---makepkg -so
--- Koniec kodu ---
a 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:

--- Kod: --- CONFIG+=LINUX_INTEGRATED \
        QMAKE_CFLAGS_RELEASE="${CFLAGS}" \
        QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}"
--- Koniec kodu ---
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:

--- Kod: ---makepkg -sirc
--- Koniec kodu ---
Oczywiś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)

Nawigacja

[0] Indeks wiadomości

Idź do wersji pełnej