Page 1 of 1

Cmake is not looking for components in EXTRA_COMPONENT_DIRS

Posted: Tue Mar 31, 2020 5:06 pm
by gunar.kroeger
This is our folder structure

Code: Select all

common
	minmea
	
project_a
	components
		GPS_logger
		...	
	main
project_b
	components
		GPS_visualizer
		...
I'm trying to make project_a and project_b search for the minmea component in "common" instead of having two copies to mantain.
I tried modifying the projects CMakeLists.txt as follows:

Code: Select all

# The following five lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.5)

set(EXTRA_COMPONENT_DIRS, "PROJECT_DIR/../common")

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(project_a)
but I'm getting an error

Code: Select all

⚠️ CMake Error at C:/Users/Gunar/esp-idf/tools/cmake/build.cmake:185 (message):
⚠️   Failed to resolve component 'minmea'.
Call Stack (most recent call first):
  C:/Users/Gunar/esp-idf/tools/cmake/build.cmake:211 (__build_resolve_and_add_req)
  C:/Users/Gunar/esp-idf/tools/cmake/build.cmake:425 (__build_expand_requirements)
  C:/Users/Gunar/esp-idf/tools/cmake/project.cmake:337 (idf_build_process)
  CMakeLists.txt:8 (project)


-- Configuring incomplete, errors occurred!
I'm running idf v4.0 in vs-code windows

Re: Cmake is not looking for components in EXTRA_COMPONENT_DIRS

Posted: Thu Apr 09, 2020 6:19 pm
by gunar.kroeger
Can someone help with this issue? I imagine it should be an easy fix, but I can't find the solution. :?

Re: Cmake is not looking for components in EXTRA_COMPONENT_DIRS

Posted: Fri Apr 10, 2020 4:51 am
by nvannote
While I am not familiar with the exact structure of your project and CMakeLists.txt files outside of the “brief” you shared; I will make an attempt.

In your original set statement...

Code: Select all

set(EXTRA_COMPONENT_DIRS, "PROJECT_DIR/../common")
Try changing that to something along the lines of...

Code: Select all

set(EXTRA_COMPONENT_DIRS "${PROJECT_DIR}/../common")
Or perhaps in the context of the dependent projects CMakeLists.txt…

Code: Select all

set(EXTRA_COMPONENT_DIRS "../common")
Depending on how “common” is structured. You may need to spell out “ common/minmea” in the above.

Also, I have never seen a comma as a separator in a set command, but perhaps it is valid.

Best Regards

Re: Cmake is not looking for components in EXTRA_COMPONENT_DIRS

Posted: Fri Apr 10, 2020 6:50 am
by nvannote
Ok,

I actually had a couple of projects that could benefit from the same scenario (shared custom component). To date, (being on a unix’y machine) I had just created a symbolic link to the shared component in each projects “components” directory and that works just fine.

So, I removed that and attempted to do it within the IDF idf.py/cmake methodology, and also skimmed the relevant documentation on how IDF uses cmake.

As far as I can tell, the relative path method seems to be the way to make that work in the absence of an absolute path. Turns out PROJECT_DIR is a IDF/cmake property and not a variable that is always present.

Code: Select all

set(EXTRA_COMPONENT_DIRS "../common/some_shared_component")
But I will let someone more familiar with how IDF uses CMake chime in.

Regards

Re: Cmake is not looking for components in EXTRA_COMPONENT_DIRS

Posted: Thu Apr 16, 2020 6:21 pm
by gunar.kroeger
nvannote wrote:
Fri Apr 10, 2020 6:50 am

Code: Select all

set(EXTRA_COMPONENT_DIRS "../common/some_shared_component")
I tried it this way, but get the same error. How should one link to the some_shared_component from inside the project components that REQUIRE it?

The way I thought it would work and that I think would be the most usefull is if:

1. look for components in the project componets folder
2. look for components in the EXTRA_COMPONENTS_DIRS
3. look for components in the idf

and if it finds components with the same name, it uses the one's with higher priority, so you could overwrite something without changing idf, or your own components library

Re: Cmake is not looking for components in EXTRA_COMPONENT_DIRS

Posted: Fri Apr 17, 2020 6:33 am
by nvannote
gunar.kroeger wrote:
Thu Apr 16, 2020 6:21 pm
I tried it this way, but get the same error. How should one link to the some_shared_component from inside the project components that REQUIRE it?

What may be different is in my case; in my primary projects "main" source directory CMakeLists.txt; I have following line.

The normal idf_component_register, followed by a target_compile_options.

Code: Select all

target_compile_options(${COMPONENT_LIB})
Regards

Re: Cmake is not looking for components in EXTRA_COMPONENT_DIRS

Posted: Fri Apr 24, 2020 8:01 pm
by gunar.kroeger
Can someone from the esp team explain how we are supposed to achieve this?
Just following the docs I could not make it work and nvannote's way did not work with our project, so how is the official way to include components that are not in the project folder?