LINUX.ORG.RU

Сборка crystax ndk с gcc6

 


0

1

Чем отличается сборка тестовых версиий crystax ndk с gcc6 от версии r10?
В скрипте идёт checkout на одну ветку crystax-ndk-10.3.2 для всех реп, но в репе c gcc6 присутствует только master и upstream. Где-то есть список реп и веток, использующийся в сборках с gcc6?
cast crystax
Хочу собрать легковесный ndk для сборки именно android проектов, без использования libcrystax и улучшений поддержки posix.

★★★★★

Отличается много чем. Собственно, master - это основная ветка, в которой идет разработка. Тестовые билды (доступные на https://dl.crystax.net/builds) собираются из master-а. Версия 10.3.2 же - зафиксированный тэг в прошлом. Поэтому разница между тестовыми сборками и r10 - это вся работа, проделанная с момента последнего релиза.

crystax-ndk-10.3.2 - это не ветка, а тэг, соответствующий релизу версии 10.3.2. В репозитории gcc6 этого тэга нет, т.к. этого репозитория еще не было на момент релиза.

Собрать собственный NDK с gcc6, но без libcrystax - что ж, это возможно, но потребует немалых правок в сборочных скриптах и в исходниках самого gcc6. Процесс будет довольно трудоемким и уж точно не быстрым. Не уверен, что в этом есть смысл, но дело ваше.

Если все-таки решите это делать, то просто положите gcc6 (master) рядом с gcc5 и соответственно отредактируйте сборочные срипты в platform/ndk/build/tools.

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

Сам gcc работает без libcrystax, достаточно пропатчить пробелами бинари gcc/g++ чтобы он его не линковал. Успешно приделал к старому ndk, выдаёт вполне работоспособные бинарники, нужно только автоподстановку sincos вместо sin/cos отколючать.
Сейчас пробую сборку компилятора отдельно, безостального ndk.

mittorn ★★★★★
() автор топика

А вот и первый сбой:

checking size of void *... 0
checking size of short... 0
checking size of int... 0
checking size of long... 0
checking for long long... no
checking for int8_t... no
checking for int16_t... no
checking for int32_t... no
checking for int64_t... no
checking for long long int... no
checking for intmax_t... no
checking for intptr_t... no
checking for uint8_t... no
checking for uint16_t... no
checking for uint32_t... no
checking for uint64_t... no
checking for unsigned long long int... no
checking for uintmax_t... no
checking for uintptr_t... no
configure: error: uint64_t or int64_t not found
Makefile:4084: ошибка выполнения рецепта для цели «configure-gcc»

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

Конечно, сам gcc не требует libcrystax. Но чтобы его нормально собрать, нужны системные (целевые) хэдеры и библиотеки. И вот с этим как раз беда на Android - те, что есть, gcc не нравятся по понятной причине (несоответствие POSIX и де-факто стандартам, таким как Glibc). Именно для этого и нужна libcrystax - чтобы привести системные хедеры и библиотеки в состояние, соответствующее стандартам, и позволить gcc собраться без серьезного патчинга. Если же требуется обязательно без libcrystax, то без патчинга самого gcc не обойтись. Ваша ошибка на этапе configure с ошибкой определения int64_t/uint64_t как раз из этой оперы. Чтобы ее починить, либо правьте системные хедеры (придя тем самым к собственному варианту libcrystax), либо правьте gcc (конфигурационные скрипты и исходники), вставляя многочисленные проверки типа «#ifdef __ANDROID__».

P.S. Чтобы избежать неоднозначности в понимании, под libcrystax понимается не один только бинарник libcrystax.so, а весь набор системных хэдеров и библиотек.

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

Ну в принципе логично. Тогда по идее libcrystax нужен только для сборки для host и target андройда, для нативных glibc сборок в нём смысла нет, если сам gcc не поломан. У меня же флаги для gcc андройдового (target) были перемешаны с хостовым (glibc)

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