From 029486e6406ac1673a6c1080fb1083e047c3138e Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Wed, 27 Jan 2021 19:39:53 -0800 Subject: [PATCH 01/12] Add FindPythonPackage and use it to detect memap dependencies --- CMakeLists.txt | 6 ++- tools/cmake/CheckPythonPackage.cmake | 69 ++++++++++++++++++++++++++++ tools/cmake/app.cmake | 13 ++++++ tools/cmake/python_packagecheck.py | 16 +++++++ 4 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 tools/cmake/CheckPythonPackage.cmake create mode 100644 tools/cmake/python_packagecheck.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 0dcb70c22ad..854552c840f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -198,7 +198,6 @@ endfunction() # Parse toolchain generated map file of `target` and display a readable table format. # function(mbed_generate_map_file target) - find_package (Python3) add_custom_command( TARGET ${target} @@ -234,7 +233,10 @@ endfunction() function(mbed_set_post_build target) mbed_validate_application_profile(${target}) mbed_generate_bin_hex(${target}) - mbed_generate_map_file(${target}) + + if(HAVE_MEMAP_DEPS) + mbed_generate_map_file(${target}) + endif() endfunction() # Ninja requires to be forced for response files diff --git a/tools/cmake/CheckPythonPackage.cmake b/tools/cmake/CheckPythonPackage.cmake new file mode 100644 index 00000000000..0db50fb82df --- /dev/null +++ b/tools/cmake/CheckPythonPackage.cmake @@ -0,0 +1,69 @@ +# Copyright (c) 2020 ARM Limited. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +# CMake functions for checking for Python packages +# Requires PYTHON_EXECUTABLE to be defined. Call FindPythonInterp first! + +# NOTE: if moving this file, be sure to also move python_packagecheck.py + +# must evaluate this now since CMAKE_CURRENT_LIST_DIR doesn't work in function scope +set(PYTHON_PACKAGECHECK_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/python_packagecheck.py) + +# set OUTPUT_VAR to whether PACKAGENAME was found +function(check_python_package PACKAGENAME OUTPUT_VAR) + + # can't have Python packages without Python! + if(NOT Python3_FOUND) + set(${OUTPUT_VAR} FALSE PARENT_SCOPE) + return() + endif() + + set(NEED_TO_RUN_CHECK TRUE) + + if(DEFINED ${OUTPUT_VAR}) + if(${OUTPUT_VAR}) + + # if the python interpreter changed, we need to recheck + if("${PY_INTERP_FOR_${OUTPUT_VAR}}" STREQUAL "${Python3_EXECUTABLE}") + set(NEED_TO_RUN_CHECK FALSE) + endif() + + endif() + endif() + + if(NEED_TO_RUN_CHECK) + set(PY_INTERP_FOR_${OUTPUT_VAR} ${Python3_EXECUTABLE} CACHE INTERNAL "The python interpreter used to run the ${OUTPUT_VAR} check" FORCE) + + execute_process(COMMAND ${Python3_EXECUTABLE} ${PYTHON_PACKAGECHECK_SCRIPT} ${PACKAGENAME} + RESULT_VARIABLE PACKAGECHECK_RESULT) + + if(${PACKAGECHECK_RESULT} EQUAL 0) + set(HAVE_PACKAGE TRUE) + else() + set(HAVE_PACKAGE FALSE) + endif() + + if(HAVE_PACKAGE) + message(STATUS "Checking for Python package ${PACKAGENAME} -- found") + else() + message(STATUS "Checking for Python package ${PACKAGENAME} -- not found") + endif() + + set(${OUTPUT_VAR} ${HAVE_PACKAGE} CACHE BOOL "Whether the Python package ${PACKAGENAME} was found" FORCE) + mark_as_advanced(${OUTPUT_VAR}) + + endif() +endfunction(check_python_package) + +# check that PACKAGENAME can be imported, and print an error if not +function(verify_python_package PACKAGENAME) + + # we can just generate our own variable name + string(TOUPPER "HAVE_${PACKAGENAME}" HAVE_VAR_NAME) + + check_python_package(${PACKAGENAME} ${HAVE_VAR_NAME}) + + if(NOT ${HAVE_VAR_NAME}) + message(FATAL_ERROR "The required Python package ${PACKAGENAME} was not found in ${Python3_EXECUTABLE}. Please install it.") + endif() +endfunction(verify_python_package) \ No newline at end of file diff --git a/tools/cmake/app.cmake b/tools/cmake/app.cmake index 492252235eb..1b8454d7994 100644 --- a/tools/cmake/app.cmake +++ b/tools/cmake/app.cmake @@ -23,3 +23,16 @@ enable_language(C CXX ASM) # set executable suffix (has to be done after enabling languages) # Note: This is nice to have, but is also required because STM32Cube will only work on files with a .elf extension set(CMAKE_EXECUTABLE_SUFFIX .elf) + +# Find Python and needed packages +find_package(Python3) +include(${CMAKE_CURRENT_LIST_DIR}/CheckPythonPackage.cmake) +check_python_package(intelhex HAVE_INTELHEX) +check_python_package(prettytable HAVE_PRETTYTABLE) + +if(Python3_FOUND AND HAVE_INTELHEX AND HAVE_PRETTYTABLE) + set(HAVE_MEMAP_DEPS TRUE) +else() + set(HAVE_MEMAP_DEPS FALSE) + message(STATUS "Missing Python dependencies (python3, intelhex, prettytable) so the memory map cannot be printed") +endif() \ No newline at end of file diff --git a/tools/cmake/python_packagecheck.py b/tools/cmake/python_packagecheck.py new file mode 100644 index 00000000000..354d2c7339d --- /dev/null +++ b/tools/cmake/python_packagecheck.py @@ -0,0 +1,16 @@ +""" +mbed SDK +Copyright (c) 2020 ARM Limited +SPDX-License-Identifier: Apache-2.0 +""" + +#file which is invoked by the cmake build system to check if all necessary python packages are installed. + +import sys + +try: + __import__(sys.argv[1]) +except ImportError: + exit(1) + +exit(0) \ No newline at end of file From c19352730512436c014873488d98aa1fea7bbc8f Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Thu, 28 Jan 2021 01:32:31 -0800 Subject: [PATCH 02/12] Add intelhex to requirements.txt as it's a dependency of memap. --- tools/cmake/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/cmake/requirements.txt b/tools/cmake/requirements.txt index 5d7a71bdbb1..2c45a06737c 100644 --- a/tools/cmake/requirements.txt +++ b/tools/cmake/requirements.txt @@ -1,3 +1,4 @@ prettytable==0.7.2 future==0.16.0 Jinja2>=2.10.1,<2.11 +intelhex From c667747309bddce02ac71cda02c8110e2f285495 Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Thu, 28 Jan 2021 01:32:46 -0800 Subject: [PATCH 03/12] Fix license header --- tools/cmake/python_packagecheck.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tools/cmake/python_packagecheck.py b/tools/cmake/python_packagecheck.py index 354d2c7339d..422c6818358 100644 --- a/tools/cmake/python_packagecheck.py +++ b/tools/cmake/python_packagecheck.py @@ -1,8 +1,5 @@ -""" -mbed SDK -Copyright (c) 2020 ARM Limited -SPDX-License-Identifier: Apache-2.0 -""" +# Copyright (c) 2020 ARM Limited. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 #file which is invoked by the cmake build system to check if all necessary python packages are installed. From 947c80429505a033737d763e2a5470fd104143c8 Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Thu, 28 Jan 2021 01:47:21 -0800 Subject: [PATCH 04/12] Parse requirements.txt in CMake --- tools/cmake/app.cmake | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/tools/cmake/app.cmake b/tools/cmake/app.cmake index 1b8454d7994..cd53c7670ec 100644 --- a/tools/cmake/app.cmake +++ b/tools/cmake/app.cmake @@ -26,13 +26,39 @@ set(CMAKE_EXECUTABLE_SUFFIX .elf) # Find Python and needed packages find_package(Python3) +# Find Python +find_package(Python3 COMPONENTS Interpreter) include(${CMAKE_CURRENT_LIST_DIR}/CheckPythonPackage.cmake) -check_python_package(intelhex HAVE_INTELHEX) -check_python_package(prettytable HAVE_PRETTYTABLE) -if(Python3_FOUND AND HAVE_INTELHEX AND HAVE_PRETTYTABLE) +# Check python packages from requirements.txt +file(STRINGS ${CMAKE_CURRENT_LIST_DIR}/requirements.txt PYTHON_REQUIREMENTS) +foreach(REQUIREMENT ${PYTHON_REQUIREMENTS}) + + # Look for a string from the start of each line that does not contain "<", ">", "=", or " ". + if(REQUIREMENT MATCHES "^([^<>= ]+)") + + set(PACKAGE_NAME ${CMAKE_MATCH_1}) + string(TOUPPER ${PACKAGE_NAME} PACKAGE_NAME_UCASE) # Ucase name needed for CMake variable + string(TOLOWER ${PACKAGE_NAME} PACKAGE_NAME_LCASE) # Lcase name needed for import statement + + check_python_package(${PACKAGE_NAME_LCASE} HAVE_PYTHON_${PACKAGE_NAME_UCASE}) + if(NOT HAVE_PYTHON_${PACKAGE_NAME_UCASE}) + message(WARNING "Missing Python dependency ${PACKAGE_NAME}") + endif() + + else() + + message(FATAL_ERROR "Cannot parse line \"${REQUIREMENT}\" in requirements.txt") + + endif() + +endforeach() + +# Check deps for memap +if(Python3_FOUND AND HAVE_PYTHON_INTELHEX AND HAVE_PYTHON_PRETTYTABLE) set(HAVE_MEMAP_DEPS TRUE) else() set(HAVE_MEMAP_DEPS FALSE) message(STATUS "Missing Python dependencies (python3, intelhex, prettytable) so the memory map cannot be printed") -endif() \ No newline at end of file +endif() + From fafb08c1b775515373106d63530e090c5d6d802c Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Thu, 28 Jan 2021 01:49:47 -0800 Subject: [PATCH 05/12] Reformat tools/cmake/CheckPythonPackage.cmake Co-authored-by: Hugues Kamba <41612201+hugueskamba@users.noreply.github.com> --- tools/cmake/CheckPythonPackage.cmake | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/cmake/CheckPythonPackage.cmake b/tools/cmake/CheckPythonPackage.cmake index 0db50fb82df..a62b6e78cf6 100644 --- a/tools/cmake/CheckPythonPackage.cmake +++ b/tools/cmake/CheckPythonPackage.cmake @@ -34,8 +34,9 @@ function(check_python_package PACKAGENAME OUTPUT_VAR) if(NEED_TO_RUN_CHECK) set(PY_INTERP_FOR_${OUTPUT_VAR} ${Python3_EXECUTABLE} CACHE INTERNAL "The python interpreter used to run the ${OUTPUT_VAR} check" FORCE) - execute_process(COMMAND ${Python3_EXECUTABLE} ${PYTHON_PACKAGECHECK_SCRIPT} ${PACKAGENAME} - RESULT_VARIABLE PACKAGECHECK_RESULT) + execute_process( + COMMAND ${Python3_EXECUTABLE} ${PYTHON_PACKAGECHECK_SCRIPT} ${PACKAGENAME} RESULT_VARIABLE PACKAGECHECK_RESULT + ) if(${PACKAGECHECK_RESULT} EQUAL 0) set(HAVE_PACKAGE TRUE) @@ -66,4 +67,4 @@ function(verify_python_package PACKAGENAME) if(NOT ${HAVE_VAR_NAME}) message(FATAL_ERROR "The required Python package ${PACKAGENAME} was not found in ${Python3_EXECUTABLE}. Please install it.") endif() -endfunction(verify_python_package) \ No newline at end of file +endfunction(verify_python_package) From 049f1a7bf64325ceec2400cb8e3cd974289e3f13 Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Thu, 28 Jan 2021 01:50:10 -0800 Subject: [PATCH 06/12] Fix indentation error in tools/cmake/CheckPythonPackage.cmake Co-authored-by: Hugues Kamba <41612201+hugueskamba@users.noreply.github.com> --- tools/cmake/CheckPythonPackage.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cmake/CheckPythonPackage.cmake b/tools/cmake/CheckPythonPackage.cmake index a62b6e78cf6..3b54dc118d3 100644 --- a/tools/cmake/CheckPythonPackage.cmake +++ b/tools/cmake/CheckPythonPackage.cmake @@ -44,7 +44,7 @@ function(check_python_package PACKAGENAME OUTPUT_VAR) set(HAVE_PACKAGE FALSE) endif() - if(HAVE_PACKAGE) + if(HAVE_PACKAGE) message(STATUS "Checking for Python package ${PACKAGENAME} -- found") else() message(STATUS "Checking for Python package ${PACKAGENAME} -- not found") From e61a45a0c3ca95b31c0af04786b59ddc5c05530d Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Thu, 28 Jan 2021 01:54:41 -0800 Subject: [PATCH 07/12] Add extra lines as requested --- tools/cmake/CheckPythonPackage.cmake | 1 + tools/cmake/app.cmake | 1 + 2 files changed, 2 insertions(+) diff --git a/tools/cmake/CheckPythonPackage.cmake b/tools/cmake/CheckPythonPackage.cmake index 3b54dc118d3..7e86172f539 100644 --- a/tools/cmake/CheckPythonPackage.cmake +++ b/tools/cmake/CheckPythonPackage.cmake @@ -67,4 +67,5 @@ function(verify_python_package PACKAGENAME) if(NOT ${HAVE_VAR_NAME}) message(FATAL_ERROR "The required Python package ${PACKAGENAME} was not found in ${Python3_EXECUTABLE}. Please install it.") endif() + endfunction(verify_python_package) diff --git a/tools/cmake/app.cmake b/tools/cmake/app.cmake index cd53c7670ec..4b986106472 100644 --- a/tools/cmake/app.cmake +++ b/tools/cmake/app.cmake @@ -59,6 +59,7 @@ if(Python3_FOUND AND HAVE_PYTHON_INTELHEX AND HAVE_PYTHON_PRETTYTABLE) set(HAVE_MEMAP_DEPS TRUE) else() set(HAVE_MEMAP_DEPS FALSE) + message(STATUS "Missing Python dependencies (python3, intelhex, prettytable) so the memory map cannot be printed") endif() From 8eca0cffb288c8cb03dc118e65f7c501e548a2bc Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Thu, 28 Jan 2021 01:54:01 -0800 Subject: [PATCH 08/12] Fix incorrect comment in tools/cmake/python_packagecheck.py Co-authored-by: Hugues Kamba <41612201+hugueskamba@users.noreply.github.com> --- tools/cmake/python_packagecheck.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/cmake/python_packagecheck.py b/tools/cmake/python_packagecheck.py index 422c6818358..3cd75abd3f3 100644 --- a/tools/cmake/python_packagecheck.py +++ b/tools/cmake/python_packagecheck.py @@ -1,7 +1,7 @@ # Copyright (c) 2020 ARM Limited. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -#file which is invoked by the cmake build system to check if all necessary python packages are installed. +"""Script to check if a Python module/package is installed.""" import sys @@ -10,4 +10,4 @@ except ImportError: exit(1) -exit(0) \ No newline at end of file +exit(0) From df60d42aedfc0af7275824eb610b2246e1e11e43 Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Thu, 28 Jan 2021 01:59:55 -0800 Subject: [PATCH 09/12] Realized that companion Python script is actually not needed at all, can be replaced with command line --- tools/cmake/CheckPythonPackage.cmake | 11 +++-------- tools/cmake/python_packagecheck.py | 13 ------------- 2 files changed, 3 insertions(+), 21 deletions(-) delete mode 100644 tools/cmake/python_packagecheck.py diff --git a/tools/cmake/CheckPythonPackage.cmake b/tools/cmake/CheckPythonPackage.cmake index 7e86172f539..47a43415628 100644 --- a/tools/cmake/CheckPythonPackage.cmake +++ b/tools/cmake/CheckPythonPackage.cmake @@ -2,12 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 # CMake functions for checking for Python packages -# Requires PYTHON_EXECUTABLE to be defined. Call FindPythonInterp first! - -# NOTE: if moving this file, be sure to also move python_packagecheck.py - -# must evaluate this now since CMAKE_CURRENT_LIST_DIR doesn't work in function scope -set(PYTHON_PACKAGECHECK_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/python_packagecheck.py) +# Requires PYTHON_EXECUTABLE to be defined. Call FindPython first! # set OUTPUT_VAR to whether PACKAGENAME was found function(check_python_package PACKAGENAME OUTPUT_VAR) @@ -35,7 +30,7 @@ function(check_python_package PACKAGENAME OUTPUT_VAR) set(PY_INTERP_FOR_${OUTPUT_VAR} ${Python3_EXECUTABLE} CACHE INTERNAL "The python interpreter used to run the ${OUTPUT_VAR} check" FORCE) execute_process( - COMMAND ${Python3_EXECUTABLE} ${PYTHON_PACKAGECHECK_SCRIPT} ${PACKAGENAME} RESULT_VARIABLE PACKAGECHECK_RESULT + COMMAND ${Python3_EXECUTABLE} -c "import ${PACKAGENAME}" RESULT_VARIABLE PACKAGECHECK_RESULT ) if(${PACKAGECHECK_RESULT} EQUAL 0) @@ -67,5 +62,5 @@ function(verify_python_package PACKAGENAME) if(NOT ${HAVE_VAR_NAME}) message(FATAL_ERROR "The required Python package ${PACKAGENAME} was not found in ${Python3_EXECUTABLE}. Please install it.") endif() - + endfunction(verify_python_package) diff --git a/tools/cmake/python_packagecheck.py b/tools/cmake/python_packagecheck.py deleted file mode 100644 index 3cd75abd3f3..00000000000 --- a/tools/cmake/python_packagecheck.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) 2020 ARM Limited. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - -"""Script to check if a Python module/package is installed.""" - -import sys - -try: - __import__(sys.argv[1]) -except ImportError: - exit(1) - -exit(0) From 0a67fef9950a1f042a7874a639a8ac31d690699f Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Mon, 1 Feb 2021 19:47:22 -0800 Subject: [PATCH 10/12] Add intelhex version info (same as #14201) --- tools/cmake/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cmake/requirements.txt b/tools/cmake/requirements.txt index 2c45a06737c..fce949fecbd 100644 --- a/tools/cmake/requirements.txt +++ b/tools/cmake/requirements.txt @@ -1,4 +1,4 @@ prettytable==0.7.2 future==0.16.0 Jinja2>=2.10.1,<2.11 -intelhex +intelhex>=2.3.0,<3.0.0 From 9e2b04e9450209469cfcb1aeaf7bc71a3664e70b Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Tue, 2 Feb 2021 11:22:41 -0800 Subject: [PATCH 11/12] Whitespace formatting changes. --- tools/cmake/CheckPythonPackage.cmake | 4 ---- tools/cmake/app.cmake | 6 ------ 2 files changed, 10 deletions(-) diff --git a/tools/cmake/CheckPythonPackage.cmake b/tools/cmake/CheckPythonPackage.cmake index 47a43415628..9a886dc6086 100644 --- a/tools/cmake/CheckPythonPackage.cmake +++ b/tools/cmake/CheckPythonPackage.cmake @@ -6,7 +6,6 @@ # set OUTPUT_VAR to whether PACKAGENAME was found function(check_python_package PACKAGENAME OUTPUT_VAR) - # can't have Python packages without Python! if(NOT Python3_FOUND) set(${OUTPUT_VAR} FALSE PARENT_SCOPE) @@ -17,12 +16,10 @@ function(check_python_package PACKAGENAME OUTPUT_VAR) if(DEFINED ${OUTPUT_VAR}) if(${OUTPUT_VAR}) - # if the python interpreter changed, we need to recheck if("${PY_INTERP_FOR_${OUTPUT_VAR}}" STREQUAL "${Python3_EXECUTABLE}") set(NEED_TO_RUN_CHECK FALSE) endif() - endif() endif() @@ -47,7 +44,6 @@ function(check_python_package PACKAGENAME OUTPUT_VAR) set(${OUTPUT_VAR} ${HAVE_PACKAGE} CACHE BOOL "Whether the Python package ${PACKAGENAME} was found" FORCE) mark_as_advanced(${OUTPUT_VAR}) - endif() endfunction(check_python_package) diff --git a/tools/cmake/app.cmake b/tools/cmake/app.cmake index 4b986106472..b71ce481796 100644 --- a/tools/cmake/app.cmake +++ b/tools/cmake/app.cmake @@ -33,10 +33,8 @@ include(${CMAKE_CURRENT_LIST_DIR}/CheckPythonPackage.cmake) # Check python packages from requirements.txt file(STRINGS ${CMAKE_CURRENT_LIST_DIR}/requirements.txt PYTHON_REQUIREMENTS) foreach(REQUIREMENT ${PYTHON_REQUIREMENTS}) - # Look for a string from the start of each line that does not contain "<", ">", "=", or " ". if(REQUIREMENT MATCHES "^([^<>= ]+)") - set(PACKAGE_NAME ${CMAKE_MATCH_1}) string(TOUPPER ${PACKAGE_NAME} PACKAGE_NAME_UCASE) # Ucase name needed for CMake variable string(TOLOWER ${PACKAGE_NAME} PACKAGE_NAME_LCASE) # Lcase name needed for import statement @@ -45,11 +43,8 @@ foreach(REQUIREMENT ${PYTHON_REQUIREMENTS}) if(NOT HAVE_PYTHON_${PACKAGE_NAME_UCASE}) message(WARNING "Missing Python dependency ${PACKAGE_NAME}") endif() - else() - message(FATAL_ERROR "Cannot parse line \"${REQUIREMENT}\" in requirements.txt") - endif() endforeach() @@ -59,7 +54,6 @@ if(Python3_FOUND AND HAVE_PYTHON_INTELHEX AND HAVE_PYTHON_PRETTYTABLE) set(HAVE_MEMAP_DEPS TRUE) else() set(HAVE_MEMAP_DEPS FALSE) - message(STATUS "Missing Python dependencies (python3, intelhex, prettytable) so the memory map cannot be printed") endif() From 7b03aeaf989d5728da3d0bf6a71b922e7ac359cc Mon Sep 17 00:00:00 2001 From: Jamie Smith Date: Wed, 3 Feb 2021 14:16:07 -0800 Subject: [PATCH 12/12] Rebase against master --- tools/cmake/app.cmake | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/cmake/app.cmake b/tools/cmake/app.cmake index b71ce481796..8d7318c1d03 100644 --- a/tools/cmake/app.cmake +++ b/tools/cmake/app.cmake @@ -24,8 +24,6 @@ enable_language(C CXX ASM) # Note: This is nice to have, but is also required because STM32Cube will only work on files with a .elf extension set(CMAKE_EXECUTABLE_SUFFIX .elf) -# Find Python and needed packages -find_package(Python3) # Find Python find_package(Python3 COMPONENTS Interpreter) include(${CMAKE_CURRENT_LIST_DIR}/CheckPythonPackage.cmake)