PlatformIO Community

LDF doesn't see header file in installed library


#1

I want to use the FatFS library in my project. I installed it, by adding it to the lib_deps in the configuration file. It installed successfully (afaik).

Upon building it throws errors like: inc/main.h:56:10: fatal error: ff_gen_drv.h: No such file or directory

Why doesn’t it find the header file? It is referenced from my projects header file (main.h). And the file certainly is in the <PIO-project-root>/.piolibdeps/FatFs_ID1805/src/ folder.

I tried changing lib_ldf_mode to all possible values - still doesn’t help. What should I try next?

My platformio.ini file:

[platformio]
env_default = disco_f746ng
build_dir = pio_builds
include_dir = inc

[env:disco_f746ng]
platform = ststm32
board = disco_f746ng
framework = stm32cube
lib_extra_dirs = 
    /home/jure/Projects/ARMdev_stuff/STM32Cube_FW_F7_V1.11.0/Drivers/BSP
upload_protocol = stlink
lib_deps =
    FatFS

And project structure:


#2

One workaround to make LDF see the missing header file is adding the path manually via build flags.
I added this line to my platformio.ini:

build_flags = 
    -I/home/jure/Projects/ARMdev_stuff/Examples/FatFS_uSD_example/.piolibdeps/FatFs_ID1805/src

Then it found the file, but still didn’t compile.

QUESTION 1: Shouldn’t LDF automatically find files, since I installed the library “the official” way via Library Manager? Doesn’t it automatically look in the library’s src/ folder? Is the library.json problematic in this case? What is the best thing to do in this case (my workaround doesn’t seem like the prettiest/permanent solution)

Next problem I noticed was that IntelliSense could not open main.h (or any other file that was inside my projects inc/ folder). That’s why I added also my projects include folder to platformio.ini manually:

build_flags = 
    -I/home/jure/Projects/ARMdev_stuff/Examples/FatFS_uSD_example/inc
    -I/home/jure/Projects/ARMdev_stuff/Examples/FatFS_uSD_example/.piolibdeps/FatFs_ID1805/src

Then the IntelliSense issue was resolved, but I still couldn’t build the project successfully.
QUESTION 2: Since the beginning I had the include_dir = inc option added to my configuration file. Shouldn’t this take care of IntelliSense paths also? Why do I have to add this manually?

If I try to build the project at this point, I get lots of errors of this kind:
.piolibdeps/FatFs_ID1805/src/ff_gen_drv.h:83:3: error: unknown type name 'uint8_t'

Any idea how should I approach this problem?


#3

In the repository I don’t see the ff_gen_drv.h and its included file include the relevant header file stdint.h for uint8_t. integer.h imports a bunch / delcares a bunch of Windows-style integer types. A #include <stdint.h> at the start of gg_gen_drv.h should fix that.

For the other issue: I experienced this myself sometimes but never bothered to know why. Now that we have a concrete case I’d also like to know why it does not auto-include (-I) the src folder.


#4

But the file ff_gen_drv.h is in the repository:

And adding #include <stdint.h> indeed does solve the problem.

There’s still one problem left:

In file included from src/sd_diskio.c:47:0:
.piolibdeps/FatFs_ID1805/src/ff_gen_drv.h:88:3: error: unknown type name '__IO'

This seems to be somehow related to CMSIS headers, if I try to include the file where the __IO is defined manually (core_cm7.h from cube_root/Drivers/CMSIS/Include/) i get tons of errors like:

In file included from src/sd_diskio.c:47:0:
.piolibdeps/FatFs_ID1805/src/ff_gen_drv.h:88:3: error: unknown type name '__IO'

I don’t see an end to this >.< Since I mentioned several problem, should I open some issues here in PIO Community or maybe Git hub? Where exactly?


#5

You read my sentence wrong / I didn’t write it carefully enough: I meant I did that these files and its children include stdint.h, I did indeed see ff_gen_drv.h file.

For me __IO leads to cmsis/TARGET_CORTEX_M/core_cm4.h with

#define     __IO    volatile             /*!< Defines 'read / write' permissions */

The file should be included by #include <cmsis.h> (should go down the rabbit hole to core_cm4.h, so try this maybe.

I’ll investigate the library later, but if it’s a library issue and it doesn’t compile on pretty much all platforms, a issue in the library’s github should be filed.


#6

Aah my mistake, I copied the wrong error message. After I include the core_cm7.h (because I’m working on STM32F746 discovery board, I’m pretty sure thats the right one) it gives me bunch of errors like this one:

/home/jure/.platformio/packages/framework-stm32cube/f7/Drivers/CMSIS/Include/core_cm7.h:1834:37: error: unknown type name 'IRQn_Type'; did you mean 'ITM_Type'?
__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
^~~~~~~~~
ITM_Type

After you check it, please let me know if I should fill the git issue or link yours if you will do it - if that is fine with you?
Thanks alot for helping out!


PIO library doesn't see header files in project's include folder
#7

Tried including cmsis.h (all variants) -> still throws ton of errors…

BTW: I didn’t actually find cmsis.h library but rather cmsis_gcc.h, cmsis_armcc.h and cmsis_armcc_V6.h