The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Сборка хелловорлда под 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
  •  
    20.10.2021 , Автор: Урри
    Ключи: build, compile, test, arm, mips, x86, powerp / Лицензия: CC-BY
    Раздел:    Корень / Программисту и web-разработчику / C/C++, сборка, отладка

    Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Аноним (1), 12:23, 21/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Вот, что нам надо:
    > Пше

    Польша стронг!

     
     
  • 2.2, Alexey (??), 13:00, 21/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Пше в git!
     

  • 1.3, Anon23456 (?), 14:26, 24/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Yocto
     
  • 1.5, Alex Mikhalev (?), 20:51, 28/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Классный совет, спасибо.
     
  • 1.6, Alex Mikhalev (?), 21:23, 28/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На Ubuntu 20.04 надо добавить 'sudo apt install libffi-dev libssl-dev' и свежий libarchive. https://github.com/libarchive/libarchive
     
  • 1.7, Mingw (?), 03:24, 13/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    i686/x86_64-w64?
     
  • 1.8, BratishkaErik (ok), 06:07, 16/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Zig можно ещё легче
     
     
  • 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 добиться подобного эффекта куда проще. Затраченные усилия впечатляют, результат -- ну такое себе.
     
     
  • 2.16, OpenEcho (?), 17:39, 20/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    +1, но ещё проще использовать https://github.com/jart/cosmopolitan
    где компилируешь раз и будет работать везде, на бсде, лине, винде, эпле и даже без ОСи, из под биоса
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру