Merge branch 'bugfix/cmake_convert_whitespace_v4.1' into 'release/v4.1'

cmake: Minor convert_to_cmake.py fixes (v4.1)

See merge request espressif/esp-idf!7875
This commit is contained in:
Angus Gratton 2020-03-06 14:58:14 +08:00
commit 408d1d9f93
2 changed files with 17 additions and 5 deletions

View file

@ -1520,6 +1520,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

@ -78,14 +78,14 @@ def get_component_variables(project_path, component_path):
return None return None
srcs = [] srcs = []
for obj in make_vars["COMPONENT_OBJS"].split(" "): for obj in make_vars["COMPONENT_OBJS"].split():
src = find_src(obj) src = find_src(obj)
if src is not None: if src is not None:
srcs.append(src) srcs.append(src)
make_vars["COMPONENT_SRCS"] = " ".join(srcs) make_vars["COMPONENT_SRCS"] = " ".join(srcs)
else: else:
component_srcs = list() component_srcs = list()
for component_srcdir in make_vars.get("COMPONENT_SRCDIRS", ".").split(" "): for component_srcdir in make_vars.get("COMPONENT_SRCDIRS", ".").split():
component_srcdir_path = os.path.abspath(os.path.join(component_path, component_srcdir)) component_srcdir_path = os.path.abspath(os.path.join(component_path, component_srcdir))
srcs = list() srcs = list()
@ -114,7 +114,9 @@ def convert_project(project_path):
if "PROJECT_NAME" not in project_vars: if "PROJECT_NAME" not in project_vars:
raise RuntimeError("PROJECT_NAME does not appear to be defined in IDF project Makefile at %s" % project_path) raise RuntimeError("PROJECT_NAME does not appear to be defined in IDF project Makefile at %s" % 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:
@ -122,7 +124,7 @@ def convert_project(project_path):
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():