-
Notifications
You must be signed in to change notification settings - Fork 81
/
prepare-engine.go
99 lines (88 loc) · 3.57 KB
/
prepare-engine.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package cmd
import (
"os"
"runtime"
"github.com/go-flutter-desktop/hover/internal/build"
"github.com/go-flutter-desktop/hover/internal/config"
"github.com/go-flutter-desktop/hover/internal/enginecache"
"github.com/go-flutter-desktop/hover/internal/log"
"github.com/spf13/cobra"
)
var (
prepareCachePath string
prepareEngineVersion string
prepareReleaseMode bool
prepareDebugMode bool
prepareProfileMode bool
prepareBuildModes []build.Mode
)
func init() {
prepareEngineCmd.PersistentFlags().StringVar(&prepareCachePath, "cache-path", enginecache.DefaultCachePath(), "The path that hover uses to cache dependencies such as the Flutter engine .so/.dll")
prepareEngineCmd.PersistentFlags().StringVar(&prepareEngineVersion, "engine-version", config.BuildEngineDefault, "The flutter engine version to use.")
prepareEngineCmd.PersistentFlags().BoolVar(&prepareDebugMode, "debug", false, "Prepare the flutter engine for debug mode")
prepareEngineCmd.PersistentFlags().BoolVar(&prepareReleaseMode, "release", false, "Prepare the flutter engine for release mode.")
prepareEngineCmd.PersistentFlags().BoolVar(&prepareProfileMode, "profile", false, "Prepare the flutter engine for profile mode.")
prepareEngineCmd.AddCommand(prepareEngineLinuxCmd)
prepareEngineCmd.AddCommand(prepareEngineDarwinCmd)
prepareEngineCmd.AddCommand(prepareEngineWindowsCmd)
rootCmd.AddCommand(prepareEngineCmd)
}
var prepareEngineCmd = &cobra.Command{
Use: "prepare-engine",
Short: "Validates or updates the flutter engine on this machine for a given platform",
}
var prepareEngineLinuxCmd = &cobra.Command{
Use: "linux",
Short: "Validates or updates the flutter engine on this machine for a given platform",
Run: func(cmd *cobra.Command, args []string) {
initPrepareEngineParameters("linux")
subcommandPrepare("linux")
},
}
var prepareEngineDarwinCmd = &cobra.Command{
Use: "darwin",
Short: "Validates or updates the flutter engine on this machine for a given platform",
Run: func(cmd *cobra.Command, args []string) {
initPrepareEngineParameters("darwin")
subcommandPrepare("darwin")
},
}
var prepareEngineWindowsCmd = &cobra.Command{
Use: "windows",
Short: "Validates or updates the flutter engine on this machine for a given platform",
Run: func(cmd *cobra.Command, args []string) {
initPrepareEngineParameters("windows")
subcommandPrepare("windows")
},
}
func initPrepareEngineParameters(targetOS string) {
validatePrepareEngineParameters(targetOS)
if prepareDebugMode {
prepareBuildModes = append(prepareBuildModes, build.DebugMode)
}
if prepareReleaseMode {
prepareBuildModes = append(prepareBuildModes, build.ReleaseMode)
}
if prepareProfileMode {
prepareBuildModes = append(prepareBuildModes, build.ProfileMode)
}
}
func validatePrepareEngineParameters(targetOS string) {
if !prepareDebugMode && !prepareReleaseMode && !prepareProfileMode {
log.Errorf("No target mode set. Please select exactly one from: debug, profile, release.")
os.Exit(1)
}
if (prepareDebugMode && prepareReleaseMode) || (prepareDebugMode && prepareProfileMode) || (prepareReleaseMode && prepareProfileMode) {
log.Errorf("Multiple target modes set. Please select exactly one from: debug, profile, release.")
os.Exit(1)
}
if targetOS == "darwin" && runtime.GOOS != targetOS && prepareReleaseMode {
log.Errorf("It is not possible to prepare the flutter engine in release mode for darwin using docker")
os.Exit(1)
}
}
func subcommandPrepare(targetOS string) {
for _, mode := range prepareBuildModes {
enginecache.ValidateOrUpdateEngine(targetOS, prepareCachePath, prepareEngineVersion, mode)
}
}