fbt: add fap_deploy target to build and copy all .fap apps to flipper (#2146)
				
					
				
			* fbt: add `faps_copy` target to build and copy all .fap apps to flipper * fbt: restore default runfap.py invocation behavior, use -n for copy only * fbt: proper implementation of fap_deploy target Co-authored-by: hedger <hedger@nanode.su>
This commit is contained in:
		
							parent
							
								
									8d2143add5
								
							
						
					
					
						commit
						d2df35a35b
					
				
							
								
								
									
										14
									
								
								.vscode/example/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.vscode/example/tasks.json
									
									
									
									
										vendored
									
									
								
							@ -138,6 +138,18 @@
 | 
			
		||||
                "Serial Console"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "label": "[Debug] Build and upload all FAPs to Flipper over USB",
 | 
			
		||||
            "group": "build",
 | 
			
		||||
            "type": "shell",
 | 
			
		||||
            "command": "./fbt fap_deploy"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "label": "[Release] Build and upload all FAPs to Flipper over USB",
 | 
			
		||||
            "group": "build",
 | 
			
		||||
            "type": "shell",
 | 
			
		||||
            "command": "./fbt COMPACT=1 DEBUG=0 fap_deploy"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            // Press Ctrl+] to quit
 | 
			
		||||
            "label": "Serial Console",
 | 
			
		||||
@ -145,7 +157,7 @@
 | 
			
		||||
            "command": "./fbt cli",
 | 
			
		||||
            "group": "none",
 | 
			
		||||
            "isBackground": true,
 | 
			
		||||
			"options": {
 | 
			
		||||
            "options": {
 | 
			
		||||
                "env": {
 | 
			
		||||
                    "FBT_NO_SYNC": "0"
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@ -165,6 +165,14 @@ Alias("fap_dist", fap_dist)
 | 
			
		||||
 | 
			
		||||
distenv.Depends(firmware_env["FW_RESOURCES"], firmware_env["FW_EXTAPPS"].resources_dist)
 | 
			
		||||
 | 
			
		||||
# Copy all faps to device
 | 
			
		||||
 | 
			
		||||
fap_deploy = distenv.PhonyTarget(
 | 
			
		||||
    "fap_deploy",
 | 
			
		||||
    "${PYTHON3} ${ROOT_DIR}/scripts/storage.py send ${SOURCE} /ext/apps",
 | 
			
		||||
    source=Dir("#/assets/resources/apps"),
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Target for bundling core2 package for qFlipper
 | 
			
		||||
copro_dist = distenv.CoproBuilder(
 | 
			
		||||
 | 
			
		||||
@ -11,6 +11,8 @@ Building:
 | 
			
		||||
        Build all FAP apps
 | 
			
		||||
    fap_{APPID}, launch_app APPSRC={APPID}:
 | 
			
		||||
        Build FAP app with appid={APPID}; upload & start it over USB
 | 
			
		||||
    fap_deploy:
 | 
			
		||||
        Build and upload all FAP apps over USB
 | 
			
		||||
 | 
			
		||||
Flashing & debugging:
 | 
			
		||||
    flash, flash_blackmagic, jflash:
 | 
			
		||||
 | 
			
		||||
@ -15,6 +15,13 @@ import serial.tools.list_ports as list_ports
 | 
			
		||||
class Main(App):
 | 
			
		||||
    def init(self):
 | 
			
		||||
        self.parser.add_argument("-p", "--port", help="CDC Port", default="auto")
 | 
			
		||||
        self.parser.add_argument(
 | 
			
		||||
            "-n",
 | 
			
		||||
            "--no-launch",
 | 
			
		||||
            dest="launch_app",
 | 
			
		||||
            action="store_false",
 | 
			
		||||
            help="Don't launch app",
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.parser.add_argument("fap_src_path", help="App file to upload")
 | 
			
		||||
        self.parser.add_argument(
 | 
			
		||||
@ -84,11 +91,14 @@ class Main(App):
 | 
			
		||||
                self.logger.error(f"Error: upload failed: {storage.last_error}")
 | 
			
		||||
                return -3
 | 
			
		||||
 | 
			
		||||
            storage.send_and_wait_eol(f'loader open "Applications" {fap_dst_path}\r')
 | 
			
		||||
            result = storage.read.until(storage.CLI_EOL)
 | 
			
		||||
            if len(result):
 | 
			
		||||
                self.logger.error(f"Unexpected response: {result.decode('ascii')}")
 | 
			
		||||
                return -4
 | 
			
		||||
            if self.args.launch_app:
 | 
			
		||||
                storage.send_and_wait_eol(
 | 
			
		||||
                    f'loader open "Applications" {fap_dst_path}\r'
 | 
			
		||||
                )
 | 
			
		||||
                result = storage.read.until(storage.CLI_EOL)
 | 
			
		||||
                if len(result):
 | 
			
		||||
                    self.logger.error(f"Unexpected response: {result.decode('ascii')}")
 | 
			
		||||
                    return -4
 | 
			
		||||
 | 
			
		||||
            return 0
 | 
			
		||||
        finally:
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user