LINUX.ORG.RU

Сборка кроскомпильного тулчейна mingw32 под funtoo (crossdev)

 , , ,


0

5

Пытаюсь собрать кроскомпильный тулчейн для таргетной архитектуры i686-pc-mingw32 . Делаю это по всем канонам генты, с помощью crossdev'а:

crossdev -S -t i686-pc-mingw32

Сначала всё идёт неплохо, качаются хедеры, собираются бинутилсы, собирается первая стадия гцц даже, но вот cross-w32api (следующий шаг после gcc-stage1) проваливается с треском. И не удивительно - компилятор которым она пыталась собраться был /usr/bin/gcc, хотя всякие там бинутилсы (типа i686-pc-mingw32-ar) подцепились как надо. Посмотрел на лог сборки гцц с первой стадии и немного прифигел - он собирался вобще без указания --target'а, для хостовой системы и ставился прямиком в /usr, вместо /usr/i686-pc-mingw32. Попробовал другие версии гцц которые были в репозитории (от 4.3.3-r2 до 4.8.1-r2) - та же история. Как бы рассказать гцц (или кроссдеву, уж не знаю кто из них там не договорился) чтобы собирался под таргетную архитектуру, а не под хостовую?



Последнее исправление: iamtakingiteasy (всего исправлений: 2)

Ответ на: комментарий от Deleted

И что вы таки хотели этим сказать? Что обязательно указывать либц? Но ведь ни в одном гентушном туториале она не указывается. Да и бинутилсы собираются как надо. И точно ли вы смотрели этот самый -t help?

iamtakingiteasy
() автор топика
Ответ на: комментарий от iamtakingiteasy

Но ведь ни в одном гентушном туториале она не указывается.

Ох, ладно, делай по туториалам.

Deleted
()
Ответ на: комментарий от Deleted

Рекомендую ответить на мой последний вопрос, хотя бы для себя. «mingw32» - это специальный таргет для кроссдева, о чём в `crossdev -t help` и написано, кстати. При желании никаких других элементов туплы можно и не указывать, просто `-t mingw32` и получить то же самое. Проблема не в формировании туплы, а скорее в ебилде gcc, в котором --target в принципе отсутсвует на стадии конфигура, а CTARGET в самом начале ебилда приравнивается к CHOST.

iamtakingiteasy
() автор топика

В общем как решение, откатился на версию портежей где ещё был gcc с toolchain.eclass вместо цельного ебилда, как в новых версиях.

iamtakingiteasy
() автор топика
Ответ на: комментарий от iamtakingiteasy

CTARGET в самом начале ебилда приравнивается к CHOST.

Если CTARGET пуст, то приравнивается, иначе используется тот, который был указан.

Micky53
()
Ответ на: комментарий от Micky53

ORLY?

pkg_setup() {
        unset GCC_SPECS # we don't want to use the installed compiler's specs to build gcc!
        unset LANGUAGES #265283
        PREFIX=/usr
        CTARGET=$CHOST
        GCC_BRANCH_VER=${SLOT}
        GCC_CONFIG_VER=${PV}
        DATAPATH=${PREFIX}/share/gcc-data/${CTARGET}/${GCC_CONFIG_VER}
        BINPATH=${PREFIX}/${CTARGET}/gcc-bin/${GCC_CONFIG_VER}
        LIBPATH=${PREFIX}/lib/gcc/${CTARGET}/${GCC_CONFIG_VER}
        STDCXX_INCDIR=${LIBPATH}/include/g++-v${GCC_BRANCH_VER}
}

Кусочек из /usr/portage/sys-devel/gcc/gcc-4.8.1-r2.ebuild фанты.

iamtakingiteasy
() автор топика
Ответ на: комментарий от iamtakingiteasy

Специально только-что обновил portage. gcc-4.8.1-r2.ebuild вообще нет (использую rsync://rsync2.ru.gentoo.org/gentoo-portage). Максимум gcc-4.8.1-r1.ebuild. Но и в нём и в во всех остальных pkg_setup содержит вызов toolchain_pkg_setup.

inherit toolchain
...
pkg_setup() {
	toolchain_pkg_setup

	if use lto ; then
		ewarn
		ewarn "LTO support is still experimental and unstable.  Any bug reports"
		ewarn "about LTO that do not include an upstream patch will be closed as"
		ewarn "invalid."
		ewarn
	fi
}

toolchain.eclass:
export CTARGET=${CTARGET:-${CHOST}}

Micky53
()
Ответ на: комментарий от iamtakingiteasy

*Пометил фанту как рассадник*

Deleted
()

Если в make.conf присутствует:
CC=gcc
CXX=g++
закомментируй их на время сборки mingw, возможно причина кроется именно в этом.

NaiLi ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.