cmake: Add warnings that convert_to_cmake.py doesn't calculate component requirements

Any component which requires another component will need this manually
added to its CMakeLists.txt file.
This commit is contained in:
Angus Gratton 2019-12-20 10:28:41 +11:00 committed by Angus Gratton
parent ee8557f69d
commit 8887f79bef
2 changed files with 14 additions and 2 deletions

View file

@ -1488,6 +1488,8 @@ The tool will convert the project Makefile and any component ``component.mk`` fi
It does so by running ``make`` to expand the ESP-IDF build system variables which are set by the build, and then producing equivalent CMakelists files to set the same variables. It does so by running ``make`` to expand the ESP-IDF build system variables which are set by the build, and then producing equivalent CMakelists files to set the same variables.
.. important:: When the conversion tool converts a ``component.mk`` file, it doesn't determine what other components that component depends on. This information needs to be added manually by editing the new component ``CMakeLists.txt`` file and adding ``REQUIRES`` and/or ``PRIV_REQUIRES`` clauses. Otherwise, source files in the component will fail to compile as headers from other components are not found. See :ref:`component requirements`.
The conversion tool is not capable of dealing with complex Makefile logic or unusual targets. These will need to be converted by hand. The conversion tool is not capable of dealing with complex Makefile logic or unusual targets. These will need to be converted by hand.
No Longer Available in CMake No Longer Available in CMake

View file

@ -116,13 +116,15 @@ def convert_project(project_path):
component_paths = project_vars["COMPONENT_PATHS"].split() component_paths = project_vars["COMPONENT_PATHS"].split()
converted_components = 0
# Convert components as needed # Convert components as needed
for p in component_paths: for p in component_paths:
if "MSYSTEM" in os.environ: if "MSYSTEM" in os.environ:
cmd = ["cygpath", "-w", p] cmd = ["cygpath", "-w", p]
p = subprocess.check_output(cmd).strip() p = subprocess.check_output(cmd).strip()
convert_component(project_path, p) converted_components += convert_component(project_path, p)
project_name = project_vars["PROJECT_NAME"] project_name = project_vars["PROJECT_NAME"]
@ -143,6 +145,13 @@ include($ENV{IDF_PATH}/tools/cmake/project.cmake)
print("Converted project %s" % project_cmakelists) print("Converted project %s" % project_cmakelists)
if converted_components > 0:
print("Note: Newly created component CMakeLists.txt do not have any REQUIRES or PRIV_REQUIRES "
"lists to declare their component requirements. Builds may fail to include other "
"components' header files. If so requirements need to be added to the components' "
"CMakeLists.txt files. See the 'Component Requirements' section of the "
"Build System docs for more details.")
def convert_component(project_path, component_path): def convert_component(project_path, component_path):
if debug: if debug:
@ -150,7 +159,7 @@ def convert_component(project_path, component_path):
cmakelists_path = os.path.join(component_path, "CMakeLists.txt") cmakelists_path = os.path.join(component_path, "CMakeLists.txt")
if os.path.exists(cmakelists_path): if os.path.exists(cmakelists_path):
print("Skipping already-converted component %s..." % cmakelists_path) print("Skipping already-converted component %s..." % cmakelists_path)
return return 0
v = get_component_variables(project_path, component_path) v = get_component_variables(project_path, component_path)
# Look up all the variables before we start writing the file, so it's not # Look up all the variables before we start writing the file, so it's not
@ -173,6 +182,7 @@ def convert_component(project_path, component_path):
f.write("target_compile_options(${COMPONENT_LIB} PRIVATE %s)\n" % cflags) f.write("target_compile_options(${COMPONENT_LIB} PRIVATE %s)\n" % cflags)
print("Converted %s" % cmakelists_path) print("Converted %s" % cmakelists_path)
return 1
def main(): def main():