Issue while building the project:

Hello,

I was trying to run TFLM custom code on Thingy:53 device and while building I have faced these warnings.

1. Could you please help me to understand Why I am facing these warning?

2. How can I Remove solve these problems?

Regards,

Divya

Parents Reply
  • Hi Divya,

    You need to add the files to the project. For the header files you add the directory the files are in with zephyr_library_include_directories, and for the source files you add the files themselves to target_sources, for example:

    target_sources(app PRIVATE
        src/main.c
        src/<custom_file>
    )
    
    zephyr_library_include_directories(src)

    Where you change <custom_file> to the filename of your source file.

    After you do a pristine build after adding this you should see the files in the nRF Connect extension in VS Code.

    Best regards,

    Marte

Children
  • Thanks for the quick reply.

    Actually I want to add a.cc file in the src folder and then want to call inside the main.c file.

    But it is showing an error that : No Sorce given to the target: app cmake in line 418. So, what should I do to include a .cc file inside main.c file.

    Does calling a C++ file inside a C is really support by Thingy?

    If not then is there any possibilty to build and Flash Thingy with a C++ file like main.cc in place of main.c?

    Regards,

    Divya

  • Hi Divya,

    Are you trying to include the C++ file directly or through a header file? You cannot include source files, so you must include the header file in main.c.

    Also, you cannot use C++ code in C files. If you put a C function (from your C++ file) in an extern "C" block in your header file, then you can use it in your C file, but you cannot use C++ classes and many other C++ features in a C file. If you search online you will be able to find a lot of information about this, and about how to use extern "C". If you want to use C++ features then you should have your main file as a C++ file instead of C. This is for example done for Matter samples in nRF Connect SDK, so you can look there for examples (nrf/samples/matter).

    Best regards,

    Marte

  • Hello Marte,

    I have followed the same solution as you have mentioned above, I will explore more about the matter example. Thank you for sharing.

    Now after adding C++ header file along with other header files I am facing some issues. it seems like I am not able to add libraries from other folder.

    So, I have cloned a repository inside the src directory in a separate folder named tensorflow inside "src" and it is showing me the error like:

    As you mentioned earlier I can add all the extra file in the CMakelist.txt. So, I have added them like:

    can you please help me why I am not able to access the header file inside the tensorflow folder? I have checked and verified that these files are at the mentioned location.

    Regards,

    Divya

  • Hello Marte, 

    I guess I might know the problem now but still I am confuse with adding the a folder inside src folder. 

    I followed the steps as mentioned in this link here:

    devzone.nordicsemi.com/.../392032

    but the problem is still not resolved. I can not access the folder that I have added inside the src.

    Do you think writing the CMakelist like this is fine?

    Regards,

    Divya

  • Hi Divya,

    You need to add the actual path to the source files and to the directory where the header file is. Additionally, you should not add the header files to target_sources, only the source files. For the header files you should add the directory they are in to zephyr_include_directories.

    For example:

    target_sources(app PRIVATE
        src/main.c
        src/tensorflow/lite/micro/micro_error_reporter.cc
        src/tensorflow/lite/micro/micro_interpreter.cc
        src/tensorflow/lite/schema/schema_generated.cc
    )
    
    zephyr_library_include_directories(
        src/tensorflow/lite/micro
        src/tensorflow/lite/schema
    )

    Here I have just guessed the file names and paths from your pictures to give you an example. You must use the actual file names and paths of your files.

    With this you only need the filename in the #include in your main file, and not the whole path:

    #include "micro_error_reporter.h"

    #include "micro_interpreter.h"

    etc.

    Best regards,

    Marte

Related