Skip to content

Commit 747904e

Browse files
author
Shuo
authored
Merge pull request #538 from openset/develop
Add: CmdBuild
2 parents ca15cee + e8259bb commit 747904e

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

internal/build/build.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package build
2+
3+
import (
4+
"archive/zip"
5+
"fmt"
6+
"io"
7+
"os"
8+
"os/exec"
9+
10+
"github.com/openset/leetcode/internal/base"
11+
"github.com/openset/leetcode/internal/version"
12+
)
13+
14+
var CmdBuild = &base.Command{
15+
Run: runBuild,
16+
UsageLine: "build",
17+
Short: "cross compiler",
18+
Long: "compile packages for darwin, windows, linux.",
19+
Hidden: true,
20+
}
21+
22+
func runBuild(cmd *base.Command, args []string) {
23+
if len(args) != 0 {
24+
cmd.Usage()
25+
}
26+
target := map[string][]string{
27+
"darwin": {"amd64"},
28+
"windows": {"386", "amd64"},
29+
"linux": {"386", "amd64"},
30+
}
31+
err := os.Setenv("CGO_ENABLED", "0")
32+
base.CheckErr(err)
33+
for goos, goarchList := range target {
34+
err = os.Setenv("GOOS", goos)
35+
base.CheckErr(err)
36+
for _, goarch := range goarchList {
37+
err = os.Setenv("GOARCH", goarch)
38+
base.CheckErr(err)
39+
fileName := fmt.Sprintf("%s%s.%s-%s.zip",
40+
base.CmdName,
41+
version.String(),
42+
goos,
43+
goarch,
44+
)
45+
fmt.Println("OS:", goos, "\tArch:", goarch, "\t", fileName)
46+
file, err := os.Create(fileName)
47+
base.CheckErr(err)
48+
zw := zip.NewWriter(file)
49+
zf, err := zw.Create(binName())
50+
base.CheckErr(err)
51+
err = exec.Command("go", "build", "-ldflags", "-s -w", "github.com/openset/leetcode").Run()
52+
base.CheckErr(err)
53+
src, err := os.Open(binName())
54+
base.CheckErr(err)
55+
_, err = io.Copy(zf, src)
56+
base.CheckErr(err)
57+
err = src.Close()
58+
base.CheckErr(err)
59+
err = zw.Close()
60+
base.CheckErr(err)
61+
err = os.Remove(binName())
62+
base.CheckErr(err)
63+
}
64+
}
65+
}
66+
67+
func binName() string {
68+
var exeSuffix string
69+
if os.Getenv("GOOS") == "windows" {
70+
exeSuffix = ".exe"
71+
}
72+
return base.CmdName + exeSuffix
73+
}

main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"log"
77

88
"github.com/openset/leetcode/internal/base"
9+
"github.com/openset/leetcode/internal/build"
910
"github.com/openset/leetcode/internal/clean"
1011
"github.com/openset/leetcode/internal/description"
1112
"github.com/openset/leetcode/internal/help"
@@ -32,6 +33,7 @@ func init() {
3233
test.CmdTest,
3334
description.CmdDescription,
3435
update.CmdUpdate,
36+
build.CmdBuild,
3537
clean.CmdClean,
3638
version.CmdVersion,
3739
help.CmdHelp,

0 commit comments

Comments
 (0)