ufbt: project & debugging updates (#2572)
* ufbt: removed warning in "channel=dev" update mode * ufbt: removed API version warning; added get_blackmagic & get_apiversion targets * ufbt: updater project template to include blackmagic & jlink targets * ufbt: project template: fixes & updates * ufbt: project template: added config update shortcut * sdk: using fixed names for file components
This commit is contained in:
		
							parent
							
								
									6cc5f30c84
								
							
						
					
					
						commit
						b9ccb274a7
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -30,7 +30,7 @@ bindings/ | |||||||
| Brewfile.lock.json | Brewfile.lock.json | ||||||
| 
 | 
 | ||||||
| # Visual Studio Code | # Visual Studio Code | ||||||
| .vscode/ | /.vscode/ | ||||||
| 
 | 
 | ||||||
| # Kate | # Kate | ||||||
| .kateproject | .kateproject | ||||||
|  | |||||||
| @ -181,9 +181,9 @@ class Main(App): | |||||||
|         ) as zf: |         ) as zf: | ||||||
|             for component_key in sdk_components_keys: |             for component_key in sdk_components_keys: | ||||||
|                 component_path = self._dist_components.get(component_key) |                 component_path = self._dist_components.get(component_key) | ||||||
|                 components_paths[component_key] = basename(component_path) |  | ||||||
| 
 | 
 | ||||||
|                 if component_key.endswith(".dir"): |                 if component_key.endswith(".dir"): | ||||||
|  |                     components_paths[component_key] = basename(component_path) | ||||||
|                     for root, dirnames, files in walk(component_path): |                     for root, dirnames, files in walk(component_path): | ||||||
|                         if "__pycache__" in dirnames: |                         if "__pycache__" in dirnames: | ||||||
|                             dirnames.remove("__pycache__") |                             dirnames.remove("__pycache__") | ||||||
| @ -199,7 +199,9 @@ class Main(App): | |||||||
|                                 ), |                                 ), | ||||||
|                             ) |                             ) | ||||||
|                 else: |                 else: | ||||||
|                     zf.write(component_path, basename(component_path)) |                     # We use fixed names for files to avoid having to regenerate VSCode project | ||||||
|  |                     components_paths[component_key] = component_key | ||||||
|  |                     zf.write(component_path, component_key) | ||||||
| 
 | 
 | ||||||
|             zf.writestr( |             zf.writestr( | ||||||
|                 "components.json", |                 "components.json", | ||||||
|  | |||||||
| @ -163,6 +163,18 @@ dist_env.Alias("flash", openocd_target) | |||||||
| if env["FORCE"]: | if env["FORCE"]: | ||||||
|     env.AlwaysBuild(openocd_target) |     env.AlwaysBuild(openocd_target) | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | firmware_jflash = dist_env.JFlash( | ||||||
|  |     dist_env["UFBT_STATE_DIR"].File("jflash"), | ||||||
|  |     dist_env["FW_BIN"], | ||||||
|  |     JFLASHADDR="0x20000000", | ||||||
|  | ) | ||||||
|  | dist_env.Alias("firmware_jflash", firmware_jflash) | ||||||
|  | dist_env.Alias("jflash", firmware_jflash) | ||||||
|  | if env["FORCE"]: | ||||||
|  |     env.AlwaysBuild(firmware_jflash) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| firmware_debug = dist_env.PhonyTarget( | firmware_debug = dist_env.PhonyTarget( | ||||||
|     "debug", |     "debug", | ||||||
|     "${GDBPYCOM}", |     "${GDBPYCOM}", | ||||||
| @ -391,3 +403,13 @@ AddPostAction( | |||||||
| dist_env.Precious(app_template_dist) | dist_env.Precious(app_template_dist) | ||||||
| dist_env.NoClean(app_template_dist) | dist_env.NoClean(app_template_dist) | ||||||
| dist_env.Alias("create", app_template_dist) | dist_env.Alias("create", app_template_dist) | ||||||
|  | 
 | ||||||
|  | dist_env.PhonyTarget( | ||||||
|  |     "get_blackmagic", | ||||||
|  |     "@echo $( ${BLACKMAGIC_ADDR} $)", | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | dist_env.PhonyTarget( | ||||||
|  |     "get_apiversion", | ||||||
|  |     "@echo $( ${UFBT_API_VERSION} $)", | ||||||
|  | ) | ||||||
|  | |||||||
| @ -2,19 +2,16 @@ | |||||||
|     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 |     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||||
|     "version": "0.2.0", |     "version": "0.2.0", | ||||||
|     "inputs": [ |     "inputs": [ | ||||||
|         // { |         { | ||||||
|         //     "id": "BLACKMAGIC", |             "id": "BLACKMAGIC", | ||||||
|         //     "type": "command", |             "type": "command", | ||||||
|         //     "command": "shellCommand.execute", |             "command": "shellCommand.execute", | ||||||
|         //     "args": { |             "args": { | ||||||
|         //         "useSingleResult": true, |                 "description": "Get Blackmagic device", | ||||||
|         //         "env": { |                 "useSingleResult": true, | ||||||
|         //             "PATH": "${workspaceFolder};${env:PATH}" |                 "command": "ufbt -s get_blackmagic", | ||||||
|         //         }, |             } | ||||||
|         //         "command": "./fbt get_blackmagic", |         }, | ||||||
|         //         "description": "Get Blackmagic device", |  | ||||||
|         //     } |  | ||||||
|         // }, |  | ||||||
|     ], |     ], | ||||||
|     "configurations": [ |     "configurations": [ | ||||||
|         { |         { | ||||||
| @ -57,26 +54,26 @@ | |||||||
|             ], |             ], | ||||||
|             // "showDevDebugOutput": "raw", |             // "showDevDebugOutput": "raw", | ||||||
|         }, |         }, | ||||||
|         // { |         { | ||||||
|         //     "name": "Attach FW (blackmagic)", |             "name": "Attach FW (blackmagic)", | ||||||
|         //     "cwd": "${workspaceFolder}", |             "cwd": "${workspaceFolder}", | ||||||
|         //     "executable": "@UFBT_FIRMWARE_ELF@", |             "executable": "@UFBT_FIRMWARE_ELF@", | ||||||
|         //     "request": "attach", |             "request": "attach", | ||||||
|         //     "type": "cortex-debug", |             "type": "cortex-debug", | ||||||
|         //     "servertype": "external", |             "servertype": "external", | ||||||
|         //     "gdbTarget": "${input:BLACKMAGIC}", |             "gdbTarget": "${input:BLACKMAGIC}", | ||||||
|         //     "svdFile": "@UFBT_DEBUG_DIR@/STM32WB55_CM4.svd", |             "svdFile": "@UFBT_DEBUG_DIR@/STM32WB55_CM4.svd", | ||||||
|         //     "rtos": "FreeRTOS", |             "rtos": "FreeRTOS", | ||||||
|         //     "postAttachCommands": [ |             "postAttachCommands": [ | ||||||
|         //         "monitor swdp_scan", |                 "monitor swdp_scan", | ||||||
|         //         "attach 1", |                 "attach 1", | ||||||
|         //         "set confirm off", |                 "set confirm off", | ||||||
|         //         "set mem inaccessible-by-default off", |                 "set mem inaccessible-by-default off", | ||||||
|         //         "source @UFBT_DEBUG_DIR@/flipperapps.py", |                 "source @UFBT_DEBUG_DIR@/flipperapps.py", | ||||||
|         //         "fap-set-debug-elf-root @UFBT_DEBUG_ELF_DIR@" |                 "fap-set-debug-elf-root @UFBT_DEBUG_ELF_DIR@" | ||||||
|         //     ] |             ] | ||||||
|         //     // "showDevDebugOutput": "raw", |             // "showDevDebugOutput": "raw", | ||||||
|         // }, |         }, | ||||||
|         { |         { | ||||||
|             "name": "Attach FW (JLink)", |             "name": "Attach FW (JLink)", | ||||||
|             "cwd": "${workspaceFolder}", |             "cwd": "${workspaceFolder}", | ||||||
|  | |||||||
							
								
								
									
										36
									
								
								scripts/ufbt/project_template/.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								scripts/ufbt/project_template/.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							| @ -20,24 +20,30 @@ | |||||||
|             "type": "shell", |             "type": "shell", | ||||||
|             "command": "ufbt" |             "command": "ufbt" | ||||||
|         }, |         }, | ||||||
|  |         { | ||||||
|  |             "label": "Clean", | ||||||
|  |             "group": "build", | ||||||
|  |             "type": "shell", | ||||||
|  |             "command": "ufbt -c" | ||||||
|  |         }, | ||||||
|         { |         { | ||||||
|             "label": "Flash FW (ST-Link)", |             "label": "Flash FW (ST-Link)", | ||||||
|             "group": "build", |             "group": "build", | ||||||
|             "type": "shell", |             "type": "shell", | ||||||
|             "command": "ufbt FORCE=1 flash" |             "command": "ufbt FORCE=1 flash" | ||||||
|         }, |         }, | ||||||
|         // { |         { | ||||||
|         //     "label": "[NOTIMPL] Flash FW (blackmagic)", |             "label": "Flash FW (blackmagic)", | ||||||
|         //     "group": "build", |             "group": "build", | ||||||
|         //     "type": "shell", |             "type": "shell", | ||||||
|         //     "command": "ufbt flash_blackmagic" |             "command": "ufbt flash_blackmagic" | ||||||
|         // }, |         }, | ||||||
|         // { |         { | ||||||
|         //     "label": "[NOTIMPL] Flash FW (JLink)", |             "label": "Flash FW (JLink)", | ||||||
|         //     "group": "build", |             "group": "build", | ||||||
|         //     "type": "shell", |             "type": "shell", | ||||||
|         //     "command": "ufbt FORCE=1 jflash" |             "command": "ufbt FORCE=1 jflash" | ||||||
|         // }, |         }, | ||||||
|         { |         { | ||||||
|             "label": "Flash FW (USB, with resources)", |             "label": "Flash FW (USB, with resources)", | ||||||
|             "group": "build", |             "group": "build", | ||||||
| @ -49,6 +55,12 @@ | |||||||
|             "group": "build", |             "group": "build", | ||||||
|             "type": "shell", |             "type": "shell", | ||||||
|             "command": "ufbt update" |             "command": "ufbt update" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "label": "Update VSCode config for current SDK", | ||||||
|  |             "group": "build", | ||||||
|  |             "type": "shell", | ||||||
|  |             "command": "ufbt vscode_dist" | ||||||
|         } |         } | ||||||
|     ] |     ] | ||||||
| } | } | ||||||
| @ -6,7 +6,7 @@ App( | |||||||
|     apptype=FlipperAppType.EXTERNAL, |     apptype=FlipperAppType.EXTERNAL, | ||||||
|     entry_point="@FBT_APPID@_app", |     entry_point="@FBT_APPID@_app", | ||||||
|     stack_size=2 * 1024, |     stack_size=2 * 1024, | ||||||
|     fap_category="Misc", |     fap_category="Examples", | ||||||
|     # Optional values |     # Optional values | ||||||
|     # fap_version=(0, 1),  # (major, minor) |     # fap_version=(0, 1),  # (major, minor) | ||||||
|     fap_icon="@FBT_APPID@.png",  # 10x10 1-bit PNG |     fap_icon="@FBT_APPID@.png",  # 10x10 1-bit PNG | ||||||
|  | |||||||
| @ -75,12 +75,6 @@ def generate(env, **kw): | |||||||
|     if not sdk_state["meta"]["hw_target"].endswith(sdk_data["hardware"]): |     if not sdk_state["meta"]["hw_target"].endswith(sdk_data["hardware"]): | ||||||
|         raise StopError("SDK state file doesn't match hardware target") |         raise StopError("SDK state file doesn't match hardware target") | ||||||
| 
 | 
 | ||||||
|     if sdk_state["meta"]["version"] != ufbt_state["version"]: |  | ||||||
|         warn( |  | ||||||
|             WarningOnByDefault, |  | ||||||
|             f"Version mismatch: SDK state vs uFBT: {sdk_state['meta']['version']} vs {ufbt_state['version']}", |  | ||||||
|         ) |  | ||||||
| 
 |  | ||||||
|     scripts_dir = sdk_current_sdk_dir_node.Dir(sdk_components["scripts.dir"]) |     scripts_dir = sdk_current_sdk_dir_node.Dir(sdk_components["scripts.dir"]) | ||||||
|     env.SetDefault( |     env.SetDefault( | ||||||
|         # Paths |         # Paths | ||||||
|  | |||||||
| @ -1,5 +1,4 @@ | |||||||
| from dataclasses import dataclass, field | from dataclasses import dataclass, field | ||||||
| from os.path import dirname |  | ||||||
| 
 | 
 | ||||||
| from SCons.Node import NodeList | from SCons.Node import NodeList | ||||||
| from SCons.Warnings import warn, WarningOnByDefault | from SCons.Warnings import warn, WarningOnByDefault | ||||||
| @ -131,6 +130,7 @@ Depends(sdk_source, appenv.ProcessSdkDepends(f"{amalgamated_api}.d")) | |||||||
| 
 | 
 | ||||||
| appenv["SDK_DIR"] = appenv.Dir("${BUILD_DIR}/sdk_headers") | appenv["SDK_DIR"] = appenv.Dir("${BUILD_DIR}/sdk_headers") | ||||||
| sdk_header_tree = appenv.SDKHeaderTreeExtractor(appenv["SDK_DIR"], amalgamated_api) | sdk_header_tree = appenv.SDKHeaderTreeExtractor(appenv["SDK_DIR"], amalgamated_api) | ||||||
|  | Depends(sdk_header_tree, appenv["SDK_DEFINITION"]) | ||||||
| # AlwaysBuild(sdk_tree) | # AlwaysBuild(sdk_tree) | ||||||
| Alias("sdk_tree", sdk_header_tree) | Alias("sdk_tree", sdk_header_tree) | ||||||
| extapps.sdk_tree = sdk_header_tree | extapps.sdk_tree = sdk_header_tree | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 hedger
						hedger