Знакомство с crossdev

Пытаюсь получить систему кросскомпиляции под Винду. Безуспешно. С самого начала. Документация не проясняет ни капли.

Создаю тулчейн командой 'crossdev --targert x86_64-w64-mingw64'. Уже на этом месте вопрос. Откуда можно было, помимо нагугленных форумных сообщений узнать про 'w64' (а оно значимо), если ни 'crossdev -t help' ни хэндбук (https://www.gentoo.org/proj/en/base/embedded/handbook/index.xml?part=1) о нём информации не дают?

root@localhost /home/vanger % crossdev --target x86_64-pc-w64-mingw64
----------------------------------------------------------------------------------------------------------------
* crossdev version: 20140917
* Host Portage ARCH: amd64
* Target Portage ARCH: amd64
* Target System: x86_64-pc-w64-mingw64
* Stage: 4 (C/C++ compiler)
* ABIs: amd64

* binutils: binutils-[latest]
* gcc: gcc-[latest]
* libc: mingw64-runtime-[latest]

* CROSSDEV_OVERLAY: /usr/local/portage
* PORT_LOGDIR: /var/log/portage
* PORTAGE_CONFIGROOT:
* Portage flags:
_ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _
_ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _
/usr/bin/emerge-wrapper: line 48: /eclass/toolchain-funcs.eclass: No such file or directory
/usr/bin/emerge-wrapper: line 49: tc-arch: command not found
!!! WARNING - Cannot auto-configure CHOST x86_64-pc-w64-mingw64
!!! You should edit /usr/x86_64-pc-w64-mingw64/etc/portage/make.conf
!!! by hand to complete your configuration
* Log: /var/log/portage/cross-x86_64-pc-w64-mingw64-binutils.log
* Emerging cross-binutils ...

* binutils failed :(
* If you file a bug, please attach the following logfiles:
* /var/log/portage/cross-x86_64-pc-w64-mingw64-info.log
* /var/log/portage/cross-x86_64-pc-w64-mingw64-binutils.log.xz
* /var/tmp/portage/cross-x86_64-pc-w64-mingw64/binutils*/temp/binutils-config.logs.tar.xz

/var/log/portage/cross-x86_64-pc-w64-mingw64-info.log: http://pastebin.com/Zz4r295c

Чего именно не хватает в '/usr/x86_64-pc-w64-mingw64/etc/portage/make.conf'? Если прописать ARCH (amd64 или x86; причём первый, судя по выводу, и так определяется), ворнинга и 'command no found' нет, но emerge binutils так же валится молча.

Почему при выборе таргета 'x86_64-mingw64', создание таргета валится лишь на
... [ ok ]
* Log: /var/log/portage/cross-x86_64-w64-mingw64-gcc-stage1.log
* Emerging cross-gcc-stage1 ...

? В чём разница?

К слову, создание таргета их хэндбука (sh4-unknown-linux-gnu) тоже валится. Но на cross-gcc-stage2 только.

Забей на crossdev, ищи

Забей на crossdev, ищи специальные утилиты для сборки mingw

Локальный оверлей растёт

Например?И, всё же, странно,

Например? И почему?

Cтранно, что даже таргеты из embedded handbook (sh4-unknown-linux-gnu) и gentoo wiki по mingw (i686-pc-mingw32) не собираются. Кажется, что проблема на поверхности должна быть.

Вот при сборке i686-pc-mingw32 что:

root@localhost /etc/portage % crossdev -t i686-pc-mingw32
----------------------------------------------------------------------------------------------------------------
* crossdev version: 20140917
* Host Portage ARCH: amd64
* Target Portage ARCH: x86
* Target System: i686-pc-mingw32
* Stage: 4 (C/C++ compiler)
* ABIs: default

* binutils: binutils-[latest]
* gcc: gcc-[latest]
* headers: w32api-[latest]
* libc: mingw-runtime-[latest]

* CROSSDEV_OVERLAY: /usr/local/portage
* PORT_LOGDIR: /var/log/portage
* PORTAGE_CONFIGROOT:
* Portage flags:
_ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _
* leaving sys-devel/binutils in /usr/local/portage
* leaving sys-devel/gcc in /usr/local/portage
* leaving dev-util/w32api in /usr/local/portage
* leaving dev-util/mingw-runtime in /usr/local/portage
* leaving sys-devel/gdb in /usr/local/portage
_ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _ - ~ - _
* Log: /var/log/portage/cross-i686-pc-mingw32-binutils.log
* Emerging cross-binutils ... [ ok ]
* Log: /var/log/portage/cross-i686-pc-mingw32-w32api-quick.log
* Emerging cross-w32api-quick ... [ ok ]
* Log: /var/log/portage/cross-i686-pc-mingw32-mingw-runtime-headers.log
* Emerging cross-mingw-runtime-headers ... [ ok ]
* Log: /var/log/portage/cross-i686-pc-mingw32-gcc-stage1.log
* Emerging cross-gcc-stage1 ... [ ok ]
* Log: /var/log/portage/cross-i686-pc-mingw32-w32api.log
* Emerging cross-w32api ... [ ok ]
* Log: /var/log/portage/cross-i686-pc-mingw32-mingw-runtime.log
* Emerging cross-mingw-runtime ... [ ok ]
* Log: /var/log/portage/cross-i686-pc-mingw32-gcc-stage2.log
* Emerging cross-gcc-stage2 ...

* gcc failed :(
* If you file a bug, please attach the following logfiles:
* /var/log/portage/cross-i686-pc-mingw32-info.log
* /var/log/portage/cross-i686-pc-mingw32-gcc-stage2.log.xz
* /var/tmp/portage/cross-i686-pc-mingw32/gcc*/temp/gcc-config.logs.tar.xz

/var/log/portage/cross-i686-pc-mingw32-info.log: http://pastebin.com/xB3MVphi
/var/log/portage/cross-i686-pc-mingw32-gcc-stage2.log.xz: https://dl.dropboxusercontent.com/u/6307148/cross-i686-pc-mingw32-gcc-stage2.log.xz
/var/tmp/portage/cross-i686-pc-mingw32/gcc*/temp/gcc-config.logs.tar.xz: https://dl.dropboxusercontent.com/u/6307148/gcc-config.logs.tar.xz

Вот кусок с ошибками из конца '/var/log/portage/cross-i686-pc-mingw32-gcc-stage2.log.xz' (жутко длинные линии пропущены):

Makefile:416: recipe for target 'sanitizer_libc.lo' failed
make[4]: *** [sanitizer_libc.lo] Error 1
make[4]: *** Waiting for unfinished jobs....
mv -f .deps/sanitizer_common_libcdep.Tpo .deps/sanitizer_common_libcdep.Plo
mv -f .deps/sanitizer_libignore.Tpo .deps/sanitizer_libignore.Plo
mv -f .deps/sanitizer_linux.Tpo .deps/sanitizer_linux.Plo

...

make[3]: Leaving directory '/var/tmp/portage/cross-i686-pc-mingw32/gcc-4.9.2/work/build/i686-pc-mingw32/libgfortran'
make[2]: Leaving directory '/var/tmp/portage/cross-i686-pc-mingw32/gcc-4.9.2/work/build/i686-pc-mingw32/libgfortran'
mv -f .deps/sanitizer_allocator.Tpo .deps/sanitizer_allocator.Plo
make[4]: Leaving directory '/var/tmp/portage/cross-i686-pc-mingw32/gcc-4.9.2/work/build/i686-pc-mingw32/libsanitizer/sanitizer_common'
Makefile:435: recipe for target 'all-recursive' failed
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory '/var/tmp/portage/cross-i686-pc-mingw32/gcc-4.9.2/work/build/i686-pc-mingw32/libsanitizer'
Makefile:305: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/var/tmp/portage/cross-i686-pc-mingw32/gcc-4.9.2/work/build/i686-pc-mingw32/libsanitizer'
Makefile:9759: recipe for target 'all-target-libsanitizer' failed
make[1]: *** [all-target-libsanitizer] Error 2
make[1]: Leaving directory '/var/tmp/portage/cross-i686-pc-mingw32/gcc-4.9.2/work/build'
Makefile:856: recipe for target 'all' failed
make: *** [all] Error 2

>>Makefile:416: recipe for

>>Makefile:416: recipe for target 'sanitizer_libc.lo' failed
>>'sanitizer_libc.lo'
>>sanitizer
озаботься тем чтобы в в /etc/portage/package.use/cross-i686-pc-mingw32 в строке cross-i686-pc-mingw32/gcc был флаг -sanitize
hint: emerge --resume

Что-то лыжи не едут.

Что-то лыжи не едут. Правильно ли я понял, что после прописывания -sanitize в use-флаги, надо выполнить 'crossdev -P --resume -t i686-pc-mingw32'?

При этом почему-то аж на binutils фэйлится.

нагуглил такой багрепорт:

нагуглил такой багрепорт: https://bugs.funtoo.org/browse/FL-821, оказывается проблемы в кривых ебилдах gcc новых версий, для теста вбил в консоль crossdev -S -t i686-pc-mingw32 --g 4.3.6-r1 и всё нормально отработало, попробуй сам

Простио там всё запущено.

Просто там всё запущено. Конечно можно поднять это и привести в порядок, но потратится слишком много времени. Ещё crossdev любит готовить тулчейны, которые шлёпают нерабочие бинарники (особенно если ядра собитать). При том, что при нативной сборке с теми же gcc/binutils всё в порядке.

Локальный оверлей растёт

Использовал http://mxe.cc/ ,

Использовал http://mxe.cc/ , когда надо было qemu собрать под винду

Локальный оверлей растёт

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".