[Обновление 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 26.08.2015