Наиболее последняя версия - Постепенно все изменения будут переноситься оттуда.----------------------------------------------------------------Компиляция linux-утилит под AndroidПусть все мы делаем в домашней директории (/home/xvilka), создадим там каталог build Кодmkdir $HOME/buildПодготовкаСкачиваем ядро, которое установлено в вашем устройстве, распаковываем, собираем заголовки Кодmake headers_install ARCH=arm INSTALL_HDR_PATH=$HOME/build/kern_h/ Узнаем какой у нас процессор в устройстве и используем конфиги в соотвествии с этим. Также определим переменную оптимизации для вашего оборудования (указываем в опциях .configure и make для всех программ кроме crosstool и toolchain) При составлении таблицы использовались данные: К примеру у меня выполняется следующая команда: Кодexport _XXFLAGS=" -march=armv7-a -mtune=cortex-a8 -mfpu=neon -Os"Скачиваем распаковываем, собираем (нужны установленные make,install,bash,cut,sed,grep,gcc,awk,bison,flex,automake,libtool,stat, wget,cvs,patch,tar,gzip,bzip2,lzma,readlink,ncurses, mpfr-dev, gmp-dev) Код.configuremakemake installСборка тулчейнаСкачиваем необходимые нам Создаем каталог toolchain-android, переходим в него и копируем файл КодXVilka-crosstool-<суффикс>.config в .configXVilka-uClibc-<суффикс>.config в uClibc.configпотом запускаем Кодct-ng menuconfigизменяем, если необходимо - помним что это зависит лишь от того оборудования, под которое собираете! сохраняем в .config запускаем Кодct-ng buildИтак все собралось. Теперь имеем каталог в своей директории build/x-tools. В нем появились компиляторы для сборки вида Кодarm-android-linux-uclibsgnueabi-*для того чтобы было проще запускать их добавим этот каталог в переменную окружения PATH Кодexport PATH=$HOME/build/x-tools/arm-android-linux-uclibcgnueabi/bin:$PATHтеперь мы имеем возможность запускать компилятор командой Кодarm-android-linux-uclibcgnueabi-gccКорневая директория целевой системы находится по адресу Код$HOME/build/x-tools/arm-android-linux-uclibcgnueabi/arm-android-linux-uclibcgnueabi/sys-rootТуда мы не будем все устанавливать. Скопируем его в папку $HOME/build/cross/sys-root Кодcp $HOME/build/x-tools/arm-android-linux-uclibcgnueabi/arm-android-linux-uclibcgnueabi/sys-root $HOME/build/crosscd $HOME/build/crosschmod +w sys-rootchmod +w sys-root/usrchmod +w sys-root/usr/libchmod +w sys-root/usr/includeСкопируем файлы для успешной компиляции некоторых программ - libgcc и libstdc++: Кодcp ~/build/x-tools/arm-android-linux-uclibcgnueabi/lib/gcc/arm-android-linux-gnueabi/4.4.3/{libgcc.a,libgcc_eh.a} \~/build/cross/sys-root/usr/libcp ~/build/x-tools/arm-android-linux-uclibcgnueabi/arm-android-linux-uclibcgnueabi/lib/libstd++{.a,.la,_pic.a} \~/build/cross/sys-root/usr/libchmod -w ~/build/cross/sys-root/usr/libСборка основного дерева AndroidСначала скачаем все дерево Android. Здесь пример как это сделать для mainstream ветки: Кодmkdir mydroidcd mydroidrepo init -u git://android.git.kernel.org/platform/manifest.gitrepo syncВсе! Теперь у нас в каталоге mydroid лежит все что нужно для сборки Android. Сборка пакетного менеджераВ качестве пакетного менеджера мы будем использовать : Кодsvn co http://opkg.googlecode.com/svn/trunk/ opkgcd opkgПрименяем патчи, прилагающиеся к конфигурационным файлам, копируем их в каталог с исходниками opkg Кодpatch -p0 < {opkg-cl.c.patch,opkg_conf.c.patch,opkg_conf.h.patch,opkg.c.patch,opkg_static.patch}./autogen.sh --host=arm-unknown-linux --target=arm-unknown-linux CC="arm-android-linux-uclibcgnueabi-gcc" \CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" CFLAGS=" -static -fPIC $_XXFLAGS" \CXXFLAGS=" -static -fPIC $_XXFLAGS" \LDFLAGS=" -static -fPIC -s -L$HOME/build/cross/sys-root/usr/lib -lm -lc -lgcc" \AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" \LD="arm-android-linux-uclibcgnueabi-g++" RANLIB="arm-android-linux-uclibcgnueabi-ranlib" \OBJDUMP="arm-android-linux-uclibcgnueabi-objdump" STRIP="arm-android-linux-uclibcgnueabi-strip" \NM="arm-android-linux-uclibcgnueabi-nm" CXX="arm-android-linux-uclibcgnueabi-g++" --disable-dependency-tracking \--with-pic cross_compiling=yes --disable-curl --disable-gpg --prefix=$HOME/build/cross/sys-root/usr \--enable-static --disable-shared --with-gnu-ldmakemake installНа устройстве копируем opkg-cl в /system/xbin/opkg Все теперь мы можем пользоваться пакетным менеджером opkg. Сборка библиотекЗдесь описан метод сборки разделяемых библиотек, при котором не создается зависимости их от других билиотек, например от libc, для упрощения портирования приложений. То есть все что необходимо для работы такой библиотеки вкомпилено в нее статически, хотя она сама является разделяемой. Приведу примеры: libFLACСкачиваем последнюю версию libFLAC с их официального сайта, распаковываем и заходим в каталог Код./autogen.sh --host=arm --target=arm-android-linux-uclibcgnueabi CC="arm-android-linux-uclibcgnueabi-gcc" \CXX="arm-android-linux-uclibcgnueabi-g++" STRIP="arm-android-linux-uclibcgnueabi-strip" \AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" LD="arm-android-linux-uclibcgnueabi-ld" \RANLIB="arm-android-linux-uclibcgnueabi-ranlib" OBJDUMP="arm-android-linux-uclibcgnueabi-objdump" \NM="arm-android-linux-uclibcgnueabi-nm" CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \CFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS" \CXXFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS" \LDFLAGS=" -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lm -lc" --prefix="$HOME/build/cross/sys-root/usr" \ --disable-ogg --disable-oggtest --disable-rpath --disable-xmms-plugin --disable-cpplibs --disable-altivec \--disable-3dnow --disable-thorough-tests --disable-doxygen-docscd src/libFLACmakecd .libsarm-android-linux-uclibcgnueabi-ld -shared -s -o libFLAC.so -whole-archive libFLAC.aНа выходе получаем динамическую разделяемую библиотеку libFLAC.so, которую можно смело устанавливать в систему, и при этом она не зависит ни от одной (!) другой библиотеки. Каталогом выше - заголовочные файлы для включения в свои программы при использовании libFLAC.so Но больше она рассчитана на dlopen() libxvidcoreКодcd src/build/generic./configure --host=arm --target=arm-android-linux-uclibcgnueabi CC="arm-android-linux-uclibcgnueabi-gcc" \CXX="arm-android-linux-uclibcgnueabi-g++" STRIP="arm-android-linux-uclibcgnueabi-strip" \AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" \LD="arm-android-linux-uclibcgnueabi-ld" RANLIB="arm-android-linux-uclibcgnueabi-ranlib" \OBJDUMP="arm-android-linux-uclibcgnueabi-objdump" NM="arm-android-linux-uclibcgnueabi-nm" \CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \CFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS" \CXXFLAGS=" -nodefaultlibs -nostdlib -fPIC $_XXFLAGS" \LDFLAGS=" -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lm -lc" --prefix="$HOME/build/cross/sys-root/usr"cd =buildarm-android-linux-uclibcgnueabi-ld -shared -s -o libxvidcore.so -whole-archive libxvidcore.aна выходе получаем динамическую разделяемую библиотеку libxvidcore.so, которую можно смело устанавливать в систему, и при этом она не зависит ни одной другой библиотеки. libncursesСкачиваем последнюю версию, распаковываем, заходим в каталог: Код./configure --host=arm --target=arm-android-linux-uclibcgnueabi CC="arm-android-linux-uclibcgnueabi-gcc" \CXX="arm-android-linux-uclibcgnueabi-g++" STRIP="arm-android-linux-uclibcgnueabi-strip" \AR="arm-android-linux-uclibcgnueabi-ar" AS="arm-android-linux-uclibcgnueabi-as" LD="arm-android-linux-uclibcgnueabi-ld" \RANLIB="arm-android-linux-uclibcgnueabi-ranlib" OBJDUMP="arm-android-linux-uclibcgnueabi-objdump" \NM="arm-android-linux-uclibcgnueabi-nm" CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \CFLAGS=" -nodefaultlibs -nostdlib -fPIC -DCBAUD=0010017 $_XXFLAGS" CXXFLAGS=" -nodefaultlibs -nostdlib -fPIC -DCBAUD=0010017 $_XXFLAGS" \LDFLAGS=" -nodefaultlibs -nostdlib -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lc -lgcc -lm -liberty -lgcc_eh -lstdc++" --prefix="$HOME/build/cross/sys-root/usr" \--disable-big-core --disable-database --enable-termcap --with-fallbacks=linux,vt100 --without-debug --without-ada \--without-xterm-new --without-terminfo --without-develop --disable-ext-funcs --disable-GPM --disable-shared --enable-static --without-shared --with-staticmake(тут посыпятся ошибки линковки, но нам она не нужна)cd libarm-android-linux-uclibcgnueabi-ld -shared -s -o libncurses.so -whole-archive libncurses.aarm-android-linux-uclibcgnueabi-sstrip libncurses.socp libncurses.so $HOME/build/cross/sys-root/libcp libncurses.a $HOME/build/cross/sys-root/usr/libcd includemake installтакже libcurses.so мы можем смело копировать на устройство в системный каталог для библиотек. Все! Теперь мы можем компилировать программы на основе ncurses как статически, так и динамически. Зависимости от других библиотек также отстутсвуют. Сборка различных утилитbusyboxПока только статика, но вообще именно busybox советую собирать статически всегда, чтобы в независимости от наших манипуляций с библиотеками он всегда мог запуститься и выручить вас Применяем патчи, прилагающиеся к конфигурационным файлам, копируем их в каталог с исходниками busybox командой Кодpatch -p0 < {busybox-Makefile.patch,busybox-trylink.patch}копируем файл XVilka-busybox-<суффикс>.config в .config Кодmake menuconfig (только если хотите что-то поменять в настройках, иначе не надо)make (если будут какие-то вопросы, соглашаемся)make install CONFIG_PREFIX=~/build/cross/sys-root arm-android-linux-uclibcgnueabi-sstrip busyboxКопируем файл ~/build/cross/sys-root/bin/busybox в /system/bin на устройстве Кодchown root /system/bin/busyboxchmod 755 /system/bin/busyboxln -s /system/bin/busybox /system/bin/ashТекстовый редактор juppМожно скачать Кодchmod +x configure./configure --prefix=/system/local --disable-curses --disable-termcap --disable-termidx --host=arm-android-linux-uclibcgnueabi ARCH=arm \CC="arm-android-linux-uclibcgnueabi-gcc" CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" sysconfdir=/system/usr/local/etc sysconfjoesubdir=/joe \CFLAGS=" -static $_XXFLAGS"makearm-android-linux-uclibcgnueabi-strip joeУже на устройстве: Кодкопируем joe в /system/binкопируем joerc в /system/usr/local/etc/joeкопируем jupprc в /system/usr/local/etc/joeкопируем jmacsrc в /system/usr/local/etc/joeкопируем файлы синтаксиса в /system/usr/local/etc/joe/syntaxchmod 755 /system/bin/joeln -s /system/bin/joe /system/bin/juppln -s /system/bin/joe /system/bin/jmacschmod 644 /system/usr/local/etc/joe/joercchmod 644 /system/usr/local/etc/joe/jupprcchmod 644 /system/usr/local/etc/joe/jmacsrcперед запуском joe надо указать переменную TERM Кодexport TERM=ansiСистема компьютерной алгебры yacasСкачиваем последний релиз yacas, распаковываем и переходим в каталог yacas/src Заменяем Makefile моим XVilka-yacas.Makefile и выполняем: Кодmake CC="arm-android-linux-uclibcgnueabi-gcc" CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \CFLAGS=" -static -fPIC $_XXFLAGS" CXXFLAGS=" -static -fPIC $_XXFLAGS" \LDFLAGS=" -static -fPIC -s -L$HOME/build/cross/sys-root/usr/lib -lm -lc -lgcc -lstdc++" \AR="arm-android-linux-uclibcgnueabi-ar"
MotoFan.Ru - все для моторола > Компиляция под Android - руководство
Комментариев нет:
Отправить комментарий