diff --git a/cmd/build.go b/cmd/build.go index 9ba08f72..19e36d13 100644 --- a/cmd/build.go +++ b/cmd/build.go @@ -285,7 +285,12 @@ func buildInDocker(targetOS string, vmArguments []string) { if runtime.GOOS != "windows" { chownStr = fmt.Sprintf(" && chown %s:%s ./ -R", u.Uid, u.Gid) } - args = append(args, "bash", "-c", fmt.Sprintf("%s%s", strings.Join(buildCommand(targetOS, vmArguments, "build/outputs/"+targetOS+"/"+build.OutputBinaryName(pubspec.GetPubSpec().Name, targetOS)), " "), chownStr)) + stripStr := "" + if targetOS == "linux" { + outputEngineFile := filepath.Join("/app", build.BuildPath, "build", "outputs", targetOS, build.EngineFile(targetOS)) + stripStr = fmt.Sprintf("strip -s %s && ", outputEngineFile) + } + args = append(args, "bash", "-c", fmt.Sprintf("%s%s%s", stripStr, strings.Join(buildCommand(targetOS, vmArguments, "build/outputs/"+targetOS+"/"+build.OutputBinaryName(pubspec.GetPubSpec().Name, targetOS)), " "), chownStr)) dockerRunCmd := exec.Command(build.DockerBin, args...) dockerRunCmd.Stderr = os.Stderr dockerRunCmd.Stdout = os.Stdout @@ -383,32 +388,15 @@ func buildNormal(targetOS string, vmArguments []string) { } } - var engineFile string - switch targetOS { - case "darwin": - engineFile = "FlutterEmbedder.framework" - case "linux": - engineFile = "libflutter_engine.so" - case "windows": - engineFile = "flutter_engine.dll" - } - - outputEngineFile := filepath.Join(build.OutputDirectoryPath(targetOS), engineFile) + outputEngineFile := filepath.Join(build.OutputDirectoryPath(targetOS), build.EngineFile(targetOS)) err = copy.Copy( - filepath.Join(engineCachePath, engineFile), + filepath.Join(engineCachePath, build.EngineFile(targetOS)), outputEngineFile, ) if err != nil { - log.Errorf("Failed to copy %s: %v", engineFile, err) + log.Errorf("Failed to copy %s: %v", build.EngineFile(targetOS), err) os.Exit(1) } - if !buildDebug && targetOS == "linux" { - err = exec.Command("strip", "-s", outputEngineFile).Run() - if err != nil { - log.Errorf("Failed to strip %s: %v", outputEngineFile, err) - os.Exit(1) - } - } err = copy.Copy( filepath.Join(engineCachePath, "artifacts", "icudtl.dat"), @@ -489,6 +477,14 @@ func buildNormal(targetOS string, vmArguments []string) { return } + if !buildDebug && targetOS == "linux" { + err = exec.Command("strip", "-s", outputEngineFile).Run() + if err != nil { + log.Errorf("Failed to strip %s: %v", outputEngineFile, err) + os.Exit(1) + } + } + buildCommandString := buildCommand(targetOS, vmArguments, build.OutputBinaryPath(pubspec.GetPubSpec().Name, targetOS)) cmdGoBuild := exec.Command(buildCommandString[0], buildCommandString[1:]...) cmdGoBuild.Dir = filepath.Join(wd, build.BuildPath) diff --git a/internal/build/build.go b/internal/build/build.go index eaaef00e..c6ed7b65 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -54,3 +54,20 @@ func OutputBinaryPath(projectName string, targetOS string) string { outputBinaryPath := filepath.Join(OutputDirectoryPath(targetOS), OutputBinaryName(projectName, targetOS)) return outputBinaryPath } + +// EngineFile returns the name of the engine file from flutter for the +// specified platform. +func EngineFile(targetOS string) string { + switch targetOS { + case "darwin": + return "FlutterEmbedder.framework" + case "linux": + return "libflutter_engine.so" + case "windows": + return "flutter_engine.dll" + default: + log.Errorf("%s has no implemented engine file", targetOS) + os.Exit(1) + return "" + } +}