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

Compliation Error when Compiling for ESP32 #700

Open stefansal opened 3 weeks ago

stefansal commented 3 weeks ago

I am successfully able to compile for the ESP8266, however when trying to compile for the ESP32 I am getting the following errors. I have updated the library (1.9.7) and boards (esp32 Version 3.0.4) to the latest versions. I think there is an incompatibility with ESP32 in its current version. I am using Arduino 2.3.2 on Windows 11 with an ESP32 (DOIT ESP32 DEVKIT V1).

`In file included from c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioGeneratorMIDI.cpp:69: c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\libtinysoundfont/tsf.h: In function 'void tsf_channel_midi_control(tsf, int, int, int)': c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\libtinysoundfont/tsf.h:2100:1: error: insn does not satisfy its constraints: 2100 | } | ^ (insn 883 353 354 51 (set (reg:SF 19 f0 [371]) (mem/u/c:SF (symbol_ref/u:SI (".LC223") [flags 0x2]) [0 S4 A32])) "c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\libtinysoundfont/tsf.h":2053:106 49 {movsf_internal} (nil)) during RTL pass: postreload c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\libtinysoundfont/tsf.h:2100:1: internal compiler error: in extract_constrain_insn, at recog.cc:2692 libbacktrace could not find executable to open Please submit a full bug report, with preprocessed source (by using -freport-bug). See https://gcc.gnu.org/bugs/ for instructions. In file included from c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceICYStream.h:31, from c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceICYStream.cpp:28: c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceHTTPStream.h:56:5: error: 'WiFiClient' does not name a type 56 | WiFiClient client; | ^~~~~~ c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceICYStream.cpp: In member function 'virtual bool AudioFileSourceICYStream::open(const char)': c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceICYStream.cpp:49:14: error: 'client' was not declared in this scope; did you mean 'Client'? 49 | http.begin(client, url); | ^~ | Client c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceICYStream.cpp: In member function 'virtual uint32_t AudioFileSourceICYStream::readInternal(void, uint32_t, bool)': c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceICYStream.cpp:118:3: error: 'WiFiClient' was not declared in this scope 118 | WiFiClient stream = http.getStreamPtr(); | ^~~~~~ c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceICYStream.cpp:118:15: error: 'stream' was not declared in this scope; did you mean 'std::io_errc::stream'? 118 | WiFiClient stream = http.getStreamPtr(); | ^~ | std::io_errc::stream In file included from c:\users\USER1\appdata\local\arduino15\packages\esp32\tools\esp-x32\2302\xtensa-esp32-elf\include\c++\12.2.0\ios:42, from c:\users\USER1\appdata\local\arduino15\packages\esp32\tools\esp-x32\2302\xtensa-esp32-elf\include\c++\12.2.0\ostream:38, from c:\users\USER1\appdata\local\arduino15\packages\esp32\tools\esp-x32\2302\xtensa-esp32-elf\include\c++\12.2.0\bits\unique_ptr.h:41, from c:\users\USER1\appdata\local\arduino15\packages\esp32\tools\esp-x32\2302\xtensa-esp32-elf\include\c++\12.2.0\memory:76, from C:\Users\USER1\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\libraries\HTTPClient\src/HTTPClient.h:34, from c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceICYStream.h:26: c:\users\USER1\appdata\local\arduino15\packages\esp32\tools\esp-x32\2302\xtensa-esp32-elf\include\c++\12.2.0\bits\ios_base.h:204:24: note: 'std::io_errc::stream' declared here 204 | enum class io_errc { stream = 1 }; | ^~ In file included from c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceHTTPStream.cpp:23: c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceHTTPStream.h:56:5: error: 'WiFiClient' does not name a type 56 | WiFiClient client; | ^~~~~~ c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceHTTPStream.cpp: In member function 'virtual bool AudioFileSourceHTTPStream::open(const char)': c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceHTTPStream.cpp:42:14: error: 'client' was not declared in this scope; did you mean 'Client'? 42 | http.begin(client, url); | ^~ | Client c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceHTTPStream.cpp: In member function 'virtual uint32_t AudioFileSourceHTTPStream::readInternal(void, uint32_t, bool)': c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceHTTPStream.cpp:105:3: error: 'WiFiClient' was not declared in this scope 105 | WiFiClient stream = http.getStreamPtr(); | ^~~~~~ c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceHTTPStream.cpp:105:15: error: 'stream' was not declared in this scope; did you mean 'std::io_errc::stream'? 105 | WiFiClient stream = http.getStreamPtr(); | ^~ | std::io_errc::stream In file included from c:\users\USER1\appdata\local\arduino15\packages\esp32\tools\esp-x32\2302\xtensa-esp32-elf\include\c++\12.2.0\ios:42, from c:\users\USER1\appdata\local\arduino15\packages\esp32\tools\esp-x32\2302\xtensa-esp32-elf\include\c++\12.2.0\ostream:38, from c:\users\USER1\appdata\local\arduino15\packages\esp32\tools\esp-x32\2302\xtensa-esp32-elf\include\c++\12.2.0\bits\unique_ptr.h:41, from c:\users\USER1\appdata\local\arduino15\packages\esp32\tools\esp-x32\2302\xtensa-esp32-elf\include\c++\12.2.0\memory:76, from C:\Users\USER1\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\libraries\HTTPClient\src/HTTPClient.h:34, from c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioFileSourceHTTPStream.h:26: c:\users\USER1\appdata\local\arduino15\packages\esp32\tools\esp-x32\2302\xtensa-esp32-elf\include\c++\12.2.0\bits\ios_base.h:204:24: note: 'std::io_errc::stream' declared here 204 | enum class io_errc { stream = 1 }; | ^~ c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioOutputI2S.cpp: In member function 'bool AudioOutputI2S::begin(bool)': c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioOutputI2S.cpp:168:9: error: 'esp_chip_info_t' was not declared in this scope 168 | esp_chip_info_t out_info; | ^~~~~~~ c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioOutputI2S.cpp:169:24: error: 'out_info' was not declared in this scope 169 | esp_chip_info(&out_info); | ^~~~ c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioOutputI2S.cpp:169:9: error: 'esp_chip_info' was not declared in this scope 169 | esp_chip_info(&out_info); | ^~~~~ c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioOutputI2S.cpp:232:28: error: 'I2S_MCLK_MULTIPLE_DEFAULT' was not declared in this scope; did you mean 'I2S_MCLK_MULTIPLE_512'? 232 | .mclk_multiple = I2S_MCLK_MULTIPLE_DEFAULT, // Unused | ^~~~~~~~~ | I2S_MCLK_MULTIPLE_512 c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioOutputSPDIF.cpp: In constructor 'AudioOutputSPDIF::AudioOutputSPDIF(int, int, int)': c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioOutputSPDIF.cpp:108:22: error: 'I2S_MCLK_MULTIPLE_DEFAULT' was not declared in this scope; did you mean 'I2S_MCLK_MULTIPLE_512'? 108 | .mclk_multiple = I2S_MCLK_MULTIPLE_DEFAULT, // Unused | ^~~~~~~~~ | I2S_MCLK_MULTIPLE_512 c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioOutputSPDIF.cpp: In member function 'virtual bool AudioOutputSPDIF::SetRate(int)': c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioOutputSPDIF.cpp:186:26: error: too many arguments to function 'void rtc_clk_apll_enable(bool)' 186 | rtc_clk_apll_enable(1, 28, 8, 5, 0); | ~~~~~^~~~~~ In file included from c:\Users\USER1\Documents\Arduino\libraries\ESP8266Audio\src\AudioOutputSPDIF.cpp:45: C:\Users\USER1\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-b6b4727c58\esp32/include/soc/esp32/include/soc/rtc.h:242:6: note: declared here 242 | void rtc_clk_apll_enable(bool enable); | ^~~~~~~ Multiple libraries were found for "SD.h" Used: C:\Users\USER1\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\libraries\SD Not used: C:\Users\USER1\AppData\Local\Arduino15\libraries\SD Not used: C:\Users\USER1\Documents\Arduino\libraries\SD exit status 1

Compilation error: exit status 1`

SteveNotSet commented 1 week ago

Try this in AudioGeneratorMIDI.cpp:

pragma GCC optimize ("O2")

The default value is O3. I tried changing it to O2 and force compiling on ESP32 GCC>8, it just works.