Another noob question

I have to admit I’m close to giving up on platformio. Still trying to build simple esp8266 non-arduino sources, given the fact that Espressif hasn’t been supporting its SDK for years any more, and the build environment just broke down on me (with recent Linux, python, ..).

So I was helped a couple of times recently (thanks), but I don’t see light at the end of the tunnel.

Currently my sample application is

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "gpio.h"

void task_blink(void* ignore)
{
    gpio16_output_conf();
    while(true) {
        gpio16_output_set(0);
        vTaskDelay(1000/portTICK_RATE_MS);
        gpio16_output_set(1);
        vTaskDelay(1000/portTICK_RATE_MS);
    }

    vTaskDelete(NULL);
}

/******************************************************************************
 * FunctionName : user_init
 * Description  : entry of user application, init user function here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void user_init(void)
{
    xTaskCreate(&task_blink, "startup", 2048, NULL, 1, NULL);
}

and I think I have three problems :

  • not all required components from the SDK are included
  • I find things in the command lines executed that I can’t seem to find back in source
  • some of the recent toolchain includes seem to conflict with the Espressif SDK, and not all is well guarded

The toolchain I’m currently using is not recommended by Espressif but it’s in the platformio repo :
“name”: “toolchain-xtensa”,
“version”: “2.100300.220621”,

It may be the source of problems 2 and 3.

What I fail to see is why problem 1 occurs.

victus: {995} pio run
Processing esp8266-d1mini (platform: esp8266rtos; framework: esp8266rtos; board: d1_mini)
------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/esp8266rtos/d1_mini.html
PLATFORM: Espressif 8266 - RTOS v3.4 (4.2.1) > WeMos D1 R2 and mini
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES: 
 - esp8266rtos @ 0.1.0 
 - tool-esptool @ 1.413.0 (4.13) 
 - tool-esptoolpy @ 1.30000.201119 (3.0.0) 
 - toolchain-xtensa @ 2.100300.220621 (10.3.0)
build_includes ->  [[['/home/danny/.platformio/packages/esp8266rtos/components/esp_https_ota/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/tcpip_adapter/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/mbedtls/port/include', '/home/danny/.platformio/packages/esp8266rtos/components/mbedtls/port/include/esp8266', '/home/danny/.platformio/packages/esp8266rtos/components/mbedtls/mbedtls/include', '/home/danny/.platformio/packages/esp8266rtos/components/mbedtls/mbedtls/include/mbedtls'], ['/home/danny/.platformio/packages/esp8266rtos/components/spiffs/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/esp_common/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/wpa_supplicant/include', '/home/danny/.platformio/packages/esp8266rtos/components/wpa_supplicant/port/include', '/home/danny/.platformio/packages/esp8266rtos/components/wpa_supplicant/include/esp_supplicant'], [], ['/home/danny/.platformio/packages/esp8266rtos/components/nvs_flash/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/app_update/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/bootloader_support/include', '/home/danny/.platformio/packages/esp8266rtos/components/bootloader_support/include_priv'], ['/home/danny/.platformio/packages/esp8266rtos/components/http_parser/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/spi_flash/include'], [], [], [], [], ['/home/danny/.platformio/packages/esp8266rtos/components/log/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/freertos/include', '/home/danny/.platformio/packages/esp8266rtos/components/freertos/port/esp8266/include', '/home/danny/.platformio/packages/esp8266rtos/components/freertos/port/esp8266/include/freertos', '/home/danny/.platformio/packages/esp8266rtos/components/freertos/include/freertos', '/home/danny/.platformio/packages/esp8266rtos/components/freertos/include/freertos/private'], ['/home/danny/.platformio/packages/esp8266rtos/components/tcp_transport/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/esp_http_client/include', '/home/danny/.platformio/packages/esp8266rtos/components/esp_http_client/lib/include'], [], ['/home/danny/.platformio/packages/esp8266rtos/components/esp_http_server/include', '/home/danny/.platformio/packages/esp8266rtos/components/esp_http_server/src/port/esp8266', '/home/danny/.platformio/packages/esp8266rtos/components/esp_http_server/src/util'], ['/home/danny/.platformio/packages/esp8266rtos/components/esp-tls'], [], ['/home/danny/.platformio/packages/esp8266rtos/components/newlib/platform_include'], ['/home/danny/.platformio/packages/esp8266rtos/components/esp_gdbstub/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/protocomm/include'], [], ['/home/danny/.platformio/packages/esp8266rtos/components/wear_levelling/include'], [], ['/home/danny/.platformio/packages/esp8266rtos/components/pthread/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/vfs/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/openssl/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/wifi_provisioning/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/heap/include', '/home/danny/.platformio/packages/esp8266rtos/components/heap/port/esp8266/include'], [], ['/home/danny/.platformio/packages/esp8266rtos/components/spi_ram/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/mdns/include'], [], ['/home/danny/.platformio/packages/esp8266rtos/components/esp_event/include', '/home/danny/.platformio/packages/esp8266rtos/components/esp_event/private_include'], ['/home/danny/.platformio/packages/esp8266rtos/components/lwip/include', '/home/danny/.platformio/packages/esp8266rtos/components/lwip/lwip/src/include', '/home/danny/.platformio/packages/esp8266rtos/components/lwip/port/esp8266/include', '/home/danny/.platformio/packages/esp8266rtos/components/lwip/include/apps', '/home/danny/.platformio/packages/esp8266rtos/components/lwip/include/apps/dhcpserver', '/home/danny/.platformio/packages/esp8266rtos/components/lwip/include/apps/sntp', '/home/danny/.platformio/packages/esp8266rtos/components/lwip/include/apps/ping'], [], ['/home/danny/.platformio/packages/esp8266rtos/components/jsmn/include'], ['/home/danny/.platformio/packages/esp8266rtos/components/esp8266/include', '/home/danny/.platformio/packages/esp8266rtos/components/esp8266/include/driver'], ['/home/danny/.platformio/packages/esp8266rtos/components/esp_ringbuf/include', '/home/danny/.platformio/packages/esp8266rtos/components/esp_ringbuf/include/freertos']], '/home/danny/.platformio/packages/esp8266rtos/include']
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 45 compatible libraries
Scanning dependencies...
Dependency Graph
|-- freertos
Building in release mode
Compiling .pio/build/esp8266-d1mini/src/main.o
Compiling .pio/build/esp8266-d1mini/lib7d2/esp_common/esp_err_to_name.o
Compiling .pio/build/esp8266-d1mini/lib7d2/esp_common/stack_check.o
Compiling .pio/build/esp8266-d1mini/lib80b/heap/esp_heap_caps.o
Compiling .pio/build/esp8266-d1mini/lib80b/heap/esp_heap_trace.o
/home/danny/.platformio/packages/esp8266rtos/components/heap/src/esp_heap_caps.c: In function 'esp_heap_caps_init_region':
/home/danny/.platformio/packages/esp8266rtos/components/heap/src/esp_heap_caps.c:50:58: warning: pointer of type 'void *' used in arithmetic [-Wpointer-arith]
   50 |         if ((uint8_t *)mem_end != region[num].start_addr + region[num].total_size)
      |                                                          ^
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/adc.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/gpio.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/hspi_logic_layer.o
Archiving .pio/build/esp8266-d1mini/lib7d2/libesp_common.a
Indexing .pio/build/esp8266-d1mini/lib7d2/libesp_common.a
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/hw_timer.o
Archiving .pio/build/esp8266-d1mini/lib80b/libheap.a
Indexing .pio/build/esp8266-d1mini/lib80b/libheap.a
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/i2c.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/i2s.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/ir_rx.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/ir_tx.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/ledc.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/pwm.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/spi.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/driver/uart.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/backtrace.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/chip_boot.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/crc.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/esp_fast_boot.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/esp_fsleep.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/esp_sleep.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/esp_timer.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/esp_wifi.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/esp_wifi_os_adapter.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/ets_printf.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/hw_random.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/phy_init.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/reset_reason.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/rom.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/smartconfig.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/smartconfig_ack.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/startup.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/system_api.o
Compiling .pio/build/esp8266-d1mini/libc2b/esp8266/source/task_wdt.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/freertos/event_groups.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/freertos/list.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/freertos/queue.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/freertos/stream_buffer.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/freertos/tasks.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/freertos/timers.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/port/esp8266/freertos_hooks.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/port/esp8266/os_cpu_a.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/port/esp8266/panic.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/port/esp8266/port.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/port/esp8266/xtensa_context.o
Compiling .pio/build/esp8266-d1mini/lib8ec/freertos/port/esp8266/xtensa_vectors.o
Archiving /home/danny/.platformio/packages/esp8266rtos/lib/libdriver.a
Indexing /home/danny/.platformio/packages/esp8266rtos/lib/libdriver.a
Archiving .pio/build/esp8266-d1mini/libc2b/libesp8266.a
Indexing .pio/build/esp8266-d1mini/libc2b/libesp8266.a
Archiving .pio/build/esp8266-d1mini/lib8ec/libfreertos.a
Indexing .pio/build/esp8266-d1mini/lib8ec/libfreertos.a
Linking .pio/build/esp8266-d1mini/firmware.elf
Using built-in specs.
COLLECT_GCC=xtensa-lx106-elf-gcc
COLLECT_LTO_WRAPPER=/home/danny/.platformio/packages/toolchain-xtensa/bin/../libexec/gcc/xtensa-lx106-elf/10.3.0/lto-wrapper
Target: xtensa-lx106-elf
Configured with: /workdir/repo/gcc-gnu/configure --prefix=/workdir/xtensa-lx106-elf.x86_64 --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=xtensa-lx106-elf --disable-shared --with-newlib --enable-threads=no --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --disable-nls --disable-multilib --disable-bootstrap --enable-languages=c,c++ --enable-lto --enable-static=yes --disable-libstdcxx-verbose
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 10.3.0 (GCC) 
COMPILER_PATH=/home/danny/.platformio/packages/toolchain-xtensa/bin/../libexec/gcc/xtensa-lx106-elf/10.3.0/:/home/danny/.platformio/packages/toolchain-xtensa/bin/../libexec/gcc/:/home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/bin/
LIBRARY_PATH=/home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/:/home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/:/home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/
COLLECT_GCC_OPTIONS='-o' '.pio/build/esp8266-d1mini/firmware.elf' '-T' '/home/danny/src/esp8266/ESP8266_RTOS_SDK/components/esp8266/ld/esp8266.rom.ld' '-v' '-Os' '-e' 'call_start_cpu' '-L.pio/build/esp8266-d1mini' '-L/home/danny/.platformio/packages/esp8266rtos/components/esp8266/lib' '-L/home/danny/.platformio/packages/esp8266rtos/components/esp-wolfssl/wolfssl/lib'
 /home/danny/.platformio/packages/toolchain-xtensa/bin/../libexec/gcc/xtensa-lx106-elf/10.3.0/collect2 -plugin /home/danny/.platformio/packages/toolchain-xtensa/bin/../libexec/gcc/xtensa-lx106-elf/10.3.0/liblto_plugin.so -plugin-opt=/home/danny/.platformio/packages/toolchain-xtensa/bin/../libexec/gcc/xtensa-lx106-elf/10.3.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccu9y8Gv.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lsim -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lhandlers-sim -plugin-opt=-pass-through=-lhal -plugin-opt=-pass-through=-lgcc -o .pio/build/esp8266-d1mini/firmware.elf -e call_start_cpu crt1-sim.o /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/crt0.o /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/crti.o /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/crtbegin.o _vectors.o -L.pio/build/esp8266-d1mini -L/home/danny/.platformio/packages/esp8266rtos/components/esp8266/lib -L/home/danny/.platformio/packages/esp8266rtos/components/esp-wolfssl/wolfssl/lib -L/home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0 -L/home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc -L/home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib --no-check-sections -static --gc-sections .pio/build/esp8266-d1mini/src/main.o --start-group .pio/build/esp8266-d1mini/lib7d2/libesp_common.a .pio/build/esp8266-d1mini/lib80b/libheap.a .pio/build/esp8266-d1mini/libc2b/libesp8266.a .pio/build/esp8266-d1mini/lib8ec/libfreertos.a /home/danny/.platformio/packages/esp8266rtos/lib/libdriver.a -lwolfssl -lsmartconfig -lclk -lssc -lhal -lcore -lespnow -lnet80211 -lpp -lrtc -lphy -lgcc --end-group -lgcc -lc -lsim -lc -lhandlers-sim -lhal -lgcc /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/crtend.o /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/crtn.o -T /home/danny/src/esp8266/ESP8266_RTOS_SDK/components/esp8266/ld/esp8266.rom.ld
/home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/bin/ld: cannot find crt1-sim.o: No such file or directory
/home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/bin/ld: cannot find _vectors.o: No such file or directory
collect2: error: ld returned 1 exit status
*** [.pio/build/esp8266-d1mini/firmware.elf] Error 1
============================================== [FAILED] Took 0.97 seconds ==============================================

If I take the offending parts out of the last statement in the above, and just run the collect2 / ld command, then the output I get is :

/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/lib7d2/libesp_common.a(esp_err_to_name.o):(.bss.esp_image_spi_freq_t+0x0): multiple definition of `esp_image_spi_freq_t'; .pio/build/esp8266-d1mini/libc2b/libesp8266.a(startup.o):(.bss.esp_image_spi_freq_t+0x0): first defined here
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(startup.o):(.text.user_init_entry+0x0): undefined reference to `__init_array_start'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(startup.o):(.text.user_init_entry+0x4): undefined reference to `__init_array_end'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(startup.o):(.text.user_init_entry+0x24): undefined reference to `esp_pthread_init'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(startup.o):(.text.user_init_entry+0x28): undefined reference to `app_main'
[...]
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(system_api.o):(.text.store_backup_mac_data+0x30): undefined reference to `esp_log_write'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(system_api.o): in function `store_backup_mac_data':
system_api.c:(.text.store_backup_mac_data+0x6b): undefined reference to `nvs_open'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: system_api.c:(.text.store_backup_mac_data+0x7e): undefined reference to `nvs_set_blob'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: system_api.c:(.text.store_backup_mac_data+0x8f): undefined reference to `nvs_commit'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: system_api.c:(.text.store_backup_mac_data+0xa6): undefined reference to `esp_log_write'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(system_api.o):(.text.esp_mac_init+0x10): undefined reference to `nvs_flash_init'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(system_api.o):(.text.esp_mac_init+0x14): undefined reference to `esp_log_write'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(system_api.o):(.text.esp_mac_init+0x1f): undefined reference to `nvs_flash_init'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(system_api.o): in function `esp_mac_init':
system_api.c:(.text.esp_mac_init+0x5b): undefined reference to `esp_log_write'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(task_wdt.o):(.iram1.1+0x1c): undefined reference to `Cache_Read_Enable_New'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(task_wdt.o): in function `nmi_check_wd':
task_wdt.c:(.iram1.1+0x54): undefined reference to `Cache_Read_Enable_New'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/lib80b/libheap.a(esp_heap_caps.o):(.iram1.0+0x0): undefined reference to `g_heap_region'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/lib80b/libheap.a(esp_heap_caps.o):(.iram1.1+0x4): undefined reference to `g_heap_region'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(ets_printf.o):(.iram1.0+0x0): undefined reference to `FlashIsOnGoing'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(reset_reason.o):(.text.__esp_reset_reason_init+0x0): undefined reference to `rtc_sys_info'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(reset_reason.o):(.text.esp_reset_reason_set_hint+0x0): undefined reference to `rtc_sys_info'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(rom.o):(.text.uart_tx_wait_idle+0x0): undefined reference to `uart0'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(rom.o):(.text.uart_tx_wait_idle+0x4): undefined reference to `uart1'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/lib8ec/libfreertos.a(xtensa_vectors.o):(.literal+0x44): undefined reference to `Cache_Read_Enable_New'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/lib8ec/libfreertos.a(xtensa_vectors.o): in function `_panic_dump_reg':
(.text+0x418): undefined reference to `Cache_Read_Enable_New'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-assert.o):(.literal+0x10): undefined reference to `abort'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-assert.o): in function `__assert_func':
/workdir/repo/newlib/newlib/libc/stdlib/assert.c:58: undefined reference to `abort'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-wsetup.o):(.literal+0x0): undefined reference to `_free_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-wsetup.o): in function `__swsetup_r':
/workdir/repo/newlib/newlib/libc/stdio/wsetup.c:56: undefined reference to `_free_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-fflush.o): in function `__sflush_r':
/workdir/repo/newlib/newlib/libc/stdio/fflush.c:197: undefined reference to `_free_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-findfp.o):(.literal+0x18): undefined reference to `_malloc_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-findfp.o): in function `__sfmoreglue':
/workdir/repo/newlib/newlib/libc/stdio/findfp.c:132: undefined reference to `_malloc_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-fvwrite.o):(.literal+0xc): undefined reference to `_realloc_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-fvwrite.o): in function `__sfvwrite_r':
/workdir/repo/newlib/newlib/libc/stdio/fvwrite.c:145: undefined reference to `_malloc_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /workdir/repo/newlib/newlib/libc/stdio/fvwrite.c:156: undefined reference to `_realloc_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /workdir/repo/newlib/newlib/libc/stdio/fvwrite.c:162: undefined reference to `_free_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-makebuf.o):(.literal+0x0): undefined reference to `_fstat_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-makebuf.o): in function `__swhatbuf_r':
/workdir/repo/newlib/newlib/libc/stdio/makebuf.c:96: undefined reference to `_fstat_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-makebuf.o): in function `__smakebuf_r':
/workdir/repo/newlib/newlib/libc/stdio/makebuf.c:53: undefined reference to `_malloc_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o):(.literal+0x0): undefined reference to `_read_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o):(.literal+0x4): undefined reference to `_lseek_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o):(.literal+0x8): undefined reference to `_write_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o):(.literal+0xc): undefined reference to `_close_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o): in function `__sread':
/workdir/repo/newlib/newlib/libc/stdio/stdio.c:47: undefined reference to `_read_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o): in function `__swrite':
/workdir/repo/newlib/newlib/libc/stdio/stdio.c:86: undefined reference to `_lseek_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o): in function `__sseek':
/workdir/repo/newlib/newlib/libc/stdio/stdio.c:113: undefined reference to `_lseek_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(isatty.o): in function `_isatty_r':
/workdir/repo/newlib/newlib/libc/sys/xtensa/isatty.c:13: undefined reference to `_fstat_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-fclose.o): in function `_fclose_r':
/workdir/repo/newlib/newlib/libc/stdio/fclose.c:98: undefined reference to `_free_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /workdir/repo/newlib/newlib/libc/stdio/fclose.c:101: undefined reference to `_free_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /workdir/repo/newlib/newlib/libc/stdio/fclose.c:102: undefined reference to `_free_r'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/esp8266rtos/components/esp8266/lib/libpp.a(lmac.o):(.text.lmacProcessTxRtsError+0x14): undefined reference to `esp_log_write'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/esp8266rtos/components/esp8266/lib/libpp.a(lmac.o): in function `lmacProcessTxRtsError':
(.text.lmacProcessTxRtsError+0x73): undefined reference to `esp_log_write'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/esp8266rtos/components/esp8266/lib/libpp.a(lmac.o):(.text.lmacProcessTxError+0x14): undefined reference to `esp_log_write'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/esp8266rtos/components/esp8266/lib/libpp.a(lmac.o): in function `lmacProcessTxError':
(.text.lmacProcessTxError+0x78): undefined reference to `esp_log_write'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/esp8266rtos/components/esp8266/lib/libpp.a(wdev.o):(.text.wDev_ProcessFiq+0x110): undefined reference to `heap_caps_get_dram_free_size'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: /home/danny/.platformio/packages/esp8266rtos/components/esp8266/lib/libpp.a(wdev.o): in function `wDev_ProcessFiq':
(.text.wDev_ProcessFiq+0x373): undefined reference to `heap_caps_get_dram_free_size'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: (.text.wDev_ProcessFiq+0x476): undefined reference to `heap_caps_get_dram_free_size'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: (.text.wDev_ProcessFiq+0x76b): undefined reference to `heap_caps_get_dram_free_size'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(backtrace.o):(.text.prev_text_size+0x0): undefined reference to `_text_start'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(backtrace.o):(.text.prev_text_size+0x4): undefined reference to `_text_end'
/home/danny/src/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ld: .pio/build/esp8266-d1mini/libc2b/libesp8266.a(esp_sleep.o):(.text.cpu_reject_sleep+0x4): undefined reference to `GPIO'
collect2: error: ld returned 1 exit status

So you can see e.g. esp_log_write is not resolved because platformio fails to include the SDK component “log”.

Not demonstrated in the output above is that

// Make compatible to old SDK
#ifndef ICACHE_RODATA_ATTR
#define ICACHE_RODATA_ATTR
#endif

in ~/.platformio/packages/esp8266rtos/components/esp8266/include/esp_attr.h was missing the #ifndef construct, and this was broken by some definition in the toolchain I mentioned.
But never in earlier toolchains, such as the one recommended by Espressif.

I have to admit it’s the Espressif SDK that is more broken, but I find myself having to patch the two sources I need. Hmm.

Advice ?

Then get a local copy of it and retry with the real used toolchain. Remember you can use platform_packages with the symlink:// specifier to link to any local package. So just download the same toolchain that the Espressif SDK uses, put a package.json in it and link to it.

Just FYI, crt1 is the C runtime initialization and _vectors is the interrupt vector table, both relate to the startup of the microcontroller firmware.

Usually failures like this is related to link in a C library or a dependency of it, like --specs=nano.specs pulls in newlib-nano with a free (re-entrant) implementation.

What you absolutely need is the comparison with a regular Espressif SDK firmware build. Then you can compare the exact compiler commands and check if they’re equal or equivalent. Especially in regards to

  • which files are built (.c, .S, .cpp)
  • which files have preprocessing steps (like generated .h files or .ld linker scripts that have to run through the C preprocessor)
  • how the files are compiled (gcc / g++ flags)
  • how the files are linked (final ELF file, which linker script, which linker options, ..)

As usual I have trouble getting to work what I think you mean :frowning: .

victus: {13} cd xtensa-lx106-elf
victus: {14} pwd
/home/danny/src/esp8266/xtensa-lx106-elf
victus: {15} l
total 28
drwxr-xr-x 2 danny danny 4096 Sep 21  2020 bin
drwxr-xr-x 3 danny danny 4096 Sep 21  2020 include
drwxr-xr-x 4 danny danny 4096 Sep 21  2020 lib
drwxr-xr-x 3 danny danny 4096 Sep 21  2020 libexec
-rw-rw-r-- 1 danny danny  148 Feb  8 21:17 package.json
drwxr-xr-x 5 danny danny 4096 Sep 21  2020 share
drwxr-xr-x 7 danny danny 4096 Sep 21  2020 xtensa-lx106-elf
victus: {16} cat  package.json 
{
  "name": "esp8266compiler",
  "version": "0.1",
  "description": "Espressif ESP8266 recommended compiler toolchain",
  "license": "Apache-2.0"
}
victus: {17} 

and in the platformio dir (part of /home/danny/.platformio/platforms/esp8266rtos/platform.json) :

  "packages": {
    "esp8266compiler": {
      "type": "toolchain",
      "url": "symlink://home/danny/src/esp8266/xtensa-lx106-elf"
    },

and what I get :

victus: {1007} pio run
Processing esp8266-d1mini (platform: esp8266rtos; framework: esp8266rtos; board: d1_mini)
------------------------------------------------------------------------------------------------------------------------
Tool Manager: Installing esp8266compiler
UnknownPackageError: Could not find the package with 'esp8266compiler' requirements for your system 'linux_x86_64'
victus: {1008} 

No url but version. Look at all those references I posted earlier, example.