LINUX.ORG.RU

Кросс-компиляция из сырцов дистра

 , ,


0

1

Вот вроде все дистры предлагают тебе взять сырцы пакета - deb’ы и rpm’ы чисто с сырцами, арчевские PKGBUILD’ы, в войде можно скачать репу со сборочными шаблонами. Но как я понял картина везде такова: сырцы тебе дают и на этом всё, пакетный менеджер ими никак не оперирует и процесс сборки полностью ручной.

Т.е. при наличии возможности держать в системе пакеты под разные архитектуры и наличии пакетов специально для кросс-компиляции с приписочкой типа ‘x86_64-mingw-w64’, нет какого-то простого способа как-то взять из дистра сырцы условного ‘googletest’ и установить его как нативный пакет как в каком-нибудь MSYS? Из того, что я видел - это или AUR, или ручное написание PKGBUILD’ов / войдовских темплейтов. С deb / rpm без понятия что делать.

Есть конечно ‘vcpkg’ и он работает, но есть же тонна пакетов, которые предусматривают сборку под разные таргеты, неужели нельзя как-то это делать средствами дистров, не городя велосипедов, раз уж почти везде есть как минимум gcc под другой таргет, но от которого проку 0 без библиотек?

Так и не понял, что ты хочешь.

Собрать из deb-src версию пакета под другую архитектуру или просто автоматически собрать deb пакет из deb-src и установить в систему.

Написал много, а ничего не понятно. Можешь чётко и лаконично написать, что ты хочешь?

anonymous
()
Ответ на: комментарий от anonymous

TLDR: все дистры на бумаге дают возможность сборки пакетов для кросс-компиляции, но на практике непонятно как заиметь в системе не только пакет gcc-mingw-w64-x86-64, а к примеру googletest-mingw-w64-x86-64. Или как на арче скомпилить те же пакеты, что лежат в MSYS, т.е. которые все с префиксом таргета. Вся суть в том, чтобы не компилить каждый пакет вручную и раскладывать его в /usr/local/{bin,lib,include,share}, а все-таки как-то задействовать то, что уже есть в дистре.

fumanchez
() автор топика
Ответ на: комментарий от fumanchez

Вся суть в том, чтобы не компилить каждый пакет вручную и раскладывать его в /usr/local/{bin,lib,include,share}, а все-таки как-то задействовать то, что уже есть в дистре.

А, понятно. Ещё один троль. Ну давай, что там тебе из ривых мозгов и рук мешает что-то использовать из дистрибутива. Опиши процесс, нам поржать, тебя пристыдить.

anonymous
()
Ответ на: комментарий от anonymous

список систем

Каких систем, есть понятие целевая платформа, он же таргет, под который, если на примере арча или msys2, лежат пакеты с префиксами типа aarch64-linux-gnu или mingw-w64. Проблема в том, что в репах лежат только штук 5 таких пакетов, остальные надо как-то рожать.

fumanchez
() автор топика
Ответ на: комментарий от fumanchez

Блин, а можно просто написать: я не понимаю как в нужном мне дистрибутива установить кросскомпилятор и потом собрать из пакета с исходными кодами дистрибутива пакет под нужную мне архитектуру.

Интересующие меня дистрибутивы такие:

  • Debian / Ubuntu;
  • Arch ;
  • Что-то ещё;

Пример пакета, который хочу собрать такой-то: …

Ну ты и мысли излагать.

anonymous
()
Ответ на: комментарий от fumanchez

В выбранном тобой дистрибутиве как правило будут кросскомпиляторы под те архитектуры, которые поддерживает сам дистрибутив, Arch к примеру поддерживает не так много архитектур, на которые он может ставиться, поэтому в нём может не быть кросскомпиляторов под архитектуры, которые он не поддерживает.

Но в основном будут те, которые поддерживает проект компилятора, из которого собираются кросскомпиляторы, GCC, к примеру поддерживает много. Т.е. буду кросскомпиляторы под архитектуры общеиспользуемые.

Но не обязательно, что все поддерживаемые GCC архитектуры кросскомпляции будут собраны в пакеты в Arch Linux или любом другом.

Поэтому, если тебе не хватает кросскомпиляторов - берёшь deb-src пакет, pgkbuild или другой с описанием сборки пакета из исходных кодов для нужного тебе дистрибутива, правишь его и включаешь в нём сборку кросскомпиляторов для нужной тебе платформы, собираешь deb или другой пакет под твой дистрибутив, ставишь.

Можешь прост собрать руками из исходных кодов, без deb-src или pkgbuild и поставить в /usr/local.

https://wiki.debian.org/Mingw-W64

anonymous
()
Ответ на: комментарий от anonymous

Arch к примеру поддерживает не так много архитектур

Действительно, одна архитектура, хвастаться нечем.

собираешь deb или другой пакет под твой дистрибутив

Это не делается одной командой и вообще для каждого пакета порядок действий будет разный. Суть в том, что задача одна, для её решения всё есть, есть даже альтернатива в лице vcpkg, но хотелось бы пакеты иметь нативные. Более того, если условный Debian собирается и под армы, то тогда может можно качать уже собранные под арм бинарники, зачем их еще и билдить?

берёшь deb-src пакет, pgkbuild или другой с описанием сборки пакета из исходных кодов

Интересно, а почему все так не делают, а придумывают всякие vcpkg, conan и даже фетчат репы в cmake-скриптах.

fumanchez
() автор топика
Ответ на: комментарий от fumanchez

Это не делается одной командой и вообще для каждого пакета порядок действий будет разный.

Ну естественно, вот здесь всё описано:

А про порядок действий - всё должно быть описано в deb-src. Но конечно нужно будет установить сборочные зависимости, возможно тоже, собрав из deb-src, если нужны патчи, отредактировав его, добавив наложение патчей или написав, если нужно что-то для чего нет deb-src.

Интересно, а почему все так не делают, а придумывают всякие vcpkg, conan и даже фетчат репы в cmake-скриптах.

Мне нечего тебе сказать, я не разработчик, просто иногда приходится что-то собирать для Debian под архитектуры, отичные от amd64 (x86_64) / i386 (x86).

Но указанный тобой компилятор (кросскомпилятор) мне не был нужен.

anonymous
()
Ответ на: комментарий от anonymous

А про порядок действий - всё должно быть описано в deb-src.

Насколько я знаю, сборка осуществляется то ли через dpkg, то ли через apt, и в src-пакетах есть какая-то информация для сборки. Т.е. все ставится одним инструментом, по крайней мере в рамках одной архитектуры.

fumanchez
() автор топика