Linking issue with Bluefruit library #177 on adafruit_feather_m0_usb

I am trying to build a project using the Adafruit Feather M0 Bluefruit LE using 3.0.0a6. I tried to include the Adafruit BluefruitLE nRF51 library and I get a linker error.

I think the linker error is due to the fact that utility\Adafruit_FIFO.cpp is not built and included in the link.

The relevant code snippet:

#include <Adafruit_BluefruitLE_SPI.h>
//...
#define BLUEFRUIT_SPI_CS    8
#define BLUEFRUIT_SPI_IRQ   7
#define BLUEFRUIT_SPI_RST   4    // Optional but recommended, set to -1 if unused
//...
/* ...hardware SPI, using SCK/MOSI/MISO hardware SPI pins and then user selected CS/IRQ/RST */
Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);

The error output:

.pioenvs/adafruit_feather_m0_usb/lib/libAdafruit BluefruitLE nRF51.a(Adafruit_BluefruitLE_SPI.o): In function `Adafruit_BluefruitLE_SPI::flush()':
/Users/blake/Source/bcr/Motobuddy/.piolibdeps/Adafruit BluefruitLE nRF51_ID177/Adafruit_BluefruitLE_SPI.cpp:480: undefined reference to `Adafruit_FIFO::clear()'
.pioenvs/adafruit_feather_m0_usb/lib/libAdafruit BluefruitLE nRF51.a(Adafruit_BluefruitLE_SPI.o): In function `Adafruit_BluefruitLE_SPI::Adafruit_BluefruitLE_SPI(signed char, signed char, signed char)':
/Users/blake/Source/bcr/Motobuddy/.piolibdeps/Adafruit BluefruitLE nRF51_ID177/Adafruit_BluefruitLE_SPI.cpp:61: undefined reference to `Adafruit_FIFO::Adafruit_FIFO(void*, unsigned short, unsigned char, bool)'
.pioenvs/adafruit_feather_m0_usb/lib/libAdafruit BluefruitLE nRF51.a(Adafruit_BluefruitLE_SPI.o): In function `Adafruit_BluefruitLE_SPI::simulateSwitchMode()':
/Users/blake/Source/bcr/Motobuddy/.piolibdeps/Adafruit BluefruitLE nRF51_ID177/Adafruit_BluefruitLE_SPI.cpp:187: undefined reference to `Adafruit_FIFO::write(void const*)'
/Users/blake/Source/bcr/Motobuddy/.piolibdeps/Adafruit BluefruitLE nRF51_ID177/Adafruit_BluefruitLE_SPI.cpp:188: undefined reference to `Adafruit_FIFO::write_n(void const*, unsigned short)'
.pioenvs/adafruit_feather_m0_usb/lib/libAdafruit BluefruitLE nRF51.a(Adafruit_BluefruitLE_SPI.o): In function `Adafruit_BluefruitLE_SPI::getResponse()':
/Users/blake/Source/bcr/Motobuddy/.piolibdeps/Adafruit BluefruitLE nRF51_ID177/Adafruit_BluefruitLE_SPI.cpp:509: undefined reference to `Adafruit_FIFO::write_n(void const*, unsigned short)'
.pioenvs/adafruit_feather_m0_usb/lib/libAdafruit BluefruitLE nRF51.a(Adafruit_BluefruitLE_SPI.o): In function `Adafruit_BluefruitLE_SPI::read()':
/Users/blake/Source/bcr/Motobuddy/.piolibdeps/Adafruit BluefruitLE nRF51_ID177/Adafruit_BluefruitLE_SPI.cpp:417: undefined reference to `Adafruit_FIFO::read(void*)'
/Users/blake/Source/bcr/Motobuddy/.piolibdeps/Adafruit BluefruitLE nRF51_ID177/Adafruit_BluefruitLE_SPI.cpp:434: undefined reference to `Adafruit_FIFO::read(void*)'
.pioenvs/adafruit_feather_m0_usb/lib/libAdafruit BluefruitLE nRF51.a(Adafruit_BluefruitLE_SPI.o): In function `Adafruit_BluefruitLE_SPI::peek()':
/Users/blake/Source/bcr/Motobuddy/.piolibdeps/Adafruit BluefruitLE nRF51_ID177/Adafruit_BluefruitLE_SPI.cpp:451: undefined reference to `Adafruit_FIFO::peek(void*)'
/Users/blake/Source/bcr/Motobuddy/.piolibdeps/Adafruit BluefruitLE nRF51_ID177/Adafruit_BluefruitLE_SPI.cpp:468: undefined reference to `Adafruit_FIFO::peek(void*)'

I think that this may be a library packaging or a PlatformIO problem, opening the discussion here in case I’m doing something silly.

Please use the latest development version platformio upgrade.

No change in behavior after updating to a7 and erasing all PlatformIO directories:

Blakes-MacBook:Motobuddy blake$ sudo platformio upgrade
Password:
Please wait while upgrading PlatformIO ...
PlatformIO has been successfully upgraded to 3.0.0a7
Release notes: http://docs.platformio.org/en/stable/history.html
Blakes-MacBook:Motobuddy blake$ platformio run
Please wait while upgrading PlatformIO ...
Updating atmelsam @ 0.1.3: 	[Up-to-date]
Updating framework-arduinosam @ 1.10608.3: 	[Up-to-date]
Updating tool-bossac @ 1.10601.0: 	[Up-to-date]
Updating toolchain-gccarmnoneeabi @ 1.40804.0: 	[Up-to-date]
Updating tool-scons @ 2.4.1: 	[Up-to-date]
PlatformIO has been successfully upgraded to 3.0.0a7!
...
Blakes-MacBook:Motobuddy blake$ rm -rf ~/.platformio
Blakes-MacBook:Motobuddy blake$ rm -rf .piolibdeps
Blakes-MacBook:Motobuddy blake$ rm -rf .pioenvs

I can check in the code to GitHub or provide the full output if it’s helpful. There is a lot of output and I didn’t want to abuse the forums if that’s a no-no.

https://github.com/bcr/Motobuddy/tree/bluetooth-enable and Travis CI - Test and Deploy Your Code with Confidence may be helpful.

This is a bug. Thanks a lot! I’ve just fixed it. Please pio upgrade to 3.0.0a8.

Looks fixed on my local machine. Thanks again for the help!