| 
									
										
										
										
											2020-10-12 22:22:09 +08:00
										 |  |  | # A CMake script to run serial tool commands supporting ESPPORT and
 | 
					
						
							|  |  |  | # ESPBAUD environment variables from within ninja or make or another
 | 
					
						
							|  |  |  | # cmake-based build runner.
 | 
					
						
							| 
									
										
										
										
											2018-09-13 14:13:20 +10:00
										 |  |  | #
 | 
					
						
							|  |  |  | # It is recommended to NOT USE this CMake script if you have the option of
 | 
					
						
							| 
									
										
										
										
											2020-10-12 22:22:09 +08:00
										 |  |  | # running the tool directly. This script exists only for use inside CMake builds.
 | 
					
						
							| 
									
										
										
										
											2022-05-27 10:10:51 +02:00
										 |  |  | cmake_minimum_required(VERSION 3.16)
 | 
					
						
							| 
									
										
										
										
											2018-09-13 14:13:20 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-12 22:22:09 +08:00
										 |  |  | if(NOT IDF_PATH)
 | 
					
						
							|  |  |  |     message(FATAL_ERROR "IDF_PATH not set.")
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-12 21:59:20 +08:00
										 |  |  | if(NOT SERIAL_TOOL OR NOT SERIAL_TOOL_ARGS)
 | 
					
						
							|  |  |  |     message(FATAL_ERROR "SERIAL_TOOL and SERIAL_TOOL_ARGS must " | 
					
						
							| 
									
										
										
										
											2019-08-20 16:09:24 +08:00
										 |  |  |         "be specified on the CMake command line. For direct execution, it is "
 | 
					
						
							| 
									
										
										
										
											2020-10-12 21:59:20 +08:00
										 |  |  |         "strongly recommended to run ${SERIAL_TOOL} directly.")
 | 
					
						
							| 
									
										
										
										
											2018-09-13 14:13:20 +10:00
										 |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-26 16:35:47 +02:00
										 |  |  | # Propagate the IDF_ENV_FPGA to esptool, for Espressif internal use only
 | 
					
						
							|  |  |  | if(DEFINED ENV{IDF_ENV_FPGA})
 | 
					
						
							|  |  |  |     set(ENV{ESPTOOL_ENV_FPGA} 1)
 | 
					
						
							|  |  |  |     message("Note: IDF_ENV_FPGA is set, propagating to esptool with ESPTOOL_ENV_FPGA = 1")
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-29 21:15:35 +02:00
										 |  |  | set(serial_tool_cmd ${SERIAL_TOOL})
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-12 22:22:09 +08:00
										 |  |  | # Main purpose of this script: 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: ${SERIAL_TOOL} will search for a serial port. " | 
					
						
							|  |  |  |             "To specify a port, set the ESPPORT environment variable.")
 | 
					
						
							|  |  |  | else()
 | 
					
						
							| 
									
										
										
										
											2021-09-29 21:15:35 +02:00
										 |  |  |     list(APPEND serial_tool_cmd -p ${ESPPORT})
 | 
					
						
							| 
									
										
										
										
											2020-10-12 22:22:09 +08:00
										 |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set(ESPBAUD $ENV{ESPBAUD})
 | 
					
						
							|  |  |  | if(NOT ESPBAUD)
 | 
					
						
							|  |  |  |     message("Note: ${SERIAL_TOOL} will attempt to set baud rate automatically. " | 
					
						
							|  |  |  |             "To specify a baud rate, set the ESPBAUD environment variable.")
 | 
					
						
							|  |  |  | else()
 | 
					
						
							| 
									
										
										
										
											2021-09-29 21:15:35 +02:00
										 |  |  |     list(APPEND serial_tool_cmd -b ${ESPBAUD})
 | 
					
						
							| 
									
										
										
										
											2020-10-12 22:22:09 +08:00
										 |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-11 12:33:17 +02:00
										 |  |  | # SERIAL_TOOL_ARGS is defined during the first cmake run
 | 
					
						
							|  |  |  | # SERIAL_TOOL_EXTRA_ARGS is used for additional arguments from the command line during run-time
 | 
					
						
							| 
									
										
										
										
											2021-09-29 21:15:35 +02:00
										 |  |  | list(APPEND serial_tool_cmd ${SERIAL_TOOL_ARGS})
 | 
					
						
							| 
									
										
										
										
											2023-04-11 12:33:17 +02:00
										 |  |  | list(APPEND serial_tool_cmd $ENV{SERIAL_TOOL_EXTRA_ARGS})
 | 
					
						
							| 
									
										
										
										
											2020-10-12 22:22:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-04 00:30:38 +08:00
										 |  |  | if(${SERIAL_TOOL_SILENT})
 | 
					
						
							|  |  |  |     execute_process(COMMAND ${serial_tool_cmd} | 
					
						
							|  |  |  |         WORKING_DIRECTORY "${WORKING_DIRECTORY}"
 | 
					
						
							|  |  |  |         RESULT_VARIABLE result
 | 
					
						
							|  |  |  |         OUTPUT_VARIABLE SERIAL_TOOL_OUTPUT_LOG
 | 
					
						
							| 
									
										
										
										
											2020-10-12 22:22:09 +08:00
										 |  |  |     )
 | 
					
						
							| 
									
										
										
										
											2023-01-04 00:30:38 +08:00
										 |  |  | else()
 | 
					
						
							|  |  |  |     execute_process(COMMAND ${serial_tool_cmd} | 
					
						
							|  |  |  |         WORKING_DIRECTORY "${WORKING_DIRECTORY}"
 | 
					
						
							|  |  |  |         RESULT_VARIABLE result
 | 
					
						
							|  |  |  |     )
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							| 
									
										
										
										
											2020-10-12 22:22:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | if(${result})
 | 
					
						
							|  |  |  |     # No way to have CMake silently fail, unfortunately
 | 
					
						
							| 
									
										
										
										
											2023-01-04 00:30:38 +08:00
										 |  |  |     message(FATAL_ERROR "${SERIAL_TOOL} failed. \n${SERIAL_TOOL_OUTPUT_LOG}")
 | 
					
						
							| 
									
										
										
										
											2020-10-12 22:22:09 +08:00
										 |  |  | endif()
 |