earlephilhower / ESP8266Audio

Arduino library to play MOD, WAV, FLAC, MIDI, RTTTL, MP3, and AAC files on I2S DACs or with a software emulated delta-sigma DAC on the ESP8266 and ESP32
GNU General Public License v3.0
2.01k stars 432 forks source link

Fix build support gcc8 for other arch #567

Closed shuai132 closed 2 years ago

shuai132 commented 2 years ago

See: https://github.com/earlephilhower/ESP8266Audio/pull/502

Tested on toolchain-riscv32-esp @ 8.4.0+2021r2-patch3

earlephilhower commented 2 years ago

@shuai132 the ESP32 build is still busted with a GCC bug:

In file included from /home/runner/work/ESP8266Audio/ESP8266Audio/libraries/ESP8266Audio/src/AudioGeneratorMIDI.cpp:69:
/home/runner/work/ESP8266Audio/ESP8266Audio/libraries/ESP8266Audio/src/libtinysoundfont/tsf.h: In function 'void tsf_channel_midi_control(tsf*, int, int, int)':
/home/runner/work/ESP8266Audio/ESP8266Audio/libraries/ESP8266Audio/src/libtinysoundfont/tsf.h:2101:1: error: insn does not satisfy its constraints:
 }
 ^
(insn 858 342 343 51 (set (reg:SF 19 f0 [407])
        (mem/u/c:SF (symbol_ref/u:SI ("*.LC248") [flags 0x2]) [0  S4 A32])) "/home/runner/work/ESP8266Audio/ESP8266Audio/libraries/ESP8266Audio/src/libtinysoundfont/tsf.h":2054 47 {movsf_internal}
     (nil))
during RTL pass: postreload

Can you add a check for XTENSA to the condition, instead of looking the the patch level? Like:

#if (__GNUC__ == 8) && defined(__XTENSA__)
shuai132 commented 2 years ago

@earlephilhower Good idea, I just tested on ESP32C3 toolchain before, which is 10.x.

And my esp32 toolchain(maybe latest) seems still 8.x:

echo | ./xtensa-esp32-elf-gcc -dM -E - | grep GNU
#define __GNUC_PATCHLEVEL__ 0
#define __GNUC__ 8
#define __GNUC_STDC_INLINE__ 1
#define __GNUC_MINOR__ 4
shuai132 commented 2 years ago

Thanks, risc-v gcc 8.4 works now!

➜  ./riscv32-esp-elf-gcc --version
riscv32-esp-elf-gcc (crosstool-NG esp-2021r2-patch3) 8.4.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
shuai132 commented 2 years ago

I'm using platformio, I tested my ESP32, there is no build issues(I'm sure libtinysoundfont/tsf.h has be compiled):

Maybe only arduino has the compile error. @earlephilhower

PLATFORM: Espressif 32 (5.1.1+sha.4901957) > M5Stack Core2
HARDWARE: ESP32 240MHz, 4.31MB RAM, 16MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES: 
 - framework-arduinoespressif32 @ 3.20004.220818 (2.0.4) 
 - tool-esptoolpy @ 1.30300.0 (3.3.0) 
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch3

gcc in pio:

➜  .espressif tools/xtensa-esp32-elf/esp-2021r2-8.4.0/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc --version
xtensa-esp32-elf-gcc (crosstool-NG esp-2021r2) 8.4.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

gcc in Arduino:

➜  packages /Users/shuai/Library/Arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-97-gc752ad5-5.2.0/bin/xtensa-esp32-elf-gcc --version
xtensa-esp32-elf-gcc (crosstool-NG crosstool-ng-1.22.0-97-gc752ad5) 5.2.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

I download latest version Arduino and libs, I got a lot other error, I don't know a lot about Arduino IDE. And I guss there are some incompatible issues. Finally, I just test it for fun :) , I don't use Arduino IDE. If there is a bug, hope helpful.

/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp: In member function 'bool AudioOutputI2S::SetPinout()':
/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp:95:41: error: 'i2s_pin_config_t' has no non-static data member named 'mck_io_num'
         .data_in_num = I2S_PIN_NO_CHANGE};
                                         ^
/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp: In member function 'bool AudioOutputI2S::begin(bool)':
/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp:232:28: error: 'I2S_MCLK_MULTIPLE_DEFAULT' was not declared in this scope
           .mclk_multiple = I2S_MCLK_MULTIPLE_DEFAULT, // Unused
                            ^
/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp:233:28: error: 'I2S_BITS_PER_CHAN_DEFAULT' was not declared in this scope
           .bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT // Use bits per sample
                            ^
/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputI2S.cpp:234:7: error: 'i2s_config_t' has no non-static data member named 'mclk_multiple'
       };
       ^
/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp: In constructor 'AudioOutputSPDIF::AudioOutputSPDIF(int, int, int)':
/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp:108:22: error: 'I2S_MCLK_MULTIPLE_DEFAULT' was not declared in this scope
     .mclk_multiple = I2S_MCLK_MULTIPLE_DEFAULT, // Unused
                      ^
/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp:109:22: error: 'I2S_BITS_PER_CHAN_DEFAULT' was not declared in this scope
     .bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT // Use bits per sample
                      ^
/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp:110:3: error: 'i2s_config_t' has no non-static data member named 'mclk_multiple'
   };
   ^
/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp: In member function 'bool AudioOutputSPDIF::SetPinout(int, int, int)':
/Users/shuai/Documents/Arduino/libraries/ESP8266Audio/src/AudioOutputSPDIF.cpp:159:3: error: 'i2s_pin_config_t' has no non-static data member named 'mck_io_num'
   };
   ^
Multiple libraries were found for "SD.h"
 Used: /Users/shuai/Library/Arduino15/packages/esp32/hardware/esp32/1.0.6/libraries/SD
 Not used: /Applications/Arduino.app/Contents/Java/libraries/SD
Multiple libraries were found for "WiFiClient.h"
 Used: /Users/shuai/Library/Arduino15/packages/esp32/hardware/esp32/1.0.6/libraries/WiFi
 Not used: /Applications/Arduino.app/Contents/Java/libraries/WiFi
exit status 1
Error compiling for board ESP32 Dev Module.