Kompilacia projektu na rozne platformy

Stiahnutie toolchainu a rozbalenie toolchainu

Pre spravne fungovanie toolchainu treba nam rozbehnutu kompilaciu na 2.4 systemy pozri :

Pred tymto krokom je potrebne aby bol mount-nuty phoenix. Postupujte podla: 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: 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

Kompilacia projektu

Na kompiláciu sa používa skript compile, ktorý sa nachádza medzi skriptami vo svojom repozitári (viď git howto)

Parametre skriptu

  1. priecinok priecinok projektu ( povinny ) tento parameter je vzdy prvy pri ostatnych nezalezi na poradi
  2. platforma vždy jeden z prepínačov [ -emtest_xscale -emtest_xscale_26 -i386 -waysion_cortexa8 -rg_cortexa9 -transdata_cortexa9 ] ( povinný )
  3. 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)
  4. 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_<platforma>. 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_<projekt>. 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 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:

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
 
howto/compile.txt · Last modified: 2022/03/25 13:45 by 192.168.242.76
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki