Сборка хелловорлда под 17 платформ одним скриптом |
[исправить] |
Понадобилось настроить и запустить на сторонней машине автоматизированную
сборку (и автотесты) своего кода сразу под ARM, MIPS, x86 и PowerPC - решил
заодно поделиться с местным сообществом.
Сейчас будет про автоматическую сборку. Про тестирование будет отдельно.
Хотите собрать свой хелловорлд сразу под 17 (29 вариантов сборки, так как почти
каждая платформа идёт в двух вариантах: libc и musl)? Если да - внизу шаги.
Сборка осуществляется с помощью сборочного инструментарий void-linux, за что им
огромное спасибо - работа проделана огромная.
Рецепт описывается простой и последовательный. Желающие сделать что-то
нестандартное или разнообразить секс^Wпроцесс сборки идут читать инструкцию на
гитхаб, она не слишком большая и вполне понятная.
Вот, что нам надо:
Linux, любой (я использую Mint),
Git (им будем ставить тулчейны для сборки исходных текстов),
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 <[email protected]>"
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
Пока все. Автоматическое тестирование всех этих платформ/архитектур не вставая
с кресла и не создавая сорок виртуалок будет в следующем совете - https://www.opennet.me/tips/3201_helloworld_build_compile_libc_musl.shtml
|
|
|
|
Раздел: Корень / Программисту и web-разработчику / C/C++, сборка, отладка |
|
2.11, Аноним (11), 12:29, 15/12/2021 [^] [^^] [^^^] [ответить]
| +/– |
> Zig можно ещё легче
Тот же вопрос как у него с поддержкой ppcle что-то она далек от Tier 1. Если она вообще есть.
| |
|
1.9, helloworld11 (?), 09:13, 12/12/2021 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А кроме helloworld это соберёт Фотошоп Офис ворд под 17 платформ одним скриптом?
Не прощё электрон использовать?
| |
|
2.10, Аноним (11), 12:22, 15/12/2021 [^] [^^] [^^^] [ответить]
| +/– |
Как том поживает электрон под ppcle или ты и электрон предлагаешь перед этим собрать?
| |
2.12, And (??), 10:27, 23/12/2021 [^] [^^] [^^^] [ответить]
| +1 +/– |
Ты Электрон не собираешь сам под 17-ть платформ. А эта статья про случай когда собираешь своё сам.
Поэтому - с Э. сложнее, ломучее, менее переносимо.
| |
|
1.13, ы (?), 23:10, 04/01/2022 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Жду очень статью про автоматическое тестирование. Был бы весьма признателен.
С наступившим!
| |
|
2.14, pavlinux (ok), 05:35, 05/01/2022 [^] [^^] [^^^] [ответить]
| +/– |
> про автоматическое тестирование.
#!/bin/bash
ARCHS="aarch64 aarch64_be alpha arm armeb cris hppa i386 m68k
microblaze microblazeel mips mips64 mips64el mipsel
mipsn32 mipsn32el nios2 or1k ppc ppc64 ppc64abi32
ppc64le riscv32 riscv64 s390x sh4 sh4eb sparc sparc32plus
sparc64 tilegx x86_64 xtensa xtensaeb"
for i in $ARCHS
do
qemu-$i hello_world_$i;
done
| |
|
1.15, Брат Анон (ok), 16:42, 10/02/2022 [ответить] [﹢﹢﹢] [ · · · ]
| –1 +/– |
Хм. На golang добиться подобного эффекта куда проще. Затраченные усилия впечатляют, результат -- ну такое себе.
| |
|