Для других архитектур

Для сборки кросс-компилятора вам нужно задать несколько переменных, которые будут зависеть от того, для какого оборудования вы хотите собрать LFA. Вам нужно выбрать триплет для целевой архитектуры, архитектуру процессора и т.д. Для выбора нужных значений пользуйтесь приведёнными здесь таблицами.

Если ваш целевой процессор имеет аппаратную поддержку плавающей запятой, то установите переменную LFA_FLOAT в значение hard или softfp. Используйте softfp, если в будущем вы будете использовать в собранной системе ещё и программы, скомпилированные с помощью soft. В противном случае используйте hard. Если ваш целевой процессор не поддерживает плавающую запятую, используйте в качестве значения LFA_FLOAT вариант soft.

Если ваш процессор имеет одну из архитектур ARMv9, то хорошими для него будут следующие варианты: триплет arm-linux-musleabi, архитектура — armv5t и поддержка плавающей запятой — soft. ARMv9-процессоры обычно не имеют аппаратных возможностей работы с плавающей запятой.

export LFA_FLOAT="[hard, soft или softfp]"

Если вы выбрали hard или softfp для LFA_FLOAT, то теперь вам нужно установить, какое оборудование для работы с плавающей запятой используется в целевом процессоре (согласно таблице ниже):

export LFA_FPU="одно из значений из таблицы ниже"
FPUFPUFPUFPU
fpafpe2fpe3maverick
vfpvfpv3vfpv3-fp16vfpv3-d16
vfpv3-d16-fp16vfpv3xdvfpv3xd-fp16neon
neon-fp16vfpv4vfpv4-d16fpv4-sp-d16
neon-vfpv4

Установите триплеты для хоста и целевой машины:

export LFA_HOST=$(echo ${MACHTYPE} | sed "s/-[^-]*/-cross/")
export LFA_TGT="триплет для целевой машины"
Значение $LFA_FLOATТриплет
soft или softfparm-linux-musleabi
hardarm-linux-musleabihf

Немного про LFA_TGT.

Переменная окружения LFA_TGT хранит в себе значение триплета для целевой машины. Триплет принимает тип целевой машины, состоящий из следующих элементов: <CPU>-<Vendor>-<KERNEL>-<OS>. Поскольку поле <Vendor> часто не имеет значения, многие системы сборки (такие как, например, система сборки на основе autoconf, используемая всеми или практически всеми пакетами из LFA) позволяют его опустить.

Проницательный читатель LFA может задаться вопросом, почему мы применяем понятие «триплет» к четырёхкомпонентному имени. Компоненты <Kernel> и <OS> начинались как единое поле <System>. Такая форма применяется для многих ОС, например, x86_64-unknown-freebsd. Но две системы могут иметь одно и то же ядро, но быть слишком разными, чтобы использовать для них один и тот же триплет. Например, система Android, работающая на мобильном устройстве, полностью отличается от системы PostmarketOS, хотя обе они имеют одно и то же ядро Linux, запускаются на том же процессоре и, возможно, даже на одном и том же мобильном устройстве. Что и говорить — одна и та же система, имеющая одно и то же ядро, запускающаяся на одном и том же компьютере, но имеющая разные стандартные библиотеки C (например, первая система использует glibc, а вторая — musl), не могут иметь одинаковый триплет.

Поэтому поле <System> было разделено на поля <Kernel> и <OS>, чтобы однозначно обозначить различные вариации систем. В нашем примере система Android имеет триплет aarch64-unknown-linux-android, а система PostmarketOS — aarch64-linux-musleabihf. Ну а слово «триплет» до сих пор осталось в профессиональном лексиконе.

Выберите архитектуру, для которой будете собирать систему:

export LFA_ARCH="архитектура"
ARCHARCHARCHARCH
armv4tarmv5tarmv5tearmv6
armv6jarmv6karmv6kzarmv6t2
armv6zarmv6-marmv7armv7-a
armv7-rarmv7-marmv9-aarmv9

Запишите эти переменные в ~/.bashrc, чтобы не вводить их значения каждый раз после входа от имени пользователя lfa:

cat >> ~/.bashrc << EOF
export LFA_HOST="$LFA_HOST"
export LFA_TGT="$LFA_TGT"
export LFA_ARCH="$LFA_ARCH"
export LFA_FLOAT="$LFA_FLOAT"
export LFA_FPU="$LFA_FPU"
EOF