motofan logo
> 

Компиляция под Android - руководство

XVilka
сообщение 7.2.2010, 23:24


Мастер
****

Группа: Разработчики
Сообщений: 244
Регистрация: 4.12.2006
Из: Москва
Пользователь №: 109 689
Модель телефона: Motorola Milestone
Прошивка: CM10

Рейтинг: 244



Наиболее последняя версия - WIKI
Постепенно все изменения будут переноситься оттуда.

----------------------------------------------------------------

Компиляция linux-утилит под Android

Пусть все мы делаем в домашней директории (/home/xvilka), создадим там каталог build
Код
mkdir $HOME/build


Подготовка

Скачиваем ядро, которое установлено в вашем устройстве, распаковываем, собираем заголовки
Код
make headers_install ARCH=arm INSTALL_HDR_PATH=$HOME/build/kern_h/


Узнаем какой у нас процессор в устройстве и используем конфиги в соотвествии с этим. Также определим переменную оптимизации для вашего оборудования (указываем в опциях .configure и make для всех программ кроме crosstool и toolchain)

Изображение

При составлении таблицы использовались данные:
gcc.gnu.org
en.wikipedia.org (ARM)

К примеру у меня выполняется следующая команда:
Код
export _XXFLAGS=" -march=armv7-a -mtune=cortex-a8 -mfpu=neon -Os"


Скачиваем crosstool-ng
распаковываем, собираем (нужны установленные 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)
Код
.configure
make
make install


Сборка тулчейна

Скачиваем необходимые нам конфигурационные файлы. Создаем каталог toolchain-android, переходим в него и копируем файл
Код
XVilka-crosstool-<суффикс>.config в .config
XVilka-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/cross
cd $HOME/build/cross
chmod +w sys-root
chmod +w sys-root/usr
chmod +w sys-root/usr/lib
chmod +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/lib
cp ~/build/x-tools/arm-android-linux-uclibcgnueabi/arm-android-linux-uclibcgnueabi/lib/libstd++{.a,.la,_pic.a} \
~/build/cross/sys-root/usr/lib
chmod -w ~/build/cross/sys-root/usr/lib


Сборка основного дерева Android

Сначала скачаем все дерево Android. Здесь пример как это сделать для mainstream ветки:
Код
mkdir mydroid
cd mydroid
repo init -u git://android.git.kernel.org/platform/manifest.git
repo sync


Все! Теперь у нас в каталоге mydroid лежит все что нужно для сборки Android.

Сборка пакетного менеджера

В качестве пакетного менеджера мы будем использовать opkg:
Код
svn co http://opkg.googlecode.com/svn/trunk/ opkg
cd 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-ld
make
make 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-docs
cd src/libFLAC
make
cd .libs
arm-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 =build
arm-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-static
make
(тут посыпятся ошибки линковки, но нам она не нужна)
cd lib
arm-android-linux-uclibcgnueabi-ld -shared -s -o libncurses.so -whole-archive libncurses.a
arm-android-linux-uclibcgnueabi-sstrip libncurses.so
cp libncurses.so $HOME/build/cross/sys-root/lib
cp libncurses.a $HOME/build/cross/sys-root/usr/lib
cd include
make 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/busybox
chmod 755 /system/bin/busybox
ln -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"
make
arm-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/syntax
chmod 755 /system/bin/joe
ln -s /system/bin/joe /system/bin/jupp
ln -s /system/bin/joe /system/bin/jmacs
chmod 644 /system/usr/local/etc/joe/joerc
chmod 644 /system/usr/local/etc/joe/jupprc
chmod 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" 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++"


Все - в этой папке лежит самодостаточный исполняемый файл yacas. Копируем его на устройство, а также скрипты к нему из папки scripts (например в /system/usr/local/etc/yacas)
Код
cp /sdcard/test-build/yacas /system/usr/bin
chown root /system/bin/yacas
chmod 755 /system/bin/yacas
cp -r /sdcard/test-build/scripts/* /system/usr/local/etc/yacas


и на устройстве можно запускать командой
Код
yacas --rootdir /system/usr/local/etc/yacas


Файловый менеджер vifm

(нужна поддержка wide char в uclibc и ncurses, в текущей конфигурации отключена)
Код
git clone git://vifm.git.sourceforge.net/gitroot/vifm/vifm
cd vifm
./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-g++"  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"  CPPFLAGS=" -I$HOME/build/cross/sys-root/usr/include -I$HOME/build/cross/sys-root/usr/include/ncurses" \
LDFLAGS=" -nodefaultlibs -nostdlib -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lc -lgcc -lm -liberty -lncurses"  \
--prefix="$HOME/build/cross/sys-root/usr" --disable-dependency-tracking


Сетевой сканер nmap

К сожалению пока приведен рецепт сборки nmap без замечательной утилиты ncat. Затем скачиваем и собираем nmap В переменной ac_cv_linux_vers указываем версию ядра для вашего android устройства.
Код
svn co --username guest --password "" svn://svn.insecure.org/nmap/
cd nmap
./configure --host=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" \
CPP="arm-android-linux-uclibcgnueabi-cpp" 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 -static $_XXFLAGS -DHAVE_GETADDRINFO -DHAVE_USLEEP -DHAVE_GETTIMEOFDAY \
-DHAVE_SNPRINTF -DHAVE_VSNPRINTF -DHAVE_STRERROR -Dsys_nerr=_sys_nerr -Dsys_errlist=_sys_errlist" \
CXXFLAGS=" -c -nodefaultlibs -nostdlib -fPIC -static $_XXFLAGS -DHAVE_GETADDRINFO -DHAVE_USLEEP -DHAVE_GETTIMEOFDAY \
-DHAVE_SNPRINTF -DHAVE_VSNPRINTF -DHAVE_STRERROR -Dsys_nerr=_sys_nerr -Dsys_errlist=_sys_errlist" \
CPPFLAGS=" -I$HOME/build/cross/sys-root/usr/include" \
LDFLAGS=" -nodefaultlibs -nostdlib -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -zmuldefs" \
LIBS=" -lm -lc -lgcc -liberty -lgcc_eh -lstdc++" \
--prefix="$HOME/build/cross/sys-root/usr" --with-liblua=included --with-libpcre=included \
--with-libdnet=included --without-ncat --without-ndiff --without-zenmap --disable-nls \
--with-libpcap=included --with-pcap=linux ac_cv_linux_vers=2.6.29
make
make install


SSH сервер dropbear

Код
./configure --host=arm-android-linux-uclibcgnueabi CC="arm-android-linux-uclibcgnueabi-gcc"> \
CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \
CFLAGS=" -static $_XXFLAGS" \
--prefix="$HOME/build/cross/sys-root/system/usr/local" --disable-zlib
make
make install


копируем файлы dbclient, dropbearconvert и dropbearkey в /system/bin файл dropbear в /system/sbin
Код
chown root на все
chmod 755 на все


Компилятор tinycc

Код
git clone git://repo.or.cz/tinycc.git
cd tinycc
./configure --host=arm --target=arm-android-linux-uclibcgnueabi ARCH=arm 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-g++"  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"  CPPFLAGS=" -I$HOME/build/cross/sys-root/usr/include" \
LDFLAGS=" -nodefaultlibs -nostdlib -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lc -lgcc -lm -liberty"  \
--prefix="$HOME/build/cross/sys-root/usr" --disable-dependency-tracking --enable-cross \
--cross-prefix="arm-android-linux-uclibcgnueabi-" --sysroot="$HOME/build/cross/sys-root/usr"
make ARCH=arm 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-g++"  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"  CPPFLAGS=" -I$HOME/build/cross/sys-root/usr/include" \
LDFLAGS=" -nodefaultlibs -nostdlib -fPIC -static -s -L$HOME/build/cross/sys-root/usr/lib -lc -lgcc -lm -liberty"


Создание opkg пакетов

Скрипт для создания ipkg-пакета из вашего приложения включен в состав toolchain. Отметим, что его использование не обязательно для тестирования вашго приложения (для этого вы просто можете скопировать необходимые данные и бинарники на Neo при помощи scp), тем не менее, этот скрипт очень удобен, если вы собираетесь поделиться вашим приложением с другими пользователями. om-make-ipkg openmoko-sample2 Теперь у вас есть пакет openmoko-sample2_0.1_armv4t.ipk , можно скопировать его на Neo при помощи `scp', а потом установить: scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202: ssh root@192.168.0.202 opkg install openmoko-sample2_0.1_armv4t.ipk Обратите внимание, что хотя вы и можете распространять сгенерированный ipkg-пакет, он, в сущности, - всего-лишь голый костяк, не содержащий никакой дополнительной информации, такой как, например, библиотечные зависимости. Ниже описано как это исправить. Информацию о версии приложения, описание, имя автора и контактнуя информацию вы можете добавить в control-файл: om-make-ipkg myapp myapp_control Шаблон для файла myapp_control:
Код
Package: $appname
Version: 0.1
Description: package built by openmoko toolchain
Section: openmoko/applications
Priority: optional
Maintainer: $USER
Architecture: armv4t
Homepage: http://www.openmoko.org/
Depends:
Source: ${SRC}


-------------------------------------------------------------------------------------
Сборка утилит для разработчика:
1. Поставить git, repo
2. Загрузить дерево исходников Android
3. Необходимо собрать libSDL статически (platform/external/qemu/distrib/sdl-xxx)
Нужна libALSA-dev, libESD-dev, libX11-dev
Код

./android-configure.sh --prefix=$HOME/build/cross
make
make install

4. Собрать Android Emulator (platform/external/qemu)
Код

./android-configure.sh --sdl-config=$HOME/build/cross/bin/sdl-config
make
strip objs/emulator
sudo cp objs/emulator /usr/local/bin

"xbuild.patch"
Spoiler:

diff -cr build2//core/combo/linux-arm.mk build//core/combo/linux-arm.mk
*** build2//core/combo/linux-arm.mk 2010-03-20 07:11:58.432136427 +0300
--- build//core/combo/linux-arm.mk 2010-03-20 06:59:20.756173199 +0300
***************
*** 15,21 ****
# version.
#
ifeq ($(strip $(TARGET_ARCH_VARIANT)),)
! TARGET_ARCH_VARIANT := armv5te
endif

# TARGET_ARCH_VARIANT used to be called TARGET_ARCH_VERSION
--- 15,21 ----
# version.
#
ifeq ($(strip $(TARGET_ARCH_VARIANT)),)
! TARGET_ARCH_VARIANT := armv7-a
endif

# TARGET_ARCH_VARIANT used to be called TARGET_ARCH_VERSION
***************
*** 37,44 ****

# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
ifeq ($(strip $($(combo_target)TOOLS_PREFIX)),)
! $(combo_target)TOOLS_PREFIX := \
! prebuilt/$(HOST_PREBUILT_TAG)/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
endif

$(combo_target)CC := $($(combo_target)TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
--- 37,43 ----

# You can set TARGET_TOOLS_PREFIX to get gcc from somewhere else
ifeq ($(strip $($(combo_target)TOOLS_PREFIX)),)
! $(combo_target)TOOLS_PREFIX := arm-android-linux-uclibcgnueabi-
endif

$(combo_target)CC := $($(combo_target)TOOLS_PREFIX)gcc$(HOST_EXECUTABLE_SUFFIX)
***************
*** 94,103 ****
-fno-short-enums \
$(arch_variant_cflags) \
-include $(android_config_h) \
! -I $(arch_include_dir)

$(combo_target)GLOBAL_LDFLAGS += \
! $(arch_variant_ldflags)

# We only need thumb interworking in cases where thumb support
# is available in the architecture, and just to be sure, (and
--- 93,103 ----
-fno-short-enums \
$(arch_variant_cflags) \
-include $(android_config_h) \
! -I $(arch_include_dir) \
! -I $HOME/build/cross/sys-root/usr/include

$(combo_target)GLOBAL_LDFLAGS += \
! $(arch_variant_ldflags) -lgcc -lgcc_eh

# We only need thumb interworking in cases where thumb support
# is available in the architecture, and just to be sure, (and
diff -cr build2//core/envsetup.mk build//core/envsetup.mk
*** build2//core/envsetup.mk 2010-03-20 07:11:58.432136427 +0300
--- build//core/envsetup.mk 2010-03-20 06:37:09.744154707 +0300
***************
*** 270,276 ****
ABP:=$(ABP):$(TARGET_OUT_EXECUTABLES)
else
# this should be copied to HOST_OUT_EXECUTABLES instead
! ABP:=$(ABP):$(PWD)/prebuilt/$(HOST_PREBUILT_TAG)/toolchain/arm-eabi-4.4.0/bin
endif
ANDROID_BUILD_PATHS := $(ABP)
ANDROID_PREBUILTS := prebuilt/$(HOST_PREBUILT_TAG)
--- 270,276 ----
ABP:=$(ABP):$(TARGET_OUT_EXECUTABLES)
else
# this should be copied to HOST_OUT_EXECUTABLES instead
! ABP:=$(ABP)
endif
ANDROID_BUILD_PATHS := $(ABP)
ANDROID_PREBUILTS := prebuilt/$(HOST_PREBUILT_TAG)
diff -cr build2//core/main.mk build//core/main.mk
*** build2//core/main.mk 2010-03-20 07:11:58.436137913 +0300
--- build//core/main.mk 2010-03-20 06:12:07.412137657 +0300
***************
*** 96,131 ****
ifneq ($(HOST_OS),windows)

# Check for the correct version of java
! java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! ifeq ($(strip $(java_version)),)
! $(info ************************************************************)
! $(info You are attempting to build with the incorrect version)
! $(info of java.)
! $(info $(space))
! $(info Your version is: $(shell java -version 2>&1 | head -n 1).)
! $(info The correct version is: 1.5.)
! $(info $(space))
! $(info Please follow the machine setup instructions at)
! $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! $(info ************************************************************)
! $(error stop)
! endif

# Check for the correct version of javac
! javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! ifeq ($(strip $(javac_version)),)
! $(info ************************************************************)
! $(info You are attempting to build with the incorrect version)
! $(info of javac.)
! $(info $(space))
! $(info Your version is: $(shell javac -version 2>&1 | head -n 1).)
! $(info The correct version is: 1.5.)
! $(info $(space))
! $(info Please follow the machine setup instructions at)
! $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! $(info ************************************************************)
! $(error stop)
! endif

endif # windows

--- 96,131 ----
ifneq ($(HOST_OS),windows)

# Check for the correct version of java
! # java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! # ifeq ($(strip $(java_version)),)
! # $(info ************************************************************)
! # $(info You are attempting to build with the incorrect version)
! # $(info of java.)
! # $(info $(space))
! # $(info Your version is: $(shell java -version 2>&1 | head -n 1).)
! # $(info The correct version is: 1.5.)
! # $(info $(space))
! # $(info Please follow the machine setup instructions at)
! # $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! # $(info ************************************************************)
! # $(error stop)
! # endif

# Check for the correct version of javac
! # javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
! # ifeq ($(strip $(javac_version)),)
! # $(info ************************************************************)
! # $(info You are attempting to build with the incorrect version)
! # $(info of javac.)
! # $(info $(space))
! # $(info Your version is: $(shell javac -version 2>&1 | head -n 1).)
! # $(info The correct version is: 1.5.)
! # $(info $(space))
! # $(info Please follow the machine setup instructions at)
! # $(info $(space)$(space)$(space)$(space)http://source.android.com/download)
! # $(info ************************************************************)
! # $(error stop)
! # endif

endif # windows

diff -cr build2//envsetup.sh build//envsetup.sh
*** build2//envsetup.sh 2010-03-20 07:11:58.436137913 +0300
--- build//envsetup.sh 2010-03-20 06:33:42.836172547 +0300
***************
*** 102,108 ****
# and in with the new
CODE_REVIEWS=
prebuiltdir=$(getprebuilt)
! export ANDROID_EABI_TOOLCHAIN=$prebuiltdir/toolchain/arm-eabi-4.4.0/bin
export ANDROID_TOOLCHAIN=$ANDROID_EABI_TOOLCHAIN
export ANDROID_QTOOLS=$T/development/emulator/qtools
export ANDROID_BUILD_PATHS=:$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN:$ANDROID_EABI_TOOLCHAIN$CODE_REVIEWS
--- 102,108 ----
# and in with the new
CODE_REVIEWS=
prebuiltdir=$(getprebuilt)
! export ANDROID_EABI_TOOLCHAIN=
export ANDROID_TOOLCHAIN=$ANDROID_EABI_TOOLCHAIN
export ANDROID_QTOOLS=$T/development/emulator/qtools
export ANDROID_BUILD_PATHS=:$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN:$ANDROID_EABI_TOOLCHAIN$CODE_REVIEWS
diff -cr build2//target/product/sdk.mk build//target/product/sdk.mk
*** build2//target/product/sdk.mk 2010-03-20 07:11:58.440136745 +0300
--- build//target/product/sdk.mk 2010-03-20 06:17:06.032139645 +0300
***************
*** 76,84 ****
ko_KR

# include available languages for TTS in the system image
! include external/svox/pico/lang/PicoLangDeDeInSystem.mk
! include external/svox/pico/lang/PicoLangEnGBInSystem.mk
! include external/svox/pico/lang/PicoLangEnUsInSystem.mk
! include external/svox/pico/lang/PicoLangEsEsInSystem.mk
! include external/svox/pico/lang/PicoLangFrFrInSystem.mk
! include external/svox/pico/lang/PicoLangItItInSystem.mk
--- 76,85 ----
ko_KR

# include available languages for TTS in the system image
!
! # include external/svox/pico/lang/PicoLangDeDeInSystem.mk
! # include external/svox/pico/lang/PicoLangEnGBInSystem.mk
! # include external/svox/pico/lang/PicoLangEnUsInSystem.mk
! # include external/svox/pico/lang/PicoLangEsEsInSystem.mk
! # include external/svox/pico/lang/PicoLangFrFrInSystem.mk
! # include external/svox/pico/lang/PicoLangItItInSystem.mk
[close]


5. Собрать adb, bionic

Нижеследующие команды приведены только для использования в случае отдельной сборки bionic и adb
Код

git clone git://android.git.kernel.org/platform/system/core.git system/core
git clone git://android.git.kernel.org/platform/frameworks/base.git frameworks/base
git clone git://android.git.kernel.org/platform/build.git build
git clone git://android.git.kernel.org/platform/external/zlib.git external/zlib
git clone git://android.git.kernel.org/platform/external/elfutils.git external/elfutils
git clone git://android.git.kernel.org/platform/external/elfcopy.git external/elfcopy
git clone git://android.git.kernel.org/platform/bionic.git bionic
echo "include build/core/main.mk" >Makefile

Теперь применяем пачт следующей командой (все необходимые изменения в оптимизациях можно указать в патче)
Код

patch -p0 -i xbuild.patch

Cобираем:
Код

make adb
make libc
make libm


Сообщение отредактировал EXL - 16.9.2010, 16:35
Прикрепленный файл my.tar.gz   ( 2.12 мегабайт ) Кол-во скачиваний: 1
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить

Сообщений в этой теме
XVilka   Компиляция под Android - руководство   7.2.2010, 23:24
JunkiedOK   Никогда с Linux дела не имел. Поэтому прошу прощен...   8.2.2010, 12:32
XVilka   Никогда с Linux дела не имел. Поэтому прошу проще...   8.2.2010, 18:06
mr.Ozio   XVilka, a DIVX кодeки тaким обрaзом можно портиров...   9.2.2010, 10:27
XVilka   XVilka, a DIVX кодeки тaким обрaзом можно портиро...   10.2.2010, 19:42
OWNER   Xvid - получите, распишитесь А можно поподробней...   25.2.2010, 7:12
XVilka   Вообще да, я вот пробую собрать таким образом ffmp...   9.2.2010, 16:30
NPman   а mplayer слабо портировать? :laugh:   10.2.2010, 6:30
Abram   а mplayer слабо портировать? :laugh: А зачем? ...   10.2.2010, 9:15
XVilka   FLAC я видел только в кастомных прошивках. А здес...   10.2.2010, 9:23
XVilka   Если здесь есть заинтересованные разработчики - пр...   13.2.2010, 19:52
mr.Ozio   Xvid - получите, распишитесь[/quote] Спасибо. Жа...   14.2.2010, 10:51
XVilka   Почему-то пропала возможность редактировать шапку....   25.2.2010, 0:23
XVilka   Пока на данный момент ни одна программа не работае...   25.2.2010, 8:40
starky   XVilka, Один вопрос: root обязательное условие дл...   25.2.2010, 15:12
XVilka   Не обязателен, но желателен. Особенно для busybox ...   25.2.2010, 17:55
XVilka   Еще вот такую штуку сделал 1. Поставить git, repo...   20.3.2010, 4:37
XVilka   Под андроид портирована замечательная утилита, поз...   20.3.2010, 20:26
XVilka   Для создания маленьких утилит под андроид нам совс...   21.3.2010, 17:38
XVilka   Информации накопилось очень много - в ветке форума...   24.3.2010, 3:39
XVilka   Обновил конфигурационные файлы. Теперь компилятор ...   12.5.2010, 16:37
Vinil_37   "Люди добрые, просветите - не дайте помереть ...   10.9.2010, 8:27
XVilka   нужен реверс. Но в принципе не очень сложно.   14.9.2010, 4:13
Vinil_37   нужен реверс. Но в принципе не очень сложно. SDK...   16.9.2010, 16:12
Vinil_37   SDK GpsGate.   1.10.2010, 7:26
XVilka   Только сейчас заметил, что не ту кнопку нажал, ког...   1.10.2010, 23:38
Vinil_37   На всякий случай, описание протокола сервера GpsGa...   2.10.2010, 8:50

Компиляция под Android - руководство · Motorola на Android OS · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29.7.2025, 15:45

Форум живёт: