sobota, 3 czerwca 2017

Hardcore - Kompilacja programu pod własny procesor, cz. 4 - cmake

Kontynuując ten mini cykl, pozostało mi jeszcze jedno narzędzie do automatycznego sterowania procesem kompilacji, które oporne jest na ustawienia makepkg.conf - jest nim często stosowany w "świecie" Qt - cmake. Dotychczasowe sztuczki nie pomagają. W zasadzie, to stosowne wpisy winny być umieszczone w pliku CMakeLists.txt i można byłoby się pokusić o wykorzystanie np. sed w tym celu. Wydaje się jednak, że istnieje prostrza możliwość. Problem jedynie w tym, że nie mam 100% pewności, że ona działa prawidłowo. W przeciwieństwie do innych, cmake nie informuje nas, czy kompiluje program z wykorzystaniem flag właściwych dla naszego procesora. Sztuczka polega na delikatnej ingerencji w PKGBUILD. Dodać musimy pewien wpis, w zasadzie w dowolnym miejscu przed budową programu. Ja do tego używam sekcji prepare, zatem stosowny, dodatek może wyglądać tak:
prepare() { export CFLAGS=-march=native export CXXFLAGS=-march=native }
I w zasadzie tyle. W powyższym przykładzie użyłem możliwości gcc "odgadnięcia" na jakim procesorze przychodzi mu kompilować program, czyli flagi native. Wówczas nawet nie jest konieczne ustawienie flagi mtune, albowiem sam kompilator przyporządkuje taką samą jak dla march. Oczywiście zamiast native można użyć konkrentej flagi dla naszego procesora oraz również wprowadzić zmienną mtune dla niego właściwą.