Понадобилось настроить и запустить на сторонней машине автоматизированную сборку (и автотесты) своего кода сразу под ARM, MIPS, x86 и PowerPC - решил заодно поделиться с местным сообществом.Сейчас будет про автоматическую сборку. Про тестирование будет отдельно.
Хотите собрать свой хелловорлд сразу под 17 (29 вариантов сборки, так как почти каждая платформа идёт в двух вариантах: libc и musl)? Если да - внизу шаги.
Сборка осуществляется с помощью сборочного инструментарий void-linux, за что им огромное спасибо - работа проделана огромная.
Рецепт описывается простой и последовательный. Желающие сделать что-то нестандартное или разнообразить секс^Wпроцесс сборки идут читать инструкцию на гитхаб, она не слишком большая и вполне понятная.
Вот, что нам надо:
** Linux, любой (я использую Mint),
** Пше (им будем ставить тулчейны, им же и собирать исходные тексты),
** 20+ ГБ на диске (у меня выделенный SSD, хотя все равно долго получается).
Все остальное автоматически доставится в процессе.
++ Шаг 1: xbps
Собираем xbps:
$ git clone --depth 1 https://github.com/void-linux/xbps
$ cd xbps
$ ./configure --enable-rpath --prefix=/usr --sysconfdir=/etc
$ make
Ставим его в отдельный каталог, не замусоривая систему (пусть это будет каталог ~/xbps-git)
$ make DESTDIR=~/xbps-git install clean
Прекрасно, базовый инструментарий готов.
Добавляем путь к xbps в PATH (потом это же сделаем в скрипте)
$ export PATH=~/xbps-git/usr/bin:$PATH
++ Шаг 2: сборочный инструментарий void-linux.
Забираем инструментарий:
$ git clone --depth 1 https://github.com/void-linux/void-packages
$ cd void-packages
Не забываем про PATH к xbps, который прописали раньше (export PATH=~/xbps-git/usr/bin:$PATH)
Доставляем локально недостающие детали:
$ ./xbps-src binary-bootstrap
++ Шаг 3: готовим свой код к сборке
Ваш код, само собой, лежит где-то на гитхабе (гитлабе, дома) и у него проставлен тег "1.0".
В каталоге srcpkgs создаем свой подкаталог с любым именем (у нас будет helloworld)
В созданном каталоге размещаем вот такой текстовый файл "template":
# Template file for 'helloworld'
pkgname=helloworld
version=1.0
revision=1
build_style=gnu-makefile
hostmakedepends="xxd"
short_desc="Hello World"
maintainer="superpuperprogrammer <superpuperprogrammer@gmail.com>"
license="MIT"
homepage="https://superpuperprogrammer.github.io/"
distfiles="https://github.com/superpuperprogrammer/helloworld/archive/${version}.tar.gz"
checksum=b5...............f1
do_check() {
make check
}
post_install() {
vlicense LICENSE
}
"xxd" в зависимостях про так - впишите своё, если надо;
адрес архива с кодом вписываете свой, в примере гитхаб по тегу;
checksum получаете запустив "sha256sum 1.0.tar.gz";
"make check" можете исключить, но с ним интереснее.
++ Шаг 4, последний. Собираем.
На выбор есть много платформ/архитектур, вот их список: x86_64-musl aarch64-musl aarch64 armv5tel-musl armv5tel armv5te-musl armv5te armv6hf-musl armv6hf armv6l-musl armv6l armv7hf-musl armv7hf armv7l-musl armv7l i686-musl i686 mipselhf-musl mipsel-musl mipshf-musl mips-musl ppc64le-musl ppc64le ppc64-musl ppc64 ppcle-musl ppcle ppc-musl ppc. Впечатляет?
Собираем так:
$ ./xbps-src -a armv7hf-musl -C pkg helloworld
Вместо armv7hf-musl подставляете нужную платформу из списка. В процессе xbps-src сам доставит отсутствующий тулчейн и сам запустит сборку. Берите пиво, колу, чай (что вы пьете) и наблюдайте логи.
Лично я делаю скриптом:
for arch in x86_64-musl \\
aarch64-musl aarch64 \\
armv5tel-musl armv5tel armv5te-musl armv5te armv6hf-musl armv6hf armv6l-musl armv6l armv7hf-musl armv7hf armv7l-musl armv7l \\
i686-musl i686 \\
mipselhf-musl mipsel-musl mipshf-musl mips-musl \\
ppc64le-musl ppc64le ppc64-musl ppc64 \\
ppcle-musl ppcle \\
ppc-musl ppc
do
./xbps-src -a $arch clean helloworld
./xbps-src -a $arch -C pkg helloworld || exit $?
done
Пока все. Автоматическое тестирование всех этих платформ/архитектур не вставая с кресла и не создавая сорок виртуалок будет в следующем совете.
URL:
Обсуждается: http://www.opennet.me/tips/info/3193.shtml