Наиболее последняя версия - WIKI
Постепенно все изменения будут переноситься оттуда.
----------------------------------------------------------------
Компиляция linux-утилит под Android
Пусть все мы делаем в домашней директории (/home/xvilka), создадим там каталог build
Подготовка
Скачиваем ядро, которое установлено в вашем устройстве, распаковываем, собираем заголовки
Узнаем какой у нас процессор в устройстве и используем конфиги в соотвествии с этим. Также определим переменную оптимизации для вашего оборудования (указываем в опциях .configure и make для всех программ кроме crosstool и toolchain)
При составлении таблицы использовались данные:
gcc.gnu.org
en.wikipedia.org (ARM)
К примеру у меня выполняется следующая команда:
Скачиваем 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)
Сборка тулчейна
Скачиваем необходимые нам конфигурационные файлы. Создаем каталог toolchain-android, переходим в него и копируем файл
потом запускаем
изменяем, если необходимо - помним что это зависит лишь от того оборудования, под которое собираете! сохраняем в .config запускаем
Итак все собралось. Теперь имеем каталог в своей директории build/x-tools. В нем появились компиляторы для сборки вида
для того чтобы было проще запускать их добавим этот каталог в переменную окружения PATH
теперь мы имеем возможность запускать компилятор командой
Корневая директория целевой системы находится по адресу
Туда мы не будем все устанавливать. Скопируем его в папку $HOME/build/cross/sys-root
Скопируем файлы для успешной компиляции некоторых программ - libgcc и libstdc++:
Сборка основного дерева Android
Сначала скачаем все дерево Android. Здесь пример как это сделать для mainstream ветки:
Все! Теперь у нас в каталоге mydroid лежит все что нужно для сборки Android.
Сборка пакетного менеджера
В качестве пакетного менеджера мы будем использовать opkg:
Применяем патчи, прилагающиеся к конфигурационным файлам, копируем их в каталог с исходниками opkg
На устройстве копируем opkg-cl в /system/xbin/opkg Все теперь мы можем пользоваться пакетным менеджером opkg. Подробнее...
Сборка библиотек
Здесь описан метод сборки разделяемых библиотек, при котором не создается зависимости их от других билиотек, например от libc, для упрощения портирования приложений. То есть все что необходимо для работы такой библиотеки вкомпилено в нее статически, хотя она сама является разделяемой. Приведу примеры:
libFLAC
Скачиваем последнюю версию libFLAC с их официального сайта, распаковываем и заходим в каталог
На выходе получаем динамическую разделяемую библиотеку libFLAC.so, которую можно смело устанавливать в систему, и при этом она не зависит ни от одной (!) другой библиотеки. Каталогом выше - заголовочные файлы для включения в свои программы при использовании libFLAC.so Но больше она рассчитана на dlopen()
libxvidcore
на выходе получаем динамическую разделяемую библиотеку libxvidcore.so, которую можно смело устанавливать в систему, и при этом она не зависит ни одной другой библиотеки.
libncurses
Скачиваем последнюю версию, распаковываем, заходим в каталог:
также libcurses.so мы можем смело копировать на устройство в системный каталог для библиотек.
Все! Теперь мы можем компилировать программы на основе ncurses как статически, так и динамически. Зависимости от других библиотек также отстутсвуют.
Сборка различных утилит
busybox
Пока только статика, но вообще именно busybox советую собирать статически всегда, чтобы в независимости от наших манипуляций с библиотеками он всегда мог запуститься и выручить вас Применяем патчи, прилагающиеся к конфигурационным файлам, копируем их в каталог с исходниками busybox командой
копируем файл XVilka-busybox-<суффикс>.config в .config
Копируем файл ~/build/cross/sys-root/bin/busybox в /system/bin на устройстве
Текстовый редактор jupp
Можно скачать здесь
Уже на устройстве:
перед запуском joe надо указать переменную TERM
Система компьютерной алгебры yacas
Скачиваем последний релиз yacas, распаковываем и переходим в каталог yacas/src Заменяем Makefile моим XVilka-yacas.Makefile и выполняем:
Все - в этой папке лежит самодостаточный исполняемый файл yacas. Копируем его на устройство, а также скрипты к нему из папки scripts (например в /system/usr/local/etc/yacas)
и на устройстве можно запускать командой
Файловый менеджер vifm
(нужна поддержка wide char в uclibc и ncurses, в текущей конфигурации отключена)
Сетевой сканер nmap
К сожалению пока приведен рецепт сборки nmap без замечательной утилиты ncat. Затем скачиваем и собираем nmap В переменной ac_cv_linux_vers указываем версию ядра для вашего android устройства.
SSH сервер dropbear
копируем файлы dbclient, dropbearconvert и dropbearkey в /system/bin файл dropbear в /system/sbin
Компилятор tinycc
Создание 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:
-------------------------------------------------------------------------------------
Сборка утилит для разработчика:
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"
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
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
Постепенно все изменения будут переноситься оттуда.
----------------------------------------------------------------
Компиляция 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
make
make install
Сборка тулчейна
Скачиваем необходимые нам конфигурационные файлы. Создаем каталог toolchain-android, переходим в него и копируем файл
Код
XVilka-crosstool-<суффикс>.config в .config
XVilka-uClibc-<суффикс>.config в uClibc.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
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
~/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
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
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
./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
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
./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
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
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
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
./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
копируем 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++"
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
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
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
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
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 на все
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"
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}
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