Как собирать из исходников программы

В ОС Linux авторы программ традиционно наплевательски относятся к пользователям. Зачастую файлы README и INSTALL содержат недостоверную информацию о том, как собирать загадочные проекты этих сумрачных гениев. Поэтому, опытный Linux-пользователь должен уметь «на глаз» определять, какая система сборки используется в том или ином программном пакете. Определяется это, обычно, по составу файлов, которые находятся в корне проекта.

Д ля сборки программ в GNU/Linux используется (в основном) программа make , которая запускает инструкции из файла Makefile . Но поскольку дистрибутивов GNU/Linux много, и они все разные, то для того чтобы собрать программу, пришлось бы для каждого дистрибутива отдельно прописывать пути, где какие лежат библиотеки и заголовочные файлы. Программисты не могут изучать каждый дистрибутив и для каждого отдельно создавать Makefile . Поэтому придумали конфигураторы, которые «изучают» систему, и в соответствии с полученными знаниями создают Makefile . Но на конфигураторе они не остановились и придумали конфигураторы конфигураторов… Хорошая новость в том, что на этом они остановились.

Установка программ в Linux из исходников tar.gz/ Процесс полностью с ошибками и траблшутингом

Для сборки нам нужны компиляторы: они прописаны в зависимостях пакета build-essential , так что достаточно установить его со всеми зависимостями. Ещё нужны autoconf и automake .

Итак, чтобы собрать что-то из исходников, нужно сначала собрать конфигуратор configure . Если файл с таким именем уже есть в исходниках, то можно сразу запускать его. Но бывает так, что этого файла нет. Тогда, если это проект на c/c++, а не какой-нибудь Ruby или Go, то правила сборки конфигуратора описаны в файле configure.in . Для сборки конфигуратора необходимо выполнить

Если таких скриптов в архиве не оказалось, то можно выполнить последовательно следующие команды:

automake —gnu —add-missing —copy —foreign

autoconf -f -Wall

Все эти команды используют файл configure.in . После выполнения этих команд создастся файл configure . После этого необходимо запустить конфигуратор для проверки наличия всех зависимостей, а также установки дополнительных опций сборки (если возможно) и просмотра результата установки (опционально — может не быть):

Иногда разработчики поставляют исходники, в которых одновременно присутствуют и файл autogen.sh и файл configure . Чаще всего это означает, что разработчики забыли исключить файл configure из комплекта поставки. По-хорошему, они должны были поставить только autogen.sh , чтобы он сгенерировал configure с учетом системы пользователя. Поэтому не стоит торопиться и сразу запускать configure . Возможно, стоит переименовать этот файл, запустить autogen.sh , и запустить новый configure . Если он не стработает, попробовать запустить старый.

Попадаются и такие проекты, в которых переход на autogen.sh либо заброшен, либо находится в начальной стадии. И центральным, генерирующим Makefile скриптом, является configure . Конечно, разработчики нигде об этом писать не будут, исходя из принципа что кому нужно — тот сам разберется. В этом случае нет смысла запускать autogen.sh , нужно расчитывать именно на configure .

Научись Linux: сборка программ из исходников (эпизод 13)

Как было сказано выше, сборка программ под Linux — это особая магия, иногда требующая умения читать мысли незнакомых людей.

Конфигуратор configure построит Makefile основываясь на полученных знаниях и файле makefile.am . Можно передать конфигуратору опции, предусмотренные в исходниках программы, которые позволяют включать/отключать те или иные возможности программы, обычно узнать о них можно командой

Также есть набор стандартных опций, вроде

которая указывает, какой каталог использовать для установки. Для Ubuntu обычно

БЕЗ слеша в конце! Теперь можно запустить процесс сборки самой программы командой

Для сборки достаточно привелегий обычного пользователя. Окончанием сборки можно считать момент, когда команды в консоли перестанут «беспорядочно» выполняться и не будет слова error . Теперь всё скомпилировано и готово для установки.

Сама установка происходит под пользователем root с помощью команды:

Либо, если необходимо установить программу через пакетный менеджер, создается пакет через программу checkinstall с соответсвующими для текущего дистрибутива опциями.

  • Как устанавливать программы с использованием checkinstall
  • Заставляем checkinstall собирать пакеты без ошибок
  • Ручной аналог checkinstall
  • Сборка deb-пакетов в домашних условиях
  • Как сделать DEB-пакет вручную (краткая инструкция)
  • Как сделать пакет-пустышку с нужным именем
  • Менеджер пакетов xstow
  • Как установить Code::Blocks из исходников
  • Как принудительно установить deb-пакет
  • Как скачивать Linux-пакеты через windows (wapt-get)
  • Как устанавливать свежий FireFox в Ubuntu
  • Пакетная система Debian: низкоуровневая работа с deb-пакетами
  • Как получить исходники программы для KDE4
  • Пакеты deb-src. Как в Debian подправить исходники программы и перекомпилировать её.
  • Основные команды работы с RPM
  • Как распаковать deb-пакет в Linux (как извлечь файлы из deb-пакета)
  • Онлайн-помошник для выбора настроек APT для инсталляции Firefox в Debian Linux
  • Типовая сборка программ под Linux. Что делать, если нет файла configure, какие системы сборки бывают
  • Где брать пакеты от устаревших дистрибутивов Debian. Как их находить и как устанавливать?
  • Как пользоваться пакетным менеджером aptitude

Источник: webhamster.ru

Компиляция (сборка) исходников в windows

Сообщество разработчиков mozilla уже подготовило для нас с вами готовую сборку приложений,
которые могут понадобится для компиляции нативных приложений windows.

Читайте также:
В каком режиме программы можно создать новый справочник

Для приготовления исходников нам понадобятся:

1) Visual C++ 2008 Express Edition (http://www.microsoft.com/express/download/)
Бесплатная обрезанная версия вижуал студии. Содержит в себе утилиты для компиляции, линковки и другие полезные утилиты разработчика,
которые под виндой ручками трогать не принято.

2) Windows SDK (https://developer.mozilla.org/En/Windows_SDK_versions)
Куча хедеров, описывающих внутренности windows.

3) Собственно MozillaBuild (http://ftp.mozilla.org/pub/mozilla.org/mozilla/libraries/win32/MozillaBuildSetup-1.3.exe)
Включает:
— autoconf/automake, что в связке с msvs позволяет выполнять стандартные для никс-мира последовательности
для сборки: ./configure make
— msys (unix-wrapper для windows)
— bash
— perl
— пакет для компиляции/сборки mingw32
— клиент hg (mercurial)
— клиент cvs
— python
— NSIS
— упаковщик UPX
— качалка wget

По завершении установки этого софта, переходим в папку с mozillabuild и запускаем файл start-msvc9.bat.
Запускается nix-шелл с правильно прописанными путями софта, нужного для сборки пакетов.

cd / c / src / blabla
. / configure —with_blabla —disable_blablabla
make

updating: xulrunner / xpidl.exe ( 160 bytes security ) ( deflated 49 % )
updating: xulrunner / xpt_dump.exe ( 160 bytes security ) ( deflated 48 % )
updating: xulrunner / xpt_link.exe ( 160 bytes security ) ( deflated 44 % )
updating: xulrunner / xul.dll ( 160 bytes security ) ( deflated 48 % )
updating: xulrunner / xulrunner-stub.exe ( 160 bytes security ) ( deflated 46 % )
updating: xulrunner / xulrunner.exe ( 160 bytes security ) ( deflated 44 % )
make [ 2 ] : Leaving directory `/ c / tmp / src / mozilla / xulrunner / installer ‘
/local/bin/make tools
make[2]: Entering directory `/c/tmp/src/mozilla/xulrunner/installer’
Makefile: 107 : FULL_NSPR_CFLAGS =-I $ / stable
make [ 2 ] : Leaving directory `/ c / tmp / src / mozilla / xulrunner / installer ‘
make[1]: Leaving directory `/c/tmp/src/mozilla/xulrunner/installer’

Источник: www.skillz.ru

Общие принципы сборки Android из исходных кодов

Пересборка Android из исходных кодов требуется для многих задач. Это может быть потребность в недостающих модулях ядра Linux, компиляция с более агрессивными опциями оптимизации, создание и отладка собственных модулей, а также различные кастомизации под себя. В этой статье я попытаюсь рассказать об общих принципах сборки Android на примере чистого AOSP (Android Open Source Project), а также его модификации CyanogenMod.

Введение

Итак, мы будем собирать Android из исходных кодов. Условно разделим этот занимательный процесс на три шага:

  1. Подготовка системы.
  2. Скачивание исходников.
  3. Собственно сама сборка.

В процессе мы скомпилируем Android для четырех разных устройств, включая официальный Galaxy Nexus, поддерживаемый командой CyanogenMod LG Optimus Black, а также Samsung Galaxy Y и Motorola DEFY, для которых существуют только неофициальные порты CyanogenMod, развиваемые независимыми разработчиками.

Предварительные ласки, или настройка системы

Для начала определимся с тем, что нам потребуется для сборки AOSP из исходников. Во-первых, Linux, желательно Ubuntu, и, если хочешь собрать Android версии 2.3.x (Gingerbread) и выше, ОС должна быть 64-разрядной. Замечу также, что по заявлению команды разработчиков, «беспроблемная» сборка сейчас возможна только под Ubuntu версий 10.04–11.10, тогда как на 12.04 соберется только последняя версия Android. Тем не менее я проводил все эксперименты на 12.04 и не встретил каких-либо ошибок или некорректной работы прошивки.

Кроме того, нужно позаботиться о достаточном количестве дискового пространства и оперативной памяти. Исходники Android весят около 14 Гб, плюс в процессе сборки испарится еще где-то 15 Гб. Оперативной памяти потребуется не меньше 2 Гб, да и то вкупе с областью подкачки, размером 3–4 Гб. Если все эти требования удовлетворены, можно приступить к подготовке системы. Для начала установим необходимые пакеты:

$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

Немного слов о JDK: рекомендуется использовать Oracle Java JDK, но, так как он больше не поставляется в репозиториях Ubuntu, его нужно скачать с сайта Oracle и установить самостоятельно (goo.gl/N4IB2). Кроме того, нам понадобится гугловский инструмент для работы с репозиториями repo, представляющий собой Python-обертку вокруг системы контроля версий git:

$ mkdir ~/bin $ curl http://dl.googlecode.com/instruments/git/repo $ chmod x+r repo $ export PATH=$PATH:~/bin

Теперь система готова, и нам нужны исходники Android.

Загрузка исходников

Перечисленные манипуляции по настройке системы справедливы для сборки любой версии и любой модификации Android. Дальнейшие наши действия уже зависят от наших желаний. Для примера давай начнем со сборки AOSP для Galaxy Nexus. Это типичнейший вариант. Для этого создадим каталог (можешь назвать его как угодно, это непринципиально), в котором собственно и будут лежать исходники:

$ mkdir -p android/system $ cd android/system

Далее необходимо инициализировать репозиторий с помощью repo:

$ repo init -u https://android.googlesource.com/platform/manifest

На этом этапе repo попросит ввести имя и e-mail, что делать совсем не обязательно. По умолчанию repo будет настроен на ветку master указанного репозитория (это последняя версия системы). Если тебе нужны исходники другой версии, укажи ее с помощью ключа ‘-b’. Например:

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

Далее можно приступить к загрузке файлов:

$ repo sync

Чтобы загрузка происходила в несколько потоков, можно указать опцию -j#, где # — число потоков. Сам процесс загрузки довольно длительный (на канале 1 Мб/с загрузка заняла больше трех часов), поэтому можешь спокойно идти заниматься своими делами. В случае если загрузка оборвется, достаточно будет вновь выполнить «repo sync» для ее восстановления с прерванного места.

После окончания загрузки на экран будет выведена надпись вида «Syncing work tree: 100% (305/305) done» (см. скриншот 1). Это значит, что уже можно приступать к сборке.

Читайте также:
Как поменять программы при запуске

Скриншот 1. Успешная загрузка исходников

Другие статьи в выпуске:

Хакер #168. Спуфинг в воздухе

  • Содержание выпуска
  • Подписка на «Хакер» -60%

Сборка

Перед тем как начать процесс компиляции, мы должны выполнить команды скрипта envsetup.sh для установки всех необходимых переменных окружения и функций. Для этого переходим в каталог с исходниками (у меня ~/android/system) и выполняем:

$ . build/envsetup.sh

Только в случае успешного выполнения этого скрипта можно вызывать команду:

$ lunch имя_устройства

Она предназначена для выбора цели сборки или, говоря другими словами, конкретного устройства. Вызвав ее без параметра, устройство можно будет выбрать из списка. В нашем случае нужно указать full_maguro-userdebug, где maguro — кодовое имя Galaxy Nexus GSM/HSPA+. После этого можно запустить процесс компиляции:

$ make -j4

Здесь 4 — число потоков компиляции. Это значение рекомендуется выбирать между максимальным и удвоенным максимальным числом аппаратно поддерживаемых потоков (для процессоров AMD это число равно количеству ядер процессора, для Intel это число нужно умножить на два), с учетом того что на каждый поток уйдет как минимум 2 Гб оперативки, которая, кстати говоря, может закончиться в самый неподходящий момент.

Лично у меня процесс рухнул на сборке библиотеки libwebcore.so из-за нехватки памяти. После увеличения свопа с 2 до 3 Гб результат был тем же. Пришлось собирать этот модуль отдельно и в один поток: make libwebcore -j1, после чего вновь начинать общую сборку. Возможны и другие ошибки, но, как правило, они уже изучены, и решение можно найти в Гугле. При успешной компиляции последняя строка вывода будет содержать путь и размер образа (скриншот 2).

Скриншот 2. Сборка AOSP завершена

На этом сборка AOSP закончена. Но что, если нам нужна прошивка для другого аппарата? Так вот, чистый AOSP ты сможешь собрать только под «гугловские» аппараты плюс Sony Xperia S. Конечно, есть решения и для других девайсов, но для таких устройств лучше и легче всего собрать модификацию AOSP — CyanogenMod.

Установка CyanogenMod через CWM

Установку кастомных прошивок следует выполнять из ClockworkMod Recovery (CWM). Это кастомная консоль восстановления, позволяющая устанавливать прошивки с любыми цифровыми подписями. Мануал о том, как установить CWM на твой конкретный девайс, ищи на xda-dev или просто погугли. Я опишу лишь установку CyanogenMod с его помощью.

Скриншот 5. Главное меню CWM

Для начала выключи телефон и включи его с зажатыми кнопками + + (комбинация может отличаться для разных устройств). После этого ты увидишь меню, показанное на скриншоте 5. Для навигации используй клавиши громкости, для выбора выделенного пункта — клавишу(или ). Для начала выполни сброс до заводских настроек с помощью пункта wipe data / factory reset, а затем смонтируй карту памяти с помощью меню mounts and storage -> mount USB storage и скопируй на нее файл прошивки. Далее выбери пункт «install zip from sdcard» и выбери файл с прошивкой (скриншот 6). Готово! CyanogenMod установлен.

Скриншот 6. Выбор архива для прошивки

CyanogenMod

CyanogenMod (далее CM) — это форк AOSP со множеством модификаций, направленных на улучшение производительности и стабильности, массой дополнительных функций и полезных плюшек, которых нет в стандартной прошивке. Разработка CyanogenMod ведется почти под все самые популярные аппараты (список здесь: www.cyanogenmod.com/devices), а это значит, что каждый может собрать CyanogenMod под конкретное устройство из исходных кодов, которые всегда доступны для скачивания. CyanogenMod пользуется огромной популярностью, поэтому неофициальные порты прошивки можно найти и для множества других аппаратов, помимо официально поддерживаемых.

Существует несколько поддерживаемых версий CM, включая CyanogenMod 7 (на базе Gingerbread, для маломощных бюджетных устройств), CM9 (на базе ICS) и до сих пор разрабатываемая CM10 (на базе JB). Сборка каждой из версий CM происходит одинаково. Для примера мы скомпилируем CM10 для LG Optimus Black, но я постараюсь упомянуть обо всех отличиях и для других версий CM. Стоит заметить, что компиляция CM ничем не отличается от AOSP, поэтому действия по подготовке системы будут теми же, плюс потребуется ADB, который можно скачать отдельно или в комплекте Android SDK. Процесс получения исходников аналогичен, за исключением адреса:

$ mkdir android/cm $ cd android/cm $ repo init -u git://github.com/CyanogenMod/android -b jellybean $ repo sync -j8

Если тебе нужны исходники другой версии, то просто укажи ее имя после ключа ‘-b’: «-b gingerbread» для CM7, «-b ics» для CM9. Ждать придется не меньше, чем при скачивании AOSP, так что можешь спокойно заниматься своими делами. По умолчанию загрузятся только сорцы самого CM без специфических для конкретных устройств файлов, которые можно получить с помощью другой команды:

$ . build/envsetup.sh breakfast p970

Здесь p970 — кодовое имя LG Optimus Black (как его узнать? Как вариант, можно посмотреть на download.cyanogenmod.com слева в колонке Devices). Кроме исходников устройства, также в большинстве случаев понадобятся проприетарные библиотеки, исходников которых нет (поставщик железа их не предоставил). Поэтому их придется извлечь с устройства. Для этого подключаем к компьютеру наш девайс с помощью USB-кабеля (тут-то нам и нужен ADB), на котором уже должна быть установлена последняя официальная версия CM, и запускаем скрипт extract-files.sh:

$ cd ~/android/cm/device/lge/p970/ $ ./extract-files.sh

Также нам потребуются закрытые приложения RomManager и Terminal Emulator, которые можно получить так:

Читайте также:
Инновационная программа кем и когда утверждена

$ ~/android/cm/vendor/cm/get-prebuilts

А вот теперь все! Можно собирать:

$ . build/envsetup.sh brunch p970

Здесь brunch — один из хуков, создаваемых envsetup.sh. Пока идет процесс сборки, мы попробуем разобраться, что же такое brunch, а также в других хитрых функциях, используемых в CM.

Агрессивные оптимизации

Чтобы повысить производительность прошивки, ты можешь попробовать применить более агрессивные опции оптимизации компилятора. Для этого вместо «mka bacon» запусти такую команду:

$ CFLAGS=’-O3 -fomit-frame-pointer’ mka bacon

Но это на твой страх и риск, так как можешь нарушить совместимость сборки с софтом и железом.

Ускорение сборки

Если ты соберешь и AOSP, и CM, то обязательно заметишь, что CM компилируется значительно быстрее. И ты наверняка заметил, что при сборке AOSP использовалась команда make, а тут — brunch. Если разобраться, команда brunch имя_устройства является эквивалентом такой команды:

$ breakfast имя_устройства mka bacon

Что же тогда такое «mka bacon»? А в этой команде и спрятана вся соль. Это функция, содержащая следующую команду:

Она переключает планировщик процессора в режим SCHED_BATCH и повышает приоритет текущей задачи, так что ей отдается больше времени на исполнение, а также устанавливает максимальный приоритет на ввод-вывод для текущей задачи и запускает make, распараллеливая его на все процессоры. За счет этого сборка CM проходит быстрее, но при этом пользоваться компом во время сборки становится нереально.

Если ты планируешь часто пересобирать прошивку, то есть смысл настроить ccache, чтобы ускорить процедуры пересборки. Для этого установи одноименный пакет и добавь в ~/.bashrc такие строки:

export USE_CCACHE=1 export CCACHE_DIR=каталог_для_кэша

И сразу же после загрузки исходного кода выполни:

$ prebuilts/misc/linux-x86/ccache/ccache -M 50G или для ICS и версий постарше: $ prebuilt/linux-x86/ccache/ccache -M 50G

Значение 50G здесь для примера. Ты можешь указать произвольный размер кеша. Теперь вернемся к нашей сборке. В случае ее удачного завершения (скриншот 3) в каталоге ~/android/cm/out/target/product/p960/ будет лежать файл с названием вроде cm-10-XXXXXXXXX-UNOFFICIAL-p970.zip.

Это и есть наша прошивка, которую можно установить с помощью консоли восстановления (recovery).

Скриншот 3. Сборка CM завершена

INFO

  • Существуют автоматизированные системы сборки Android с исходных кодов:goo.gl/i0pvm и goo.gl/yyaLN.
  • Проприетарные файлы можно также извлечь из архива прошивки, а не с рабочего девайса. Это можно сделать с помощью скрипта unzip-files.sh, если таковой имеется в дереве устройства.
  • В сборку CM не включены стандартные приложения от Google (gapps). Для их установки скачай отсюда архив и установи через CWM.

Сборка CyanogenMod для кастомного устройства

Не беда, если твоего девайса нет среди официально поддерживаемых. Как я уже говорил, ребята с XDA или 4PDA часто портируют CyanogenMod под свои устройства, поэтому неофициальный порт CM можно найти практически для любого устройства. Все исходные тексты и конфигурационные файлы для девайса носят имя «дерево устройства» (device tree) и должны лежать в каталоге «device/производитель/имя_устройства» исходников CM. Для того чтобы собрать CyanogenMod под свое устройство, ты должен найти в Сети (в большинстве случаев находится на GitHub) дерево устройства и поместить его в соответствующий каталог.

Для примера возьмем Samsung Galaxy Y, для которого нет официального CM. На GitHub пользователя vivekkalady (goo.gl/soi4I) я нашел дерево устройства этого аппарата для CM7. Каковы мои действия? Я должен скачать содержимое репозитория в каталог «device/samsung/totoro» (totoro — кодовое имя Galaxy Y), а затем запустить процесс компиляции. Но где брать проприетарные файлы?

Их можно извлекать только с девайса с рабочим официальным CM, что невозможно в нашем случае. Часто эти файлы уже есть в дереве устройства, но я их там не нашел, зато нашел в другом репозитории на GitHub того же vivekkalady (goo.gl/5JvIg). Далее остается скопировать их в каталог «vendor/samsung/totoro», получить RomManager и Terminal Emulator, как показано выше, и начать сборку:

$ . build/envsetup.sh brunch totoro

Другие авторы портов могут выложить в Сеть все исходники CM вместо отдельного дерева устройства. Например, порт CM10 для Motorola Defy (официально для нее поддерживается только CM9) лежит вместе с исходниками CM10 в GitHub пользователя с ником Quarx с 4pda.ru. Для сборки этого порта делаем следующее:

$ repo init -u git://github.com/Quarx2k/android.git -b jellybean $ repo sync

Проприетарные файлы уже находятся в исходниках, так что искать или извлекать их не требуется. Остается только скачать «несобираемое» ПО и запустить процесс сборки:

$ ~/android/system/vendor/cm/get-prebuilts $ . build/envsetup.sh brunch mb525

Кстати, по причине залоченного загрузчика кастомные прошивки для DEFY работают на ядре, загружаемом на лету с помощью модуля kexec. Это ядро носит экспериментальный статус, и его придется прошивать отдельно уже после установки самой прошивки (файл 2ndboot_06.10.zip на нашем диске).

Скриншот 4. CM10 на Defy

WWW

  • Официальная страница проекта AOSP;
  • wiki-статья о сборке CyanogenMod;
  • сборка Android под x86;
  • здесь можно почитать подробнее о дереве устройства:;
  • подробнее о breakfast, lunch и brunch.

Вместо итогов

Если тебе не удалось собрать Android с первого раза — не нужно расстраиваться. Наберись терпения и продолжай. Свою первую прошивку я собрал через неделю после первой попытки. Я постарался описать основные принципы сборки Android из исходных кодов, но большое количество важной информации все же осталось за кадром.

В сносках я оставил несколько ссылок, по которым есть дополнительная информация. На этом у меня все. Удачной сборки!

Источник: xakep.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru