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:
commit
408d1d9f93
2 changed files with 17 additions and 5 deletions
|
@ -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
|
||||||
|
|
|
@ -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():
|
||||||
|
|
Loading…
Reference in a new issue