Bug 44453 - FR: Возможность запуска rpmbuild c несовместимым с текущей архитектурой target
Summary: FR: Возможность запуска rpmbuild c несовместимым с текущей архитектурой target
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build (show other bugs)
Version: unstable
Hardware: all Linux
: P5 enhancement
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-11-25 19:17 MSK by Ivan A. Melnikov
Modified: 2023-07-25 16:28 MSK (History)
9 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ivan A. Melnikov 2022-11-25 19:17:31 MSK
Хочется запускать rpmbuild указав ему любой --target из теоретически
поддерживаемых, например --target aarch64 или --target riscv64
на обычной x86_64 машине.

Это в первую очередь полезно при тестировании:
* кросс-компиляция ядер, загрузчиков, firmware прямо в пакеты для
  удобства тестирования спека (особенно секций %files) и самих
  ядер (пакеты удобнее раскидать по нескольким тестовым системам,
  кучи бинарников)
* gear-rpm --commit -bp --target [...]
  позволяет гораздо быстрее проверить архитектурно-специфичные
  костыли из секции %prep.

Речи о сборке какого-то софта и публикации
собранных так пакетов в каких-то репозиторях не идёт.


В апстриме RPM так уже давно можно, а вот у нас попытка
собрать пакет под "неподходящуюю" архитектуру заканчивается
ошибкой, например:

$ rpmbuild --target riscv64 -bp ~/RPM/SPECS/banner.spec
Building target platforms: riscv64
Building for target riscv64
warning: Macro %configure not found
warning: Macro %make_build not found
warning: Macro %make_install not found
error: Macro %_man1dir not found
error: line 33: %_man1dir/*

Дело в том, что rpmbuild содержит базовые макросы только
для текущей платфромы, а для остальных платформ их нет.

В апстриме генерируют конфигурации для всех известных
платформ начиная с коммита

https://git.altlinux.org/gears/r/rpm.git?a=commitdiff;h=07ec480c180e4005a629242b8f9f8ab640e3e950

Однако на наш rpmbuild это изменение тривиальным образом
не бекпортируется. jqt4@ реализовал в rpmbuild
аналогичное изменение, а я его дополнил до следующей
серии патчей:

https://git.altlinux.org/people/iv/packages/?p=rpm.git;a=commitdiff;h=71a398845fe3b98be77c1582d624dd97fdcc3892
https://git.altlinux.org/people/iv/packages/?p=rpm.git;a=commitdiff;h=292ca9e8d83bb10c4723100810073b1b84ef11fe
https://git.altlinux.org/people/iv/packages/?p=rpm.git;a=commitdiff;h=dd927d983441e10af871d173fbecd1f47a733bb6
https://git.altlinux.org/people/iv/packages/?p=rpm.git;a=commitdiff;h=b3a86d4d77b955f6613f68864e7bc67974ef8688

Я проверил, что после применения этих патчей файлы macros,
сгенерированные на x86_64 для aarch64, armh (а также armv7l
и armv8l), ppc64le и x86_64 ничем не отличаются от
таких же файлов, имеющихся сейчас в Сизифе на соответствующих
платформах.

rpmbuild c этими патчами уже довольно давно используется
нами (iv@, jqt4@, nir@, voropaevdmtr@) при подготовке
обновлений ядер для mipsel, riscv64 а также для
Raspberry Pi. Патчи доказали свою работоспособность
и полезность.

Прошу рассмотреть и принять.
Comment 1 Ivan A. Melnikov 2022-12-02 19:02:28 MSK
any thoughts?
Comment 2 Repository Robot 2023-07-25 16:28:51 MSK
rpm-build-extra-targets-0.1-alt1 -> sisyphus:

 * Tue Jul 25 2023 Ivan A. Melnikov <iv@altlinux> 0.1-alt1
 - Initial build as a separate package (ALT #44453).