Ошибка при создании riscv-tools (первый файл gcc newlib: genmddeps)

[Обновление 20150825: похоже, существует несоответствие компилятора и ассемблера при компиляции genmddeps.o; используется компилятор g++, который является установленной версией Ubuntu 4.9.2-10ubuntu13, но используемый ассемблер находится в каталоге сборки ./as, который настроен как riscv64-unknown-elf, отсюда ошибка с параметром --64, переданным из компилятора. Полная команда находится в последнем блоке кода в конце этого поста. Я не совсем понимаю (пока), почему существует локальная копия as и почему g++ недостаточно умен, чтобы не использовать ее ....]

Возможно, есть что-то простое, что я неправильно сконфигурировал, но если это так, это ускользнуло от нескольких попыток. Любая помощь будет оценена.

Я застрял, пытаясь построить дерево с ракетным чипом, и при создании riscv-tools дела идут не так. Похоже, что происходит то, что ассемблеру riscv передается недопустимая опция, которая вызывает сбой:

/home/kevin/Working/rocket-chip/riscv/riscv64-unknown-elf/bin/as: unrecognized option '--64'
make[3]: *** [build/genmddeps.o] Error 1
make[2]: *** [all-gcc] Error 2
make[1]: *** [all] Error 2
make: *** [stamps/build-gcc-newlib] Error 2

Configure, похоже, не думает, что это кросс-компиляция, которую я ожидал, учитывая использование riscv как двоичного, а не системы x86_64 как двоичного:

Configuring in ./gcc
...
checking whether we are cross compiling... no

Пути вроде настроены правильно:

> echo $TOP
/home/kevin/Working/rocket-chip
> echo $RISCV
/home/kevin/Working/rocket-chip/riscv
> echo $PATH
.:~/bin:~/scripts:.:~/bin:~/scripts:/home/kevin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/kevin/Working/rocket-chip/riscv/bin

(Кстати, я вижу некоторые ошибки тестирования оболочки в процессе сборки после загрузки gcc-5.2.0:

/bin/sh: 1: test: false: unexpected operator

Не уверен, что это симптом или известное поведение.)

Система - Ubuntu 15.04, работающая под управлением VMware player на Win *. Я использую tcsh, но то же самое происходит и с bash. Изучая изменения riscv, кажется, что необходим параметр --m64 вместо -64, но я не уверен, откуда берется -64 в файлах сборки / конфигурации, поскольку он не отображается в фактической сборке команда для компилятора. Полная последовательность инструкций по сборке из журнала сборки:

make[3]: Entering directory '/home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/build-gcc-newlib/gcc'
TARGET_CPU_DEFAULT="" \
HEADERS="auto-host.h ansidecl.h" DEFINES="" \
/bin/bash /home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/src/newlib-gcc/gcc/mkconfig.sh config.h
TARGET_CPU_DEFAULT="" \
HEADERS="options.h insn-constants.h config/elfos.h config/newlib-stdint.h config/riscv/riscv.h config/riscv/elf.h config/initfini-array.h defaults.h" DEFINES="LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3" \
/bin/bash /home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/src/newlib-gcc/gcc/mkconfig.sh tm.h
TARGET_CPU_DEFAULT="" \
HEADERS="config/riscv/riscv-protos.h tm-preds.h" DEFINES="" \
/bin/bash /home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/src/newlib-gcc/gcc/mkconfig.sh tm_p.h
TARGET_CPU_DEFAULT="" \
HEADERS="auto-host.h ansidecl.h" DEFINES="" \
/bin/bash /home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/src/newlib-gcc/gcc/mkconfig.sh bconfig.h
g++ -c   -g -O2 -DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE  -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings   -DHAVE_CONFIG_H -DGENERATOR_FILE -I. -Ibuild -I/home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/src/newlib-gcc/gcc -I/home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/src/newlib-gcc/gcc/build -I/home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/src/newlib-gcc/gcc/../include  -I/home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/src/newlib-gcc/gcc/../libcpp/include  \
    -o build/genmddeps.o /home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/src/newlib-gcc/gcc/genmddeps.c
Makefile:2428: recipe for target 'build/genmddeps.o' failed
make[3]: Leaving directory '/home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/build-gcc-newlib/gcc'
Makefile:4112: recipe for target 'all-gcc' failed
make[2]: Leaving directory '/home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/build-gcc-newlib'
Makefile:867: recipe for target 'all' failed
make[1]: Leaving directory '/home/kevin/Working/rocket-chip/riscv-tools/riscv-gnu-toolchain/build/build-gcc-newlib'
Makefile:214: recipe for target 'stamps/build-gcc-newlib' failed

person KevinR    schedule 24.08.2015    source источник
comment
Что произойдет, если вы создадите riscv-tools напрямую? Установлены ли в вашей среде CC & CXX?   -  person user2548418    schedule 25.08.2015
comment
Проблема заключалась в том, что установленная версия g ++ находила недавно созданную копию (g) as из каталога сборки, а не правильную установленную версию (g) as. CC / CXX не был установлен вне Makefile. Удаление . решает проблему, но лучшим решением было бы исправить процесс сборки, чтобы полностью избежать псевдонима, но это жизнеспособно, поскольку это сделало бы дерево сборки нестандартным и неудобным для дальнейшего развития. В этом случае лучшим решением было создать минимальный путь (без .!) Для сборки, чтобы псевдоним не появлялся.   -  person KevinR    schedule 26.08.2015


Ответы (1)


Удаление . из моего PATH решило эту проблему: оказалось, что процесс сборки и каталоги структурированы g++ (установлен для x86_64) с запущенным as (только что созданным для RISC-V). Я автоматизирую этот прием, чтобы обойти проблему, когда я буду строить rocket_chip в будущем.

person KevinR    schedule 25.08.2015