LINUX.ORG.RU

Сборка glibc под e2k с помошью lcc

 ,


1

3

Здравствуйте, уважаемое сообщество. Возникла проблема со сборкой glibc кросскомпилятором lcc (x86_64 debian bookworm)

  1. Качаем кросскомпилятор с сайта мцст
wget "https://dev.mcst.ru/downloads/2025-03-30/cross-sp-rel-1.27.21.e2k-v6.5.10-e2c3_64.tgz"
cd /
tar -xf rel-1.27.21.e2k-v6.5.10-e2c3_64.tgz
  1. Изменяем переменную среды PATH
echo "export PATH=$PATH:/opt/mcst/lcc-1.27.21.e2k-v6.5.10-e2c3/bin/" >>~my_user/.bashrc
echo "export CC=lcc">>~my_user/.bashrc
echo "export CXX=l++">>~my_user/.bashrc
  1. Качаем и распаковываем глибси от мцст
wget https://dev.mcst.ru/downloads/2024-07-03/glibc-2.35.tar.gz
tar -xf glibc-2.35.tar.gz
cd glibc-2.35
mkdir build
cd build
export glibc_install="$(pwd)/install"
../configure --prefix "$glibc_install"
make 

При этом configure не поддерживает параметра –host=e2k После выполнения команды make имеем ошибку:

	  rtld-sizes.sym > /home/test/glibc-2.35/build/rtld-sizes.hT
lcc: "../stdlib/stdint.h", line 109: error #47: incompatible redefinition of
          macro "__INT64_C" [-Werror=bad-macro-redef]
  #  define __INT64_C(c)	c ## LL

Наверное, простейшее решение — собирать без Werror:

../configure --prefix "$glibc_install" --disable-werror

Изменяем переменную среды PATH

Тут ересь делаешь с записью в bashrc. В переменных CC и CXX по-умолчанию должен быть нормальный хостовый (ни в коем случае не кросс!) компилятор, и если хост не эльбрус, то это должен быть gcc или, на худой конец, clang. Иначе можно огрести больших проблем на ровном месте. Хочешь пользоваться lcc — не вопрос, создаёшь у себя lcc.sh

export PATH=$PATH:/opt/mcst/lcc-1.27.21.e2k-v6.5.10-e2c3/bin
export CC=lcc
export CXX=l++

и когда надо что-то им покомпилить, делаешь source lcc.sh

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

стало гораздо лучше

/tmp/lcc_ieN1mb.s: Assembler messages:
/tmp/lcc_ieN1mb.s:91691: Error: changed section type for __libc_freeres_ptrs
/tmp/lcc_ieN1mb.s:91691: Error: changed section attributes for __libc_freeres_ptrs
/tmp/lcc_ieN1mb.s:91694: Error: changed section type for __libc_freeres_ptrs
/tmp/lcc_ieN1mb.s:91694: Error: changed section attributes for __libc_freeres_ptrs
make[2]: *** [../o-iterator.mk:9: /home/test/glibc-2.35/build/intl/localealias.o] Error 1
make[2]: Leaving directory '/home/test/glibc-2.35/intl'
make[1]: *** [Makefile:490: intl/subdir_lib] Error 2
make[1]: Leaving directory '/home/test/glibc-2.35'

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

Там перед этим make должен был строку запуска компилятора написать в терминал. Надо её скопировать, добавить -S и почитать получившийся ассемблерный листинг. Потому что я, например, без понятия что там за section type и section attributes у символа __libc_freeres_ptrs, и почему они «изменились». Там что, два раза директивы для одного и того же символа указываются?

iliyap ★★★★★
()
Ответ на: комментарий от iliyap
lcc localealias.c -c -std=gnu11 -fgnu89-inline  -g -O2 -Wall -Wwrite-strings -Wundef -Werrror -fmerge-all-constants -frounding-math -fno-stack-protector -fno-common -Wstrict-prototypes -Wold-style-definition -fmath-errno    -fpie   -ftls-model=initial-exec      -I../include -I/home/test/glibc-2.35/build/intl  -I/home/test/glibc-2.35/build  -I../sysdeps/unix/sysv/linux/e2k/e2k32  -I../sysdeps/e2k/e2k32/nptl  -I../sysdeps/unix/sysv/linux/e2k  -I../sysdeps/e2k/nptl  -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux  -I../sysdeps/nptl  -I../sysdeps/pthread  -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../sysdeps/unix/sysv  -I../sysdeps/unix/e2k  -I../sysdeps/unix  -I../sysdeps/posix  -I../sysdeps/e2k/e2k32/fpu  -I../sysdeps/e2k/fpu  -I../sysdeps/e2k/e2k32  -I../sysdeps/e2k  -I../sysdeps/ieee754/float128  -I../sysdeps/ieee754/ldbl-96/include -I../sysdeps/ieee754/ldbl-96  -I../sysdeps/ieee754/flt-32  -I../sysdeps/ieee754/dbl-64  -I../sysdeps/wordsize-32  -I../sysdeps/ieee754  -I../sysdeps/generic  -I.. -I../libio -I.  -D_LIBC_REENTRANT -include /home/test/glibc-2.35/build/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h  -DPIC     -DTOP_NAMESPACE=glibc -D'LOCALEDIR="//share/locale"' -D'LOCALE_ALIAS_PATH="//share/locale"' -o /home/test/glibc-2.35/build/intl/localealias.o -MD -MP -MF /home/test/glibc-2.35/build/intl/localealias.o.dt -MT /home/test/glibc-2.35/build/intl/localealias.o
/tmp/lcc_E12MFb.s: Assembler messages:
/tmp/lcc_E12MFb.s:91691: Error: changed section type for __libc_freeres_ptrs
/tmp/lcc_E12MFb.s:91691: Error: changed section attributes for __libc_freeres_ptrs
/tmp/lcc_E12MFb.s:91694: Error: changed section type for __libc_freeres_ptrs
/tmp/lcc_E12MFb.s:91694: Error: changed section attributes for __libc_freeres_ptrs
make[2]: *** [../o-iterator.mk:9: /home/test/glibc-2.35/build/intl/localealias.o] Error 1

с виду нужна какая-то магия.

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

Там дают удалённый доступ по ssh к родной E2K машине, написать на почту dev_info@mcst.ru

Здравствуйте. Хочу получить удаленный доступ к Эльбрусу. Мои данные :)

login: твой ник

ssh public key: твой публичный ссх ключ

И ответ

Здравствуйте. Доступ выдан на 3 месяца. При необходимости доступ можно будет продлить.

И всё, подключайся и конпиляй. Ну как минимум можно будет подглядеть места где у тебя валится на хосте, а там собирается и сравнить, узнать в чём беда.

Я хотел там lua конпилять, делать статические сборки для x86_64 и E2K, но чёта эта, так и не решил стоит ли вообще и в целом это делать, типа делать сборки бинарей с вшитыми в них скриптами, йех.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

там нет средств компиляции. так бы я их затарил и утащил =_= эльбрус то у меня есть под рукой. целый комп. но без компилятора под e2k

shimajima
() автор топика
Последнее исправление: shimajima (всего исправлений: 1)
Ответ на: комментарий от shimajima

В смысле? На самом аппаратном эльбрусе сборка для него самого идёт через кросс-компилятор? А зачем o_0 и почему? Типа там не lcc дёргается для cc -с main.c ?

Или ты про родные средства сборки dpkg типа dpkg-dev не работают просто так, и надо сначала самому собрать исходники своими руками, а потом просто бинари пакетить через dpkg-deb?

Я когда у меня доступ был, чёт даже не вникал, скачал архив Lua распаковал, make запустил и готово. Пакетить мне ничего не нужно было, я просто хотел поиграть с параметрами сборки языка и смотреть что будет, как будет работать и сравнивать со своим amd phenom домашним.

UDP: Хотя может я чего и напутал, не помню уже.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

не. если решать задачу сборки операционки - то это можно сделать только кроссом, т.к. в контейнере зависимости не позволят ничего собрать. там пакеты вперемешку - то букворм то джесси. дебхелпер вообще древний. у меня кстати хост (который был в доступе) перегрелся и перестал работать. так что остался только контейнер.

кстати, выложенный глибси кроссом не соберётся и это норма.

shimajima
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Крч нашёл как собирать глибси. подсказал Дмитрий Пугачёв Есть редмиха в их архиве quick-native-build.howto

Делаем так:

cd glibc-2.35
mkdir build
cd build
../configure --host=e2k64-mcst-linux-gnu --prefix=/usr CC="lcc -mptr64 -fasm-entries-first  -fno-strict-aliasing -fno-ipa-attrs -U__NO_INLINE__ -masm-inline -Wno-builtin-functions-redefined -Wno-builtin-declaration-mismatch -Wno-error=invalid-builtin-arg -Wno-error=maybe-uninitialized" CXX="l++ -mptr64 -fasm-entries-first -fno-strict-aliasing -fno-ipa-attrs -U__NO_INLINE__ -masm-inline -Wno-builtin-functions-redefined -Wno-builtin-declaration-mismatch -Wno-error=invalid-builtin-arg -Wno-error=maybe-uninitialized" CFLAGS="-O3" CXXFLAGS="-O3" --enable-obsolete-rpc --enable-obsolete-nsl --enable-nscd

всё - у нас собралась глибся

file libc.so
libc.so: ELF 64-bit LSB shared object, MCST Elbrus, version 1 (SYSV), dynamically linked, interpreter /li
b64/ld-linux.so.2, for GNU/Linux 2.6.33, not stripped

теперь можно собирать что хотим и как хотим.

Не забываем про правильный энвайронмент

 PATH=$PATH:/opt/mcst/lcc-1.27.21.e2k-v6.5.10-e2c3/bin/:/opt/mcst/lcc-1.27.21.e2k-v6.5.10-e2c3/bin.toolchain/
shimajima
() автор топика