Křížová kompilace OpenLDAP

V jednom z předchozích příspěvků jsem představil způsob, jak ze zkompilovat zdrojové kódy pro openLDAP. V tomto příspěvku předvedu, jak lze tyto zdrojové kódy zkompilovat pro jinou architekturu, než tu, na které kompilujeme. Nejedná se o nic převratného, ale spíše o standardní přístup, jak zkompilovat nějakou větší aplikaci pro slabší hardware, například Cubieboard.

Pro křížovou kompilaci je nutné mít přístupný kompilátor pro danou cílovou architekturu. V návodu je použit toolchain gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux, cílová architektura je tedy arm-linux-gnueabihf. Dále je nutné mít stažené zdrojové kódy pro openLDAP a BerkeleyDB.

Prvním krokem je rozbalení toolchainu do složky /home/user/cross_compile

tar xvf gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar -C /home/user/cross_compile/

Druhým krokem je křížová kompilace a instalace BerkeleyDB, protože na ní openLDAP závisí. Následuje pár příkazů, pomocí kterých dosáhneme kompilace a instalace.

tar xvf db-5.1.25.tar.gz
cd db-5.1.25/
./dist/configure --host=arm-linux-gnueabihf\
 CC=/home/user/development/cross_compile/bin/arm-linux-gnueabihf-gcc\
 --prefix=/home/user/development/db
make -j8
make install

Configure přijímá řadu parametrů, zde mu zadáváme především CC, pomocí kterého specifikujeme toolchain, který má být pro kompilaci použit. Při využití křížové kompilace je navíc nutné specifikovat proměnnou –host. Posledním specifikovaným parametrem je –prefix, ten určuje, kam se má výsledný binární soubor zkopírovat.

Posledním a nejobtížnějším krokem je křížová kompilace vlastního openLDAP.

tar xvf openldap-2.4.44.tar
cd openldap-2.4.44.tar
CPPFLAGS="-I/home/user/development/db/include"\
 LD_LIBRARY_PATH="/home/user/development/db/lib"\
 LDFLAGS="-L/home/user/development/db/lib"\
 ./configure --host=arm-linux-gnueabihf\
 CC=/home/user/development/cross_compile/bin/arm-linux-gnueabihf-gcc\
 --with-yielding_select=yes\
 --prefix=/home/user/development/cross_openldap

Během přípravy kompilace je možné stejně jako pro BerkeleyDB specifikovat řadu parametrů. Hlavními, které jsou zde navíc oproti BerkeleyDB jsou proměnné CPPFLAGS, LD_LIBRARY_PATH a LDFLAGS, které směřují kompilátor ke zdrojovým kódů a knihovnám Berkeley databáze. Pozorný čtenář si jiště povšimne toho, že zde chybí základní make a make install. Ty chybí z toho důvodu, že zdrojové kódy je nutné mírně upravit, abyje bylo možné zkompilovat.

sed -i 's/#define NEED_MEMCMP_REPLACEMENT 1/#undef NEED_MEMCMP_REPLACEMENT/' include/portable.h

Po provedení příkazu výše je už možné openLDAP zkompilovat. Příkaz nahradí definici makra NEED_MEMCMP_REPLACEMENT jeho oddefinováním. Zatím mi není úplně jasné, zda se tímto krokem instalace nepoškodí.

make -j8

Posledním krokem je instalace, opět je ale nutné mírně upravit instalační skript, tak aby vše prošlo bez problémů. Jednořádkový sed skript opět udělá vše potřebné. V tomto případě se jedná o chybu v instalačním skriptu shtool, kdy se používá systémový příkaz strip namísto stejného příkazu z toolchainu.

sed -i 's#strip#$CC_STRIP $dsttmp#g' build/shtool
make install

V tuto chvíli už by mělo být vše nainstalováno a připraveno k použití.

 


by