• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение 2.1.0 Beta c --enable-cxx-flags

Sermus

New member
CHERTS, провел несколько экспериментов с попыткой сборки вот этого
Код:
extern "C" void user_init(void)
{
    stringstream ss;
    string str;
    str += "test";
    ss << str;
}
Сначала попробовал собрать с libc. Оно бы собралось, но не влазит в IRAM, потому что вытягивает в IRAM много чего из libc.

Сделал из Вашего libc libcirom (кстати, почему бы Вам не включить сборку libcirom в UDK?) и попытался слинковать с ним. Получил портянку ошибок вроде
c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/5.2.0/../../../../xtensa-lx106-elf/lib\libstdc++.a(cp-demangle.o): In function `d_identifier':
d:\Neo\crosstool\dl\gcc-5.2.0\build-2\xtensa-lx106-elf\libstdc++-v3\libsupc++/cp-demangle.c:1681:(.text+0x425): dangerous relocation: call0: call target out of range: memcmp
c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/5.2.0/../../../../xtensa-lx106-elf/lib\libstdc++.a(cp-demangle.o): In function `d_growable_string_resize':
d:\Neo\crosstool\dl\gcc-5.2.0\build-2\xtensa-lx106-elf\libstdc++-v3\libsupc++/cp-demangle.c:3774:(.text+0x7f6): dangerous relocation: call0: call target out of range: realloc
d:\Neo\crosstool\dl\gcc-5.2.0\build-2\xtensa-lx106-elf\libstdc++-v3\libsupc++/cp-demangle.c:3777:(.text+0x801): dangerous relocation: call0: call target out of range: free

Такое чувство, что libstdc++ собран без -mlongcalls?
 

pvvx

Активный участник сообщества
С версией 2.1 все прошлые большие проекты транслируются без проблем и какой либо замены чего в makefile или опциях Eclipse. "Оптимизация" - "патчи" дали до 10 байт уменьшения размера на разных проектах. Ранее то-же самое и более достигалось путем распаковки всех либ на объектники и линковки общей гурьбой - линковщику видимо легче собрать... Это происходило и если транслировать не через makefile, а через Internal Builder в Eclipse.
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
вот получился список ошибок примеров версии 2.1
Блин, вы бы хоть указали для каких примеров идут такие ошибки, а то трехметровая портянка ошибок, от чего она - непонятно :(

примеры esp_mesh_sdk_app_* - скорее всего будут удалены из UDK как и ESP8266_MESH_SDK, т.к. Espressif убрала mesh_sdk c github и что с ней дальше будет непонятно.

пример esp8266_ili9341 собирается без ошибок, что за eps8266_ili9341 у вас с ошибками я не знаю.
все примеры i2c_* собираются тоже без ошибок, что за ошибки у вас я не пойму.

пример nodemcu-firmware - тоже собирается без ошибок

Вы уверены в том, что ESP32 будет востребован?
Не уверен, но конкуренты не спят, в плане наколхозить компилятор под cygwin.

Когда ожидается gdb?
В финальном 2.1 думаю будет, сейчас я выложил gcc 5.2 без gdb, была цель его собрать и проверить в работе, следующий шаг - это собрать gdb с ним, на этой неделе уделю все внимание сборке gdb.

И поподробнее можно про дополнения в gcc - это оптимизация переменных в IRAM, FLASH или ?
Поподробнее это тут
Засада была в том, что jcmvbkbc больше не ведет отдельно репо с gcc-xtensa-lx106, и все новые патчи сразу идут в crosstool-NG, а сrosstool-NG под win c mingw не собрать без танцев с бубном, поэтому я написал скрипт сборки gcc-xtensa-lx106 из оригинального gcc 5.2 + выудил все необходимые патчи для gcc,binutils ,newlib,gdb из сrosstool-NG, см. каталог patches в моем репо.

Не подскажите как с switch(x) сделать, чтобы таблица переходов помешалась не в RAM
Увы, не знаю :(

CHERTS, провел несколько экспериментов с попыткой сборки вот этого
А это вот ЭТО собирается на UDK 2.0.9 ? Можно полный пример для эксперимента?
Если я правильно собрал GCC, то опции -mlongcalls -mtext-section-literals присутствуют, может я конечно неправильно опции в configure, я сделал так ../configure ... --enable-cxx-flags='-mlongcalls -mtext-section-literals' при сборке gcc, а может нужно было так ../configure ... -mlongcalls -mtext-section-literals, но вроде как в патчах jcmvbkbc было с --enable-cxx-flags=

Using built-in specs.
COLLECT_GCC=xtensa-lx106-elf-gcc.exe
COLLECT_LTO_WRAPPER=c:/espressif/xtensa-lx106-elf/bin/../libexec/gcc/xtensa-lx106-elf/5.2.0/lto-wrapper.exe
Target: xtensa-lx106-elf
Configured with: ../configure --prefix=/d/Neo/crosstool/xtensa-lx106-elf --target=xtensa-lx106-elf --enable-multilib --disable-nls --disable-shared --disable-threads --with-gnu-as --with-gnu-ld --with-gmp=/d/Neo/crosstool/build/gmp --with-mpfr=/d/Neo/crosstool/build/mpfr --with-mpc=/d/Neo/crosstool/build/mpc --enable-languages=c,c++ --with-newlib --disable-libssp --disable-__cxa_atexit --enable-decimal-float=yes --enable-cxx-flags='-mlongcalls -mtext-section-literals'
Thread model: single
gcc version 5.2.0 (GCC)
 

Sermus

New member
А это вот ЭТО собирается на UDK 2.0.9 ? Можно полный пример для эксперимента?
Это не собиралось на 2.0.9 потому что не должно было. Фиксы от Макса как раз и нужны для того, чтобы оно начало собираться. Поэтому вопрос не имеет особого смысла. По поводу полного примера - отправил в личку.
 

Sermus

New member
И еще хочу напомнить вопрос про libcirom. Добавить его генерацию по затратам - почти ноль, а вот польза весьма пользительна.
На всякий случай, получается из libc вот так:
xtensa-lx106-elf-objcopy --rename-section .text=.irom0.text --rename-section .literal=.irom0.literal libc.a libcirom.a
 

Sermus

New member
Это не собиралось на 2.0.9 потому что не должно было. Фиксы от Макса как раз и нужны для того, чтобы оно начало собираться. Поэтому вопрос не имеет особого смысла. По поводу полного примера - отправил в личку.
Проверил, не собирается и в open sdk с фиксами. Так что задал вопрос jcmvbkbc.
 

CHERTS

Moderator
Команда форума
Проверил, не собирается и в open sdk с фиксами. Так что задал вопрос jcmvbkbc.
На linux с open sdk gcc собран с теми же --enable-cxx-flags='-mlongcalls -mtext-section-literals' что и у меня, так что дело в патчах, то есть да, нужна помощь jcmvbkbc
 

jcmvbkbc

New member
Засада была в том, что jcmvbkbc больше не ведет отдельно репо с gcc-xtensa-lx106, и все новые патчи сразу идут в crosstool-NG, а сrosstool-NG под win c mingw не собрать без танцев с бубном, поэтому я написал скрипт сборки gcc-xtensa-lx106 из оригинального gcc 5.2 + выудил все необходимые патчи для gcc,binutils ,newlib,gdb из сrosstool-NG, см. каталог patches в моем репо.
Не то что "не веду", фиксов для gcc довольно давно не было. Если будет что-то, что есть смысл затащить в ветки call0-4.8.2/call0-4.9.2/lx106-5.1 GitHub - jcmvbkbc/gcc-xtensa: gcc for xtensa -- будут коммиты.
С другой стороны, сборку я всё равно тестирую в crosstool-NG, патчи для binutils и gdb тоже собраны там, так что наверно имеет смысл тянуть патчи оттуда.
 

CHERTS

Moderator
Команда форума
С другой стороны, сборку я всё равно тестирую в crosstool-NG, патчи для binutils и gdb тоже собраны там, так что наверно имеет смысл тянуть патчи оттуда.
Для gcc-5.2, binutils, gdb я как раз все патчи из crosstool-NG тяну. gcc 5.2 собирается и работает, правда с --enable-cxx-flags='-mlongcalls -mtext-section-literals' есть проблемы, Sermus чуть выше об этом написал.

И еще мне не удалось собрать gdb 7.10 как раз с патчами из crosstool-NG, думаю дело в mingw, вылазит такая ошибка:

Код:
make[8]: Entering directory `/d/Neo/crosstool/dl/gdb-7.10/build/gdb/build-gnulib
/import'
gcc -DHAVE_CONFIG_H -I. -I../../../../gdb/gnulib/import -I..     -g -O2 -D__USE_
MINGW_ACCESS -MT rename.o -MD -MP -MF .deps/rename.Tpo -c -o rename.o ../../../.
./gdb/gnulib/import/rename.c
In file included from ./sys/stat.h:44:0,
                 from ../../../../gdb/gnulib/import/rename.c:34:
c:\mingw\include\parts\time.h:65:8: error: redefinition of 'struct rpl_timespec'

struct timespec
        ^
./time.h:386:8: note: originally defined here
struct timespec
        ^
make[8]: *** [rename.o] Error 1
make[8]: Leaving directory `/d/Neo/crosstool/dl/gdb-7.10/build/gdb/build-gnulib/
import'
 
Сверху Снизу