Я пытаюсь скомпилировать на машине x86_64 linux Ubuntu 18.04 [построить] набор инструментов, который работает на ARM Android (arm- linux -androidabi) [host] и явно нацелен на xtensa-lx106-elf.
Мне удалось скомпилировать простой кросс локально (так что он работает на моей машине сборки и предназначен для расширения). Также у меня есть автономная цепочка инструментов от Android NDK 21:
$ NDK / build / tools / make_standalone_toolchain.py --arch arm --api 21 --install-dir ~ / x-tools / arm-ndk-21
Я добавил "~ / x-tools / arm-ndk-21 / bin" в ПУТЬ, и он найден.
Далее я создал конфигурацию из образца xtensa-lx106-elf
и изменил ее с помощью "./ct-ng menuconfig" - made host = "arm- linux -androidabi", canadian cross и stati c toolchain (чтобы не зависеть от android).
Во время "./ct-ng build" я получил сообщение об ошибке:
[ALL ] xtensa-lx106-elf-gcc -dumpspecs > tmp-specs
[ALL ] /bin/bash: xtensa-lx106-elf-gcc: command not found
[ALL ] Makefile:1808: recipe for target 'specs' failed
[ERROR] make[1]: *** [specs] Error 127
[ALL ] make[1]: Leaving directory '/opt/Espressif/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-core-pass-2/gcc'
[ERROR]
[ERROR] >>
[ERROR] >> Build failed in step 'Installing pass-2 core C compiler'
[ERROR] >> called in step '(top-level)'
[ERROR] >>
[ERROR] >> Error happened in: CT_DoExecLog[scripts/functions@257]
[ERROR] >> called from: do_cc_core_backend[scripts/build/cc/gcc.sh@464]
[ERROR] >> called from: do_cc_core_pass_2[scripts/build/cc/gcc.sh@153]
[ERROR] >> called from: main[scripts/crosstool-NG.sh@638]
[ERROR] >>
[ERROR] >> For more info on this error, look at the file: 'build.log'
[ERROR] >> There is a list of known issues, some with workarounds, in:
[ERROR] >> 'share/doc/crosstool-ng/ct-ng.1.20.0/B - Known issues.txt'
[ERROR]
[ERROR] (elapsed: 4:25.56)
Я могу предоставить полный build.log, если это поможет.
Вызов xtensa-lx106-elf кажется подозрительным, поскольку ожидается, что он будет работать на хост-машине, а не на машине сборки:
xtensa-lx106-elf-g cc -dumpspecs> tmp-specs
Заглядывать в crossstool-ng do c Я ожидаю только android Требуется автономная цепочка инструментов NDK в PATH:
Есть несколько образцов канадских наборов инструментов, поставляемых с кросс-табуретом. НГ. Имена канадских сэмплов состоят из двух частей, разделенных запятыми, т.е. HOST, TARGET. В качестве предварительного условия они требуют образца HOST. Например:
ct-ng x86_64-w64-mingw32
ct-ng build
PATH=~/x-tools/x86_64-w64-mingw32/bin:$PATH
ct-ng x86_64-w64-mingw32,x86_64-pc-linux-gnu
ct-ng build
Если я добавляю локальный каталог bin xtensa-lx106-elf в PATH, он идет дальше и терпит неудачу на этапе «финального компилятора» со следующим (Все еще не уверен, почему мне пришлось добавить двоичный файл xtensa-lx106-elf в путь, и если он был правильным):
[ERROR] checking for the value of EOF... configure: error: computing EOF failed
[ALL ] Makefile:9465: recipe for target 'configure-target-libstdc++-v3' failed
[ERROR] make[1]: *** [configure-target-libstdc++-v3] Error 1
Я также пробовал с помощью инструментальной цепочки «arm-unknown- linux -gnueabi» (скомпилирован с помощью вышестоящей программы crossstool-ng , а не вилка xtensa) вместо Android автономной цепочки инструментов NDK, но ошибки те же.
Я использую вилку crossstool-ng:
/opt/Espressif/crosstool-NG anton$git log -1
commit 5020fa4bf7504fa2b06afc1beae39635a17e77f1 (HEAD -> lx106-g++, origin/lx106-g++)
Author: Linus <wendefelix1998@gmail.com>
Date: Wed Feb 6 18:06:52 2019 +0100
fix: prevent configure fail with bash 5
/opt/Espressif/crosstool-NG anton$git remote -v
origin git://github.com/jcmvbkbc/crosstool-NG.git (fetch)
origin git://github.com/jcmvbkbc/crosstool-NG.git (push)
/opt/Espressif/crosstool-NG anton$
$uname -a
Linux dell-XPS-13-9370 5.3.0-51-generic #44~18.04.2-Ubuntu SMP Thu Apr 23 14:27:18 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
Итак, мои вопросы: Я в целом иду в правильном направлении или чего-то не хватает? Почему мне нужно добавлять двоичные файлы локального кросс-компилятора в PATH, чтобы построить канадский крест (и было ли это правильным шагом)? Есть идеи, как это исправить?
PS. Я нашел старую дискуссию о чем-то похожем, но на самом деле применение патчей не помогло.