espressif / esp-idf

Espressif IoT Development Framework. Official development framework for Espressif SoCs.
Apache License 2.0
13.63k stars 7.28k forks source link

ESP32 C3 clang15.0.0 build error with option "-g" (IDFGH-9171) #10567

Closed Jiu-xiao closed 1 year ago

Jiu-xiao commented 1 year ago

Answers checklist.

IDF version.

v5.1-dev-2926-g3df87a91a3

Operating System used.

Linux

How did you build your project?

Command line with CMake

If you are using Windows, please specify command line type.

None

What is the expected behavior?

我使用idf-as-lib的例程,但是将main.c更改为main.cpp。然后使用./build-esp32c3.sh编译,并且将脚本中的 PARAM="-DCMAKE_TOOLCHAIN_FILE=$IDF_PATH/tools/cmake/toolchain-${TARGET}.cmake -DTARGET=${TARGET} -GNinja" 更改为 PARAM="-DCMAKE_TOOLCHAIN_FILE=$IDF_PATH/tools/cmake/toolchain-clang-${TARGET}.cmake -DTARGET=${TARGET} -GNinja",编译成功,并没有出现问题。

What is the actual behavior?

但是我在我的CMakeLists.txt中加入add_compile_options(-g)之后,编译出现错误。我对比了两次编译生成的compile_commands.json文件,只有-g这一个参数有区别

Steps to reproduce.

复制官方的idf-as-lib工程,将main.c重命名为main.cpp。为app_main函数添加extern “C”修饰,然后将build.sh中的toolchain-${TARGET}.cmake更改为toolchain-clang-${TARGET}.cmake。运行./build-esp32c3.sh进行编译

Build or installation Logs.

╰─$ ./build-esp32c3.sh
-- The C compiler identification is Clang 15.0.0
-- The CXX compiler identification is Clang 15.0.0
-- The ASM compiler identification is Clang with GNU-like command-line
-- Found assembler: /home/xiao/.espressif/tools/esp-clang/15.0.0-23786128ae/esp-clang/bin/clang
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/xiao/.espressif/tools/esp-clang/15.0.0-23786128ae/esp-clang/bin/clang - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/xiao/.espressif/tools/esp-clang/15.0.0-23786128ae/esp-clang/bin/clang++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Git: /usr/bin/git (found version "2.34.1") 
-- Component directory /home/xiao/esp/esp-idf/components/tinyusb does not contain a CMakeLists.txt file. No component will be added
-- Checking Python dependencies...
Python requirements are satisfied.
Constraint file: /home/xiao/.espressif/espidf.constraints.v5.1.txt
Requirement files:
 - /home/xiao/esp/esp-idf/tools/requirements/requirements.core.txt
Python being checked: /home/xiao/.espressif/python_env/idf5.1_py3.10_env/bin/python
-- Project sdkconfig file /home/xiao/code/idf_as_lib/sdkconfig
CMake Warning at /home/xiao/esp/esp-idf/components/esp_common/project_include.cmake:14 (message):
  Building ESP-IDF with clang is an experimental feature and is not yet
  officially supported.
Call Stack (most recent call first):
  /home/xiao/esp/esp-idf/tools/cmake/build.cmake:400 (include)
  /home/xiao/esp/esp-idf/tools/cmake/build.cmake:622 (__build_process_project_includes)
  CMakeLists.txt:18 (idf_build_process)

-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of time_t
-- Check size of time_t - done
-- Found Python3: /home/xiao/.espressif/python_env/idf5.1_py3.10_env/bin/python3.10 (found version "3.10.6") found components: Interpreter 
-- App "idf_as_lib" version: 1
-- Adding linker script /home/xiao/code/idf_as_lib/build/esp-idf/esp_system/ld/memory.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_system/ld/esp32c3/sections.ld.in
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.api.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.libgcc.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.newlib.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.version.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.newlib-time.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.eco3.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/soc/esp32c3/ld/esp32c3.peripherals.ld
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xiao/code/idf_as_lib/build
[7/434] Generating ../../partition_table/partition-table.bin
Partition table binary generated. Contents:
*******************************************************************************
# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs,data,nvs,0x9000,24K,
phy_init,data,phy,0xf000,4K,
factory,app,factory,0x10000,1M,
*******************************************************************************
[392/434] Performing configure step for 'bootloader'
-- Found Git: /usr/bin/git (found version "2.34.1") 
-- Component directory /home/xiao/esp/esp-idf/components/tinyusb does not contain a CMakeLists.txt file. No component will be added
-- The C compiler identification is GNU 11.2.0
-- The CXX compiler identification is GNU 11.2.0
-- The ASM compiler identification is GNU
-- Found assembler: /home/xiao/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/riscv32-esp-elf-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/xiao/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/riscv32-esp-elf-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/xiao/.espressif/tools/riscv32-esp-elf/esp-2022r1-11.2.0/riscv32-esp-elf/bin/riscv32-esp-elf-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Building ESP-IDF components for target esp32c3
-- Project sdkconfig file /home/xiao/code/idf_as_lib/sdkconfig
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of time_t
-- Check size of time_t - done
-- Adding linker script /home/xiao/esp/esp-idf/components/soc/esp32c3/ld/esp32c3.peripherals.ld
-- App "bootloader" version: v5.1-dev-2926-g3df87a91a3
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.api.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.libgcc.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.newlib.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/bootloader/subproject/main/ld/esp32c3/bootloader.ld
-- Adding linker script /home/xiao/esp/esp-idf/components/bootloader/subproject/main/ld/esp32c3/bootloader.rom.ld
-- Components: bootloader bootloader_support efuse esp_app_format esp_common esp_hw_support esp_rom esp_system esptool_py freertos hal log main micro-ecc newlib partition_table riscv soc spi_flash
-- Component paths: /home/xiao/esp/esp-idf/components/bootloader /home/xiao/esp/esp-idf/components/bootloader_support /home/xiao/esp/esp-idf/components/efuse /home/xiao/esp/esp-idf/components/esp_app_format /home/xiao/esp/esp-idf/components/esp_common /home/xiao/esp/esp-idf/components/esp_hw_support /home/xiao/esp/esp-idf/components/esp_rom /home/xiao/esp/esp-idf/components/esp_system /home/xiao/esp/esp-idf/components/esptool_py /home/xiao/esp/esp-idf/components/freertos /home/xiao/esp/esp-idf/components/hal /home/xiao/esp/esp-idf/components/log /home/xiao/esp/esp-idf/components/bootloader/subproject/main /home/xiao/esp/esp-idf/components/bootloader/subproject/components/micro-ecc /home/xiao/esp/esp-idf/components/newlib /home/xiao/esp/esp-idf/components/partition_table /home/xiao/esp/esp-idf/components/riscv /home/xiao/esp/esp-idf/components/soc /home/xiao/esp/esp-idf/components/spi_flash
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xiao/code/idf_as_lib/build/bootloader
[427/434] Performing build step for 'bootloader'
[1/94] Generating project_elf_src_esp32c3.c
[2/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/lldesc.c.obj
[3/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/dport_access_common.c.obj
[4/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/adc_periph.c.obj
[5/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/dedic_gpio_periph.c.obj
[6/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/gdma_periph.c.obj
[7/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/gpio_periph.c.obj
[8/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/sdm_periph.c.obj
[9/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/interrupts.c.obj
[10/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/spi_periph.c.obj
[11/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/ledc_periph.c.obj
[12/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/i2s_periph.c.obj
[13/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/i2c_periph.c.obj
[14/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/rmt_periph.c.obj
[15/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/uart_periph.c.obj
[16/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/temperature_sensor_periph.c.obj
[17/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/twai_periph.c.obj
[18/94] Building C object CMakeFiles/bootloader.elf.dir/project_elf_src_esp32c3.c.obj
[19/94] Building C object esp-idf/soc/CMakeFiles/__idf_soc.dir/esp32c3/timer_periph.c.obj
[20/94] Building C object esp-idf/hal/CMakeFiles/__idf_hal.dir/mpu_hal.c.obj
[21/94] Building C object esp-idf/hal/CMakeFiles/__idf_hal.dir/cache_hal.c.obj
[22/94] Building C object esp-idf/esp_app_format/CMakeFiles/__idf_esp_app_format.dir/esp_app_desc.c.obj
[23/94] Building C object esp-idf/hal/CMakeFiles/__idf_hal.dir/efuse_hal.c.obj
[24/94] Building C object esp-idf/hal/CMakeFiles/__idf_hal.dir/esp32c3/efuse_hal.c.obj
[25/94] Building C object esp-idf/hal/CMakeFiles/__idf_hal.dir/mmu_hal.c.obj
[26/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_clock_init.c.obj
[27/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_mem.c.obj
[28/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_random.c.obj
[29/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_common_loader.c.obj
[30/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_random_esp32c3.c.obj
[31/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/secure_boot.c.obj
[32/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_common.c.obj
[33/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/flash_partitions.c.obj
[34/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_clock_loader.c.obj
[35/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/flash_encrypt.c.obj
[36/94] Building C object esp-idf/hal/CMakeFiles/__idf_hal.dir/wdt_hal_iram.c.obj
[37/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/bootloader_flash/src/bootloader_flash_config_esp32c3.c.obj
[38/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_console_loader.c.obj
[39/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_efuse.c.obj
[40/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_panic.c.obj
[41/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_console.c.obj
[42/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/esp32c3/bootloader_sha.c.obj
[43/94] Building C object esp-idf/efuse/CMakeFiles/__idf_efuse.dir/esp32c3/esp_efuse_table.c.obj
[44/94] Building C object esp-idf/efuse/CMakeFiles/__idf_efuse.dir/esp32c3/esp_efuse_fields.c.obj
[45/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/bootloader_flash/src/flash_qio_mode.c.obj
[46/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/esp32c3/bootloader_soc.c.obj
[47/94] Building C object esp-idf/efuse/CMakeFiles/__idf_efuse.dir/esp32c3/esp_efuse_rtc_calib.c.obj
[48/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_utility.c.obj
[49/94] Building C object esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/esp_memory_utils.c.obj
[50/94] Building C object esp-idf/efuse/CMakeFiles/__idf_efuse.dir/src/esp_efuse_fields.c.obj
[51/94] Building C object esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c3/rtc_pm.c.obj
[52/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/bootloader_init.c.obj
[53/94] Building C object esp-idf/efuse/CMakeFiles/__idf_efuse.dir/esp32c3/esp_efuse_utility.c.obj
[54/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/esp32c3/bootloader_esp32c3.c.obj
[55/94] Building C object esp-idf/esp_system/CMakeFiles/__idf_esp_system.dir/esp_err.c.obj
[56/94] Building C object esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/cpu.c.obj
[57/94] Building C object esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_crc.c.obj
[58/94] Building C object esp-idf/efuse/CMakeFiles/__idf_efuse.dir/src/esp_efuse_api.c.obj
[59/94] Building C object esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c3/rtc_clk_init.c.obj
[60/94] Building C object esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c3/chip_info.c.obj
[61/94] Building C object esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_sys.c.obj
[62/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/src/esp_image_format.c.obj
[63/94] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/bootloader_flash/src/bootloader_flash.c.obj
[64/94] Building C object esp-idf/efuse/CMakeFiles/__idf_efuse.dir/src/efuse_controller/keys/with_key_purposes/esp_efuse_api_key.c.obj
[65/94] Building C object esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_spiflash.c.obj
[66/94] Building C object esp-idf/esp_common/CMakeFiles/__idf_esp_common.dir/src/esp_err_to_name.c.obj
[67/94] Building C object esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c3/rtc_time.c.obj
[68/94] Building C object esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_systimer.c.obj
[69/94] Building C object esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_efuse.c.obj
[70/94] Building C object esp-idf/efuse/CMakeFiles/__idf_efuse.dir/src/esp_efuse_utility.c.obj
[71/94] Building C object esp-idf/esp_rom/CMakeFiles/__idf_esp_rom.dir/patches/esp_rom_uart.c.obj
[72/94] Building C object esp-idf/log/CMakeFiles/__idf_log.dir/log_noos.c.obj
[73/94] Building C object esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c3/rtc_init.c.obj
[74/94] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/bootloader_start.c.obj
[75/94] Building C object esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c3/rtc_sleep.c.obj
[76/94] Building C object esp-idf/esp_hw_support/CMakeFiles/__idf_esp_hw_support.dir/port/esp32c3/rtc_clk.c.obj
[77/94] Building C object esp-idf/log/CMakeFiles/__idf_log.dir/log.c.obj
[78/94] Building C object esp-idf/log/CMakeFiles/__idf_log.dir/log_buffers.c.obj
[79/94] Linking C static library esp-idf/log/liblog.a
[80/94] Linking C static library esp-idf/esp_rom/libesp_rom.a
[81/94] Linking C static library esp-idf/esp_common/libesp_common.a
[82/94] Linking C static library esp-idf/esp_hw_support/libesp_hw_support.a
[83/94] Linking C static library esp-idf/esp_system/libesp_system.a
[84/94] Linking C static library esp-idf/efuse/libefuse.a
[85/94] Linking C static library esp-idf/bootloader_support/libbootloader_support.a
[86/94] Linking C static library esp-idf/esp_app_format/libesp_app_format.a
[87/94] Linking C static library esp-idf/hal/libhal.a
[88/94] Building C object esp-idf/micro-ecc/CMakeFiles/__idf_micro-ecc.dir/uECC_verify_antifault.c.obj
[89/94] Linking C static library esp-idf/micro-ecc/libmicro-ecc.a
[90/94] Linking C static library esp-idf/soc/libsoc.a
[91/94] Linking C static library esp-idf/main/libmain.a
[92/94] Linking C executable bootloader.elf
[93/94] Generating binary image from built executable
esptool.py v4.5.dev2
Creating esp32c3 image...
Merged 1 ELF section
Successfully created esp32c3 image.
Generated /home/xiao/code/idf_as_lib/build/bootloader/bootloader.bin
[94/94] cd /home/xiao/code/idf_as_lib/build/bootloader/esp-idf/esptool_py && python /home/xiao/esp/esp-idf/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 /home/xiao/code/idf_as_lib/build/bootloader/bootloader.bin
Bootloader binary size 0x4ef0 bytes. 0x3110 bytes (38%) free.
[431/434] Building CXX object CMakeFiles/idf_as_lib.elf.dir/main.cpp.obj
FAILED: CMakeFiles/idf_as_lib.elf.dir/main.cpp.obj 
/home/xiao/.espressif/tools/esp-clang/15.0.0-23786128ae/esp-clang/bin/clang++  -I/home/xiao/esp/esp-idf/components/freertos/FreeRTOS-Kernel/include -I/home/xiao/esp/esp-idf/components/freertos/FreeRTOS-Kernel/portable/riscv/include -I/home/xiao/esp/esp-idf/components/freertos/esp_additions/include/freertos -I/home/xiao/esp/esp-idf/components/freertos/esp_additions/include -I/home/xiao/code/idf_as_lib/build/config -I/home/xiao/esp/esp-idf/components/newlib/platform_include -I/home/xiao/esp/esp-idf/components/esp_hw_support/include -I/home/xiao/esp/esp-idf/components/esp_hw_support/include/soc -I/home/xiao/esp/esp-idf/components/esp_hw_support/include/soc/esp32c3 -I/home/xiao/esp/esp-idf/components/esp_hw_support/port/esp32c3/. -I/home/xiao/esp/esp-idf/components/esp_hw_support/port/esp32c3/private_include -I/home/xiao/esp/esp-idf/components/heap/include -I/home/xiao/esp/esp-idf/components/log/include -I/home/xiao/esp/esp-idf/components/soc/include -I/home/xiao/esp/esp-idf/components/soc/esp32c3/. -I/home/xiao/esp/esp-idf/components/soc/esp32c3/include -I/home/xiao/esp/esp-idf/components/hal/esp32c3/include -I/home/xiao/esp/esp-idf/components/hal/include -I/home/xiao/esp/esp-idf/components/hal/platform_port/include -I/home/xiao/esp/esp-idf/components/esp_rom/include -I/home/xiao/esp/esp-idf/components/esp_rom/include/esp32c3 -I/home/xiao/esp/esp-idf/components/esp_rom/esp32c3 -I/home/xiao/esp/esp-idf/components/esp_common/include -I/home/xiao/esp/esp-idf/components/esp_system/include -I/home/xiao/esp/esp-idf/components/esp_system/port/soc -I/home/xiao/esp/esp-idf/components/esp_system/port/include/riscv -I/home/xiao/esp/esp-idf/components/esp_system/port/include/private -I/home/xiao/esp/esp-idf/components/riscv/include -I/home/xiao/esp/esp-idf/components/spi_flash/include --target=riscv32-esp-elf -march=rv32imc -mabi=ilp32  -g -std=gnu++17 -MD -MT CMakeFiles/idf_as_lib.elf.dir/main.cpp.obj -MF CMakeFiles/idf_as_lib.elf.dir/main.cpp.obj.d -o CMakeFiles/idf_as_lib.elf.dir/main.cpp.obj -c /home/xiao/code/idf_as_lib/main.cpp
/tmp/main-c6744c.s: Assembler messages:
/tmp/main-c6744c.s:5: Error: file number less than one
/tmp/main-c6744c.s:6: Error: junk at end of line, first unrecognized character is `"'
/tmp/main-c6744c.s:7: Error: junk at end of line, first unrecognized character is `"'
/tmp/main-c6744c.s:8: Error: junk at end of line, first unrecognized character is `"'
/tmp/main-c6744c.s:9: Error: junk at end of line, first unrecognized character is `"'
/tmp/main-c6744c.s:10: Error: junk at end of line, first unrecognized character is `"'
/tmp/main-c6744c.s:11: Error: junk at end of line, first unrecognized character is `"'
/tmp/main-c6744c.s:12: Error: junk at end of line, first unrecognized character is `"'
/tmp/main-c6744c.s:13: Error: junk at end of line, first unrecognized character is `"'
/tmp/main-c6744c.s:14: Error: junk at end of line, first unrecognized character is `"'
/tmp/main-c6744c.s:15: Error: junk at end of line, first unrecognized character is `"'
clang-15: error: assembler command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

More Information.

No response

gerekon commented 1 year ago

Hi @Jiu-xiao.

Could you explain in English how to reproduce the problem? What application do you build? What does you script ./build-esp32c3.sh actually do?

gerekon commented 1 year ago

Could you also share code of your /home/xiao/code/idf_as_lib/main.cpp?

Jiu-xiao commented 1 year ago

main.cpp

/*
 * SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: CC0-1.0
 */

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_system.h"
#include "esp_flash.h"

extern "C" void app_main(void)
{
    printf("Hello world!\n");

    /* Print chip information */
    esp_chip_info_t chip_info;
    uint32_t flash_size;
    esp_chip_info(&chip_info);
    printf("This is ESP32 chip with %d CPU cores, WiFi%s%s, ",
            chip_info.cores,
            (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
            (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");

    printf("silicon revision %d, ", chip_info.revision);
    if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
        printf("Get flash size failed");
        return;
    }

    printf("%dMB %s flash\n", flash_size / (1024 * 1024),
            (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");

    for (int i = 10; i >= 0; i--) {
        printf("Restarting in %d seconds...\n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    printf("Restarting now.\n");
    fflush(stdout);
    esp_restart();
}
Jiu-xiao commented 1 year ago

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)

project(idf_as_lib LANGUAGES C CXX ASM)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(targets "esp32" "esp32s2" "esp32s3" "esp32c3" "esp32h2" "esp32c2")

add_compile_options(--target=riscv32-esp-elf -march=rv32imc -mabi=ilp32 -gdwarf-4)

if("${TARGET}" IN_LIST targets)
    # Include for ESP-IDF build system functions
    include($ENV{IDF_PATH}/tools/cmake/idf.cmake)
    # Create idf::{target} and idf::freertos static libraries
    idf_build_process("${TARGET}"
                    # try and trim the build; additional components
                    # will be included as needed based on dependency tree
                    #
                    # although esptool_py does not generate static library,
                    # processing the component is needed for flashing related
                    # targets and file generation
                    COMPONENTS freertos esptool_py
                    SDKCONFIG ${CMAKE_CURRENT_LIST_DIR}/sdkconfig
                    BUILD_DIR ${CMAKE_BINARY_DIR})
else()
    message(WARNING "Unknown target ${TARGET}, creating stubs for esp32 instead")
    # Create stubs for esp32 and freertos, stub::esp32 and stub::freertos
    add_subdirectory(stubs/esp32)
    add_subdirectory(stubs/freertos)
    add_subdirectory(stubs/spi_flash)
endif()

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(elf_file ${CMAKE_PROJECT_NAME}.elf)
add_executable(${elf_file} main.cpp)

# Link the static libraries to the executable
if("${TARGET}" IN_LIST targets)
    target_link_libraries(${elf_file} idf::freertos idf::spi_flash)
    # Attach additional targets to the executable file for flashing,
    # linker script generation, partition_table generation, etc.
    idf_build_executable(${elf_file})
else()
    target_link_libraries(${elf_file} stub::esp32 stub::freertos stub::spi_flash)
endif()
Jiu-xiao commented 1 year ago

Hi @Jiu-xiao.

Could you explain in English how to reproduce the problem? What application do you build? What does you script ./build-esp32c3.sh actually do?

If I add add_compile_options(-g) in CMakeLists.txt, an error will be reported when I use clang to compile.

gerekon commented 1 year ago

Looks like you build hello_world example using your custom build script. I recommend you to use idf.py for building your app.

IDF_TOOLCHAIN=clang idf.py set-target esp32c3
IDF_TOOLCHAIN=clang idf.py build

The commands above pick up compiler settings from https://github.com/espressif/esp-idf/blob/master/tools/cmake/toolchain-clang-esp32c3.cmake

gerekon commented 1 year ago

I checked it. It has no problems with your main.cpp

gerekon commented 1 year ago

If I add add_compile_options(-g) in CMakeLists.txt, an error will be reported when I use clang to compile.

Unfortunately I can not build app with your CMakefile.txt. Looks like it does not work well with idf.py build. But when I use the commands above with -gdwarf-4 added to CMAKE_C_FLAGS, CMAKE_CXX_FLAGS and CMAKE_ASM_FLAGS it works well. Adding -g alone does not work because Clang 15 uses DWARF5 by default. GNU as has problem with it. Our current Clang toolchain uses riscv32-esp-elf-as as assembler, because integrated one is not well tested yet with IDF code.

Jiu-xiao commented 1 year ago

Fixed