]> granicus.if.org Git - esp-idf/commitdiff
esptool_py: add missing phony build targets for CMake
authorRenz Christian Bagaporo <renz@espressif.com>
Tue, 20 Aug 2019 08:09:24 +0000 (16:09 +0800)
committerRenz Christian Bagaporo <renz@espressif.com>
Wed, 21 Aug 2019 02:01:00 +0000 (10:01 +0800)
Adds targets erase_flash and monitor for users not using idf.py.
Closes https://github.com/espressif/esp-idf/issues/2420.

components/esptool_py/get_port_args.cmake [new file with mode: 0644]
components/esptool_py/project_include.cmake
components/esptool_py/run_cmd.cmake [new file with mode: 0644]
components/esptool_py/run_esptool.cmake
components/esptool_py/run_idf_monitor.cmake [new file with mode: 0644]

diff --git a/components/esptool_py/get_port_args.cmake b/components/esptool_py/get_port_args.cmake
new file mode 100644 (file)
index 0000000..52c388d
--- /dev/null
@@ -0,0 +1,18 @@
+# Note: we can't expand these environment variables in the main IDF CMake build,
+# because we want to expand them at flashing time not at CMake runtime (so they can change
+# without needing a CMake re-run)
+set(ESPPORT $ENV{ESPPORT})
+if(NOT ESPPORT)
+    message("Note: ${TOOL} will search for a serial port. To specify a port, set the ESPPORT environment variable.")
+else()
+    set(port_arg "-p ${ESPPORT}")
+endif()
+
+set(ESPBAUD $ENV{ESPBAUD})
+if(NOT ESPBAUD)
+    message("Note: ${TOOL} will attempt to set baud rate automatically. "
+            "To specify a baud rate, set the ESPBAUD environment variable.")
+else()
+    set(baud_arg "-b ${ESPBAUD}")
+endif()
+
index 78dc03cbb0ee5ea36a3668095733dae1a4ce7361..b1bb71c0f97f247fa217c0cdb79e2ef0294234d0 100644 (file)
@@ -134,13 +134,34 @@ function(esptool_py_custom_target target_name flasher_filename dependencies)
         -D IDF_PATH="${idf_path}"
         -D ESPTOOLPY="${ESPTOOLPY}"
         -D ESPTOOL_ARGS="write_flash;@flash_${flasher_filename}_args"
-        -D ESPTOOL_WORKING_DIR="${build_dir}"
+        -D WORKING_DIRECTORY="${build_dir}"
         -P run_esptool.cmake
         WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
         USES_TERMINAL
         )
 endfunction()
 
+add_custom_target(erase_flash
+    COMMAND ${CMAKE_COMMAND}
+    -D IDF_PATH="${idf_path}"
+    -D ESPTOOLPY="${ESPTOOLPY}"
+    -D ESPTOOL_ARGS="erase_flash"
+    -P run_esptool.cmake
+    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
+    USES_TERMINAL
+    )
+
+add_custom_target(monitor
+    COMMAND ${CMAKE_COMMAND}
+    -D IDF_PATH="${idf_path}"
+    -D IDF_MONITOR="${idf_path}/tools/idf_monitor.py"
+    -D ELF_FILE="${elf}"
+    -D WORKING_DIRECTORY="${build_dir}"
+    -P run_idf_monitor.cmake
+    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
+    USES_TERMINAL
+    )
+
 esptool_py_custom_target(flash project "app;partition_table;bootloader")
 esptool_py_custom_target(app-flash app "app")
 
diff --git a/components/esptool_py/run_cmd.cmake b/components/esptool_py/run_cmd.cmake
new file mode 100644 (file)
index 0000000..8eefabb
--- /dev/null
@@ -0,0 +1,15 @@
+if(NOT IDF_PATH)
+    message(FATAL_ERROR "IDF_PATH not set.")
+endif()
+include("${IDF_PATH}/tools/cmake/utilities.cmake")
+spaces2list(CMD)
+
+execute_process(COMMAND ${CMD}
+    WORKING_DIRECTORY "${WORKING_DIRECTORY}"
+    RESULT_VARIABLE result
+    )
+
+if(${result})
+    # No way to have CMake silently fail, unfortunately
+    message(FATAL_ERROR "${TOOL} failed")
+endif()
index a63eb55f0b90466cdfe17fa17cf967a25365bab7..348af7a5651188f2dfb1f2cb06eaae13f2bca414 100644 (file)
@@ -8,39 +8,14 @@
 #
 cmake_minimum_required(VERSION 3.5)
 
-if(NOT IDF_PATH OR NOT ESPTOOLPY OR NOT ESPTOOL_ARGS OR NOT ESPTOOL_WORKING_DIR)
-    message(FATAL_ERROR "IDF_PATH, ESPTOOLPY, ESPTOOL_ARGS, and ESPTOOL_WORKING_DIR must "
-        "be specified on the CMake command line. For direct esptool execution, it is "
-        "strongly recommended to run esptool.py directly.")
-endif()
-
-# Note: we can't expand these environment variables in the main IDF CMake build,
-# because we want to expand them at flashing time not at CMake runtime (so they can change
-# without needing a CMake re-run)
-set(ESPPORT $ENV{ESPPORT})
-if(NOT ESPPORT)
-    message("Note: esptool.py will search for a serial port. To specify a port, set the ESPPORT environment variable.")
-else()
-    set(port_arg "-p ${ESPPORT}")
-endif()
+set(TOOL "esptool.py")
 
-set(ESPBAUD $ENV{ESPBAUD})
-if(NOT ESPBAUD)
-    message("Note: Using default baud rate 460800. To modify, set ESPBAUD environment variable.")
-    set(ESPBAUD 460800)
+if(NOT ESPTOOLPY OR NOT ESPTOOL_ARGS)
+    message(FATAL_ERROR "ESPTOOLPY and ESPTOOL_ARGS must "
+        "be specified on the CMake command line. For direct execution, it is "
+        "strongly recommended to run ${TOOL} directly.")
 endif()
 
-include("${IDF_PATH}/tools/cmake/utilities.cmake")
-
-set(cmd "${ESPTOOLPY} ${port_arg} -b ${ESPBAUD} ${ESPTOOL_ARGS}")
-spaces2list(cmd)
-
-execute_process(COMMAND ${cmd}
-    WORKING_DIRECTORY "${ESPTOOL_WORKING_DIR}"
-    RESULT_VARIABLE result
-    )
-
-if(${result})
-    # No way to have CMake silently fail, unfortunately
-    message(FATAL_ERROR "esptool.py failed")
-endif()
+include("${CMAKE_CURRENT_LIST_DIR}/get_port_args.cmake")
+set(CMD "${ESPTOOLPY} ${port_arg} ${baud_arg} ${ESPTOOL_ARGS}")
+include("${CMAKE_CURRENT_LIST_DIR}/run_cmd.cmake")
\ No newline at end of file
diff --git a/components/esptool_py/run_idf_monitor.cmake b/components/esptool_py/run_idf_monitor.cmake
new file mode 100644 (file)
index 0000000..56b58de
--- /dev/null
@@ -0,0 +1,21 @@
+# A CMake script to run idf_monitor from within ninja or make
+# or another cmake-based build runner
+#
+# (Needed to expand environment variables, for backwards compatibility.)
+#
+# It is recommended to NOT USE this CMake script if you have the option of
+# running idf_monitor.py directly. This script exists only for use inside CMake builds.
+#
+cmake_minimum_required(VERSION 3.5)
+
+set(TOOL "idf_monitor.py")
+
+if(NOT IDF_MONITOR OR NOT ELF_FILE)
+    message(FATAL_ERROR "IDF_MONITOR and ELF_FILE must "
+        "be specified on the CMake command line. For direct execution, it is "
+        "strongly recommended to run ${TOOL} directly.")
+endif()
+
+include("${CMAKE_CURRENT_LIST_DIR}/get_port_args.cmake")
+set(CMD "${IDF_MONITOR} ${port_arg} ${baud_arg} ${ELF_FILE}")
+include("${CMAKE_CURRENT_LIST_DIR}/run_cmd.cmake")