From b9b28ab70d59589deb76d7a1c3327c16a416f376 Mon Sep 17 00:00:00 2001 From: jld3103 Date: Sat, 19 Oct 2019 09:00:09 +0200 Subject: [PATCH 1/3] Fix 'strip' not available on windows/darwin --- cmd/build.go | 38 +++++++++++++++++--------------------- internal/build/build.go | 21 ++++++++++++++++----- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/cmd/build.go b/cmd/build.go index 9ba08f72..fc6301d4 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.OutputDirectoryPath(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..66f61cf4 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -15,11 +15,7 @@ const BuildPath = "go" // binaries blobs will be stored for a particular platform. // If needed, the directory is create at the returned path. func OutputDirectoryPath(targetOS string) string { - outputDirectoryPath, err := filepath.Abs(filepath.Join(BuildPath, "build", "outputs", targetOS)) - if err != nil { - log.Errorf("Failed to resolve absolute path for output directory: %v", err) - os.Exit(1) - } + outputDirectoryPath := filepath.Join(BuildPath, "build", "outputs", targetOS) if _, err := os.Stat(outputDirectoryPath); os.IsNotExist(err) { err = os.MkdirAll(outputDirectoryPath, 0775) if err != nil { @@ -54,3 +50,18 @@ func OutputBinaryPath(projectName string, targetOS string) string { outputBinaryPath := filepath.Join(OutputDirectoryPath(targetOS), OutputBinaryName(projectName, targetOS)) return outputBinaryPath } + +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 "" + } +} From 61af27782fb857f09ac0d24694d3425c249e217e Mon Sep 17 00:00:00 2001 From: jld3103 Date: Sat, 19 Oct 2019 09:03:23 +0200 Subject: [PATCH 2/3] Add documentation for engine file --- internal/build/build.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/build/build.go b/internal/build/build.go index 66f61cf4..22a8d19a 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -51,6 +51,8 @@ func OutputBinaryPath(projectName string, targetOS string) string { 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": From cf860d333333ad5b74862cff46d41ce0206a1a39 Mon Sep 17 00:00:00 2001 From: jld3103 Date: Sat, 19 Oct 2019 09:16:25 +0200 Subject: [PATCH 3/3] Fix output directory path --- cmd/build.go | 2 +- internal/build/build.go | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cmd/build.go b/cmd/build.go index fc6301d4..19e36d13 100644 --- a/cmd/build.go +++ b/cmd/build.go @@ -287,7 +287,7 @@ func buildInDocker(targetOS string, vmArguments []string) { } stripStr := "" if targetOS == "linux" { - outputEngineFile := filepath.Join("/app", build.OutputDirectoryPath(targetOS), build.EngineFile(targetOS)) + 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)) diff --git a/internal/build/build.go b/internal/build/build.go index 22a8d19a..c6ed7b65 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -15,7 +15,11 @@ const BuildPath = "go" // binaries blobs will be stored for a particular platform. // If needed, the directory is create at the returned path. func OutputDirectoryPath(targetOS string) string { - outputDirectoryPath := filepath.Join(BuildPath, "build", "outputs", targetOS) + outputDirectoryPath, err := filepath.Abs(filepath.Join(BuildPath, "build", "outputs", targetOS)) + if err != nil { + log.Errorf("Failed to resolve absolute path for output directory: %v", err) + os.Exit(1) + } if _, err := os.Stat(outputDirectoryPath); os.IsNotExist(err) { err = os.MkdirAll(outputDirectoryPath, 0775) if err != nil {