motofan logo
3 страниц V  1 2 3 >        
> 

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

XVilka
сообщение 7.2.2010, 23:24 Закрепленное сообщение!


Куратор темы

Мастер
****

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

Рейтинг: 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
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
JunkiedOK
сообщение 8.2.2010, 12:32


Интересующийся
**

Группа: Пользователи
Сообщений: 69
Регистрация: 15.1.2010
Пользователь №: 212 579
Модель телефона: Motorola Milestone

Рейтинг: 3



Никогда с Linux дела не имел. Поэтому прошу прощения, но задам чайниковский вопрос. Что это даёт? Для этого нужно сносить Android или просто он добавляет в него некоторые дополнительные возможности, какие?

Сообщение отредактировал JunkiedOK - 8.2.2010, 14:50
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 8.2.2010, 18:06


Куратор темы

Мастер
****

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

Рейтинг: 244



Цитата(JunkiedOK @ 8.2.2010, 15:32) *

Никогда с Linux дела не имел. Поэтому прошу прощения, но задам чайниковский вопрос. Что это даёт? Для этого нужно сносить Android или просто он добавляет в него некоторые дополнительные возможности, какие?

Сносить не надо - возможна параллельная установка программ из линукса.
Пока отрабатываю консольные. Но ничто не мешает как привыкну к платформе переносить и графические, без сноса системы.

Вот сегодня завершил и оттестировал перенос библиотеки libFLAC - а то гугл все никак не добавит, надоело ждать.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
mr.Ozio
сообщение 9.2.2010, 10:27


Гуру
******

Группа: Пользователи
Сообщений: 1 444
Регистрация: 23.9.2006
Из: Київ
Пользователь №: 100 323
Модель телефона: E2,Atrix
Прошивка: Android 2.3.7

Рейтинг: 652



XVilka, a DIVX кодeки тaким обрaзом можно портировaть?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 9.2.2010, 16:30


Куратор темы

Мастер
****

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

Рейтинг: 244



Вообще да, я вот пробую собрать таким образом ffmpeg, но уж больно он кривой и непредсказуемый.
Может, думаю есть полегче декодеры?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
NPman
сообщение 10.2.2010, 6:30


Мастер
****

Группа: Пользователи
Сообщений: 275
Регистрация: 12.7.2007
Из: Oren
Пользователь №: 141 260
Модель телефона: (M)otorola DEFY
Прошивка: 2.1

Рейтинг: 196



а mplayer слабо портировать? laugh.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Abram
сообщение 10.2.2010, 9:15


Прелесть какая гадость
*******

Группа: Разработчики
Сообщений: 1 963
Регистрация: 24.6.2005
Из: .ru - рідна Україна
Пользователь №: 44 825
Модель телефона: Moto G XT1033
Прошивка: CyanogenMod
Победитель конкурса 2008

Рейтинг: 744



Цитата(NPman @ 10.2.2010, 8:30) *

а mplayer слабо портировать? laugh.gif

А зачем?

к тому же , FLAC давно для ведроида есть.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 10.2.2010, 9:23


Куратор темы

Мастер
****

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

Рейтинг: 244



FLAC я видел только в кастомных прошивках. А здесь без изменения системы.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 10.2.2010, 19:42


Куратор темы

Мастер
****

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

Рейтинг: 244



Цитата(mr.Ozio @ 9.2.2010, 13:27) *

XVilka, a DIVX кодeки тaким обрaзом можно портировaть?

Xvid - получите, распишитесь

Работаю на улучшением работы busybox и портированием ffmpeg
---------------------------------------------------------------------------------------------------
По поводу FLAC - вот только работающее решение из коробки
http://alldroid.org/viewtopic.php?f=259&am...326&p=29927 но у него есть ограничение на 16-битность,
пропатчены исходники файлов FLAC.
Мое решение скорее дополняет его, поскольку используется оригинальная библиотека без изменений, но в любом случае
все это уже работает. Проверено электроникой (своей). Так что можно вооружаться.
----------------------------------------------------------------------------------------------------
По поводу mplayer вот - http://mplayer4iphone.blogspot.com/2009/01...d-emulator.html
Сейчас думаю стоит ли заморачиваться или нет - тем более помогаю некоторым авторам видеоплееров, в частности mVideoPlayer в использовании внешних кодеков (в частности того же xvid)

Сообщение отредактировал XVilka - 13.2.2010, 2:25
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
XVilka
сообщение 13.2.2010, 19:52


Куратор темы

Мастер
****

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

Рейтинг: 244



Если здесь есть заинтересованные разработчики - прошу принять участие в проекте:

http://github.com/freeasabeer/buildroot-android
http://wiki.github.com/freeasabeer/buildroot-android/

Здесь про то что к yacas приделали граф.морду на iPhone и исходники и про проект создания такой же на Android
http://tinyurl.com/yandroid
---------------------------------------------

А вот здесь еще портировали библиотеку Qt на андроид
http://code.google.com/p/android-lighthouse/

Сообщение отредактировал XVilka - 13.2.2010, 23:19
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Компиляция под Android - руководство · Motorola на Android OS · Forum
 

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

 



Текстовая версия Сейчас: 27.4.2024, 10:50

Форум живёт: