Для других архитектур
Для сборки кросс-компилятора вам нужно задать несколько переменных, которые будут зависеть от того, для какого оборудования вы хотите собрать 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="одно из значений из таблицы ниже"
FPU | FPU | FPU | FPU |
---|---|---|---|
fpa | fpe2 | fpe3 | maverick |
vfp | vfpv3 | vfpv3-fp16 | vfpv3-d16 |
vfpv3-d16-fp16 | vfpv3xd | vfpv3xd-fp16 | neon |
neon-fp16 | vfpv4 | vfpv4-d16 | fpv4-sp-d16 |
neon-vfpv4 |
Установите триплеты для хоста и целевой машины:
export LFA_HOST=$(echo ${MACHTYPE} | sed "s/-[^-]*/-cross/")
export LFA_TGT="триплет для целевой машины"
Значение $LFA_FLOAT | Триплет |
---|---|
soft или softfp | arm-linux-musleabi |
hard | arm-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="архитектура"
ARCH | ARCH | ARCH | ARCH |
---|---|---|---|
armv4t | armv5t | armv5te | armv6 |
armv6j | armv6k | armv6kz | armv6t2 |
armv6z | armv6-m | armv7 | armv7-a |
armv7-r | armv7-m | armv9-a | armv9 |
Запишите эти переменные в ~/.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