Как сделать канадский крест для xtensa-lx106-elf для Android ARM хоста с crossstool-ng? - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь скомпилировать на машине 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. Я нашел старую дискуссию о чем-то похожем, но на самом деле применение патчей не помогло.

...