====== Kompilacia projektu na rozne platformy ======
===== Stiahnutie toolchainu a rozbalenie toolchainu =====
Pre spravne fungovanie toolchainu treba nam rozbehnutu kompilaciu na 2.4 systemy pozri :
* [[howto:kubuntudevoldsystem2|Vyvoj emtest aplikacii v Kubuntu - for old emtest system (kernel 2.4, QT3)]]
Pred tymto krokom je potrebne aby bol mount-nuty phoenix. Postupujte podla: [[http://192.168.241.14/wiki/doku.php?id=howto:kubuntudev|add phoenix to fstab]]. \\
Postup:
sudo mkdir /usr/toolchain/ && cd /usr/toolchain/
sudo cp /usr/local/emtest/toolchain/toolchain.tar.gz .
sudo tar -xf toolchain.tar.gz
Qmake.conf sa nachadza v zavislosti na systemoch:
Pred tymto krokom je potrebne mat nainstalovanu Qt4/5 podla potreby v systeme. Postupujte podla: [[http://192.168.241.14/wiki/doku.php?id=howto:kubuntudev|Navod na instalaciu vyvojoveho prostredia]].
**Kubuntu 14.* LTS:**
/usr/share/qt4/mkspecs/default/qmake.conf
**Kubuntu 16.* LTS:**
Pre kubuntu 16.* LTS je to potrebne pridat aj do qt5 aj qt4:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64/
/usr/share/qt4/mkspecs/linux-g++-64/
/usr/share/qt4/mkspecs/linux-g++-32/
**Kubuntu 20.* LTS:**
Pre kubuntu 20.*LTS staci pridat do:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++
Do //qmake.conf// pridat riadok
CONFIG += i386 develop
Kvoli kompilacii vozidlovej aplikacie: do //qmake.conf// pridat riadok
QMAKE_CXXFLAGS += -DI386 -DDEVELOP
priprava pre 64.bit
QMAKE_CXXFLAGS += -DX86_64 -DDEVELOP
Define develop sa vyuziva na odlisenie vyvojarskeho PC od zariadenia s I386 platformou
V pripade GCC 5.1 a vyssie pre i386, moze linker vyhlasit chyby s nedefinovanymi symbolmi pre std::__cxx11.
V takomto pripade je potrebne projekt vykompilovat pre c++11, alebo //qmake.conf// vypnut nove ABI:
QMAKE_CXXFLAGS += -D_GLIBCXX_USE_CXX11_ABI=0
A pre kompilaciu 32bit aplikacie na 64bit systeme do //qmake.conf// pridat riadok
QMAKE_CFLAGS = -m32
QMAKE_LFLAGS = -m32
Pridat cestu na phoenixa pre najdenie kompilacnych skriptov:
echo "PATH=/usr/local/emtest/bin/compile_new/:$PATH" >> ~/.bashrc
ALEBO do /etc/environment ALEBO do ~/.profile ALEBO si vytvorime alias na skript compile do bash_aliases
echo "alias compile=/usr/local/emtest/bin/compile_new/compile" >> ~/.bash_aliases
Vytvorenie symlinkov pre platformu RG_CortexA9 do systemovej cestu /usr/local/
ln -s /usr/toolchain/rg_cortexa9/gcc-linaro-arm-linux-gnueabihf /usr/local/gcc-linaro-arm-linux-gnueabihf
ln -s /usr/toolchain/rg_cortexa9/colibri-t20 /usr/local/colibri-t20
ln -s /usr/toolchain/rg_cortexa9/Qt5.2_tegra2 /usr/local/Qt5.2_tegra2
ln -s /usr/toolchain/rg_cortexa9/oecore-i686 /usr/local/oecore-i686
**Specialitka na kubuntu 20.04 64bit**: ak pri kompilacii hlasi chybu "stdlib.h: No such file or directory", da sa to vyriesit
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf
riadok
QMAKE_CFLAGS_ISYSTEM = -isystem
nahradit riadkom
QMAKE_CFLAGS_ISYSTEM = -I
===== Kompilacia projektu stary sposob=====
* [[howto:compile_scripts_with_projlibs_in|Kompilacia pre platformy s projlibs.in]]
===== Kompilacia projektu =====
Na kompiláciu sa používa skript **compile**, ktorý sa nachádza medzi skriptami vo svojom repozitári (viď [[howto:git|git howto]])
=== Parametre skriptu ===
- **priecinok** priecinok projektu ( povinny ) **tento parameter je vzdy prvy pri ostatnych nezalezi na poradi**
- **platforma** **vždy jeden** z prepínačov [ -emtest_xscale -emtest_xscale_26 -i386 -waysion_cortexa8 -rg_cortexa9 -transdata_cortexa9 ] ( povinný )
- **jazyk** momentálne je podporovaný len prepínač -sk (nastaví slovenskú lokalizáciu projektu) (nie je povinný, ale bez neho nebudú do balíka začlenené správne šablóny a preklady)
- **volitelne parametre**
* [ -maxcpu ] - na kompiláciu sa použije okrem jedného maximálny počet jadier (jedno dole aby ste mohli pohodlne pracovať)
* [ -fullcpu ] - na kompiláciu sa použije maximálny počet jadier + jedno vlákno navyše (ak niektoré jadro stojí pre IO operáciu, použije sa medzičasom na kompiláciu)
* [ -integrationtesting ] - pouziva sa pre komilaciu integracnych testov, neinkrementuje sa číslo buildu ani sa negeneruje build.txt, pridavaju sa qt scope-y pre integracne testovanie
* [ -clean ] - pred kompiláciou projektu aj podprojektu najprv zavola make distclean
* [ -fresh ] - na začiatku celej kompilácie najprv zmaže adresár so shadow build pre danú platformu
* [ -nobuildnumber ] - neinkrementuje sa číslo buildu ani sa negeneruje build.txt
priklad:
scripts/compile Vesna -transdata_cortexa9 -sk
scripts/compile AppCore -i386
scripts/compile OnboardComputer/ -emtest_xscale_26 -app -maxcpu
scripts/compile Slave -i386 -nobuildnumber -maxcpu -fresh
**Pre správne fungovanie kompilácie musí byť upravený .pro súbor podľa scope !!! **
* **Scopes** : **i386, develop, x86_64, waysion_cortexa8, emtest_xscale, emtest_xscale_26, mikro_cortexa8, transdata_cortexa9**
* //i386// - scope specifikujuci 32bit platformu, pouziva sa na produkcnych zariadeniach a vyvojarskych PC.
* //develop// - scope ktory je pouzivany LEN na vyvojarskych PC. Umoznuje nastavit v .pro suboroch specifike konfiguracie pre vyvoj. Je nutna mat nastavenu platformu //i386// (pripadne //x86_64//) aj //develop//
* //x86_64// - scope specifikujuci 64bit platformu, pouziva sa na produkcnych zariadeniach a vyvojarskych PC.
* //emtest_xscale// - stare zlte citacky s alebo bez oznacovaca
* //emtest_xscale_26// - palubny pocitac mijola, samostatne stojaci oznacovac SSV, novsie verzie citaciek
* //transdata_cortexa9// - novy palubny pocitac Vesna
* //mikro_cortexa8// - citacky mikroelektronika
i386 {
LIBS += -L./../../lib/i386 \
-Wl,--no-as-needed \
-lusb-1.0 \
-lExoApi \
-lExoTb
QMAKE_CXXFLAGS += -Wall -Werror
}
# stare emtest citacky so systemom 2.4 nepodporuju nastavenie 'no-as-needed'
!emtest_xscale {
LIBS += \
-Wl,--no-as-needed
}
emtest_xscale_26 {
LIBS += \
-L./../../lib/emtest_xscale_26
}
waysion_cortexa8 {
LIBS += \
-L./../../lib/waysion_cortexa8
}
emtest_xscale {
LIBS += -L./../../lib/emtest_xscale \
-liw \
-lmad
}
rg_cortexa9 {
LIBS += \
-L./../../lib/rg_cortexa9
}
transdata_cortexa9 {
LIBS += \
-L./../../lib/transdata_cortexa9
}
=== Výsledok skriptu ===
Skript kompiluje projekt do adresára **l_shadow_builds_**. V tomto adresári sú adresáre pre kompilovaný projekt a jeho podprojekty kam sa dané podprojekty/projekty kompilujú a okrem toho sú tam adresáre s názvom **_pkg_**. V tomto adresári je vytvorený inštalačný balík pre zariadenie obsahujúci vykompilovanú aplikáciu, podprojekty, utilitky a nakopírované šablóny a prekladový súbor. Obsah tohto adresára je skomprimovaný a tento archív sa nachádza tiež v tomto adresári
===== Define-y podporovaných platforiem =====
EMTEST_XSCALE - stare emtest citacky so systemom 2.4
EMTEST_XSCALE_26 - mijola so systemom 2.6 a vyssie
WAYSION_CORTEXA8 - zariadenie od firmy waysion, typ X7
RG_CORTEXA9 - zariadenie od firmy R&G
TRANSDATA_CORTEXA9 - nami vyvinuty priemyselny tablet, ktory nikto nechce. Kodove oznacenie 'lacov prasivy tablet'
I386 - 32 bitova produkcna platforma
X86_64 - 64 bitova produkcna platforma
X86_64_TEMP - 64 bitova platforma, na docasne znefunkcnenie funkcionality pokial sa neprepise na podporu 64bit. platformy (napr. kvoli libkam ktore nemame 64 bitove a pod.)
DEVELOP - pouziva sa na odlisenie vyvojarskej funkcionality v zdrojovych kodoch. Prosim poriadne porozmyslajte pred pouzitim spominaneho define-u.
MIKRO_CORTEXA8 - citacka mikroelektronika
===== Rozsirujuce sablony pre vytvorenie instalacneho balika aplikacie =====
Kompilačný systém umožňuje vytvorenie inštalačného balíka aplikácie s možnosťou rozšírenia o doplnkové moduly.
Šablóny obsahujúce konfiguračné súbory, skripty, binárky, prípadne ďalšie súbory sa nachádzajú vo vlastnom repozitári (pozri [[howto:git|git howto]]), ktorý je začlenený od VehicleSystem ako podmodul v adresári package_templates)
Momentálne používané moduly aplikácie:
* Platnobný terminál (Smart card service)
* Dispcerske konfiguracne subory
* Servis tlačiarne
* Aplikácia na aktualizovanie SAM modulu
* Aplikačné utilitky + konfiguračné súbory
Jeden z povinných parametrov kompilácie je platforma a tá okrem iného aj špecifikuje kt. modifikáciu rozširujúcej šablóny aplikácie požiť, a to nasledovne:
{{howto:definicia_platformy_v_sablonach.png|}}
Na obrázku je možné vidieť, že často sú šablóny pre všetky platformy rovnaké (čo riešené symbolickým odkazom na all), ale šablóna môže byť špecifická pre každu platformu. Cieľom je udržať šablóny platforiem jednotné a preto prosím o zváženie, či sa úprava nedá spraviť univerzálne pre všetky platformy.
===== Popis kompilacnych scriptov =====
Kompilačné skripty sa nachádzajú pokope v jednom adresári/repozitári (VehicleSystem ich má začlenený ako podmodul //scripts//)
* ** compile ** hlavný kompilačný skript. Parsuje parametre a spúšťa pred-kompilačné akcie, kompiláciu a post-kompilačné akcie
* ** [platform]/compile ** kompilačný skript pre špecifickú platformu
* ** [platform]/strip_file ** skript pre špecifickú platformu na strip-nutie kniťníc a binárok (rôyne platformy používajú rôzne názvy pre strip rutinu)
* ** pre_compile_actions ** inicilizačné akcie
* inicializácia adresárovej štruktúry shadow build adresára a deploy-adresára
* generovanie čísla build-u
* nastavenie aktuálnej cesty pre kompiláciu
* ** generateBuildNumber ** skript vykonávajúci generovanie čísla buildu
* ** post_compile_actions ** spustenie akcií po úspešnej kompilácii
* vytvára popisný súbor build.txt a zálohuje ho na server (Phoenix)
* vytvorenie balíka a jeho nahratie na server (Phoenix)
* ** log_build ** skript vytvárajúci build.txt a zálohuje ho na server
* ** create_package ** vytvára balík s aplikáciou z vykompilovaných aplikácií a knižníc a definovaných šablón (kt. sú definovane v .pro súboroch)
* ** check_file_system ** vytvára zoznam súborov v inštalačnom balíku spolu s ich checksum-ami
===== Zavislosti =====
* Posledna verzia skriptov pouziva rutinu //realapth//, ktora nie je standardne nainstalovana, tak ak nie je v systeme je potrebne ju doinstalovat (instalacia je doplnena aj v sekcii zaciname)
sudo apt-get install realpath
* Kompilacia pre i386 pomocou skriptov vola standardny qmake, takze ak chceme pouzit specialnu verziu qmake, je potrebne aby zabezpecit aby po spusteni prikazom qmake bola spustena spravna verzia. Najcastejsi sposob je epxport premennej QT_SELECT
export QT_SELECT qt5
./scripts/compile Vesna -sk -i386 -test