Для архитектуры AArch64

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

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

export LFA_HOST=$(echo ${MACHTYPE} | sed "s/-[^-]*/-cross/")
export LFA_TGT="aarch64-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
armv8-aarmv8-marmv8armv8-r
armv8.1-aarmv8.1-marmv8.1-r

Например, для процессоров Cortex-A53 $LFA_ARCH="armv8-a".

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

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

Внимание

Далее и на протяжении всего руководства, если вы собираете систему для AArch64, то не используйте переменные окружения $LFA_FLOAT и $LFA_FPU, а также пропускайте при вводе команд строки, содержащие эти переменные окружения. Например, если вы собираете систему для AArch64, то скрипту configure не следует передавать эти аргументы:

  --with-float=$LFA_FLOAT \
  --with-fpu=$LFA_FPU