Let wuffs-c take a no-op C formatter
Reinforcing the previous commit's (e5cc4a42) observation, over 93% of
compilation time (converting foo.wuffs into foo.c) is spent piping the
generated C code through clang-format.
----
$ time wuffs gen -cformatter=clang-format-5.0 > /dev/null
real 0m2.855s
user 0m2.680s
sys 0m0.286s
$ time wuffs gen -cformatter= > /dev/null
real 0m0.175s
user 0m0.172s
sys 0m0.050s
----
diff --git a/cmd/wuffs-c/release.go b/cmd/wuffs-c/release.go
index 1b435c6..382d359 100644
--- a/cmd/wuffs-c/release.go
+++ b/cmd/wuffs-c/release.go
@@ -137,6 +137,11 @@
now = time.Now()
}
+ if *cformatterFlag == "" {
+ os.Stdout.Write(unformatted.Bytes())
+ return nil
+ }
+
cmd := exec.Command(*cformatterFlag, "-style=Chromium")
cmd.Stdin = unformatted
cmd.Stdout = os.Stdout
diff --git a/cmd/wuffs/gen.go b/cmd/wuffs/gen.go
index 5bb1619..61133e6 100644
--- a/cmd/wuffs/gen.go
+++ b/cmd/wuffs/gen.go
@@ -110,7 +110,7 @@
if genlib {
return h.genlibAffected()
}
- return genrelease(wuffsRoot, langs, v)
+ return genrelease(wuffsRoot, langs, v, *cformatterFlag)
}
type genHelper struct {
diff --git a/cmd/wuffs/release.go b/cmd/wuffs/release.go
index ada21ac..902555b 100644
--- a/cmd/wuffs/release.go
+++ b/cmd/wuffs/release.go
@@ -24,13 +24,13 @@
cf "github.com/google/wuffs/cmd/commonflags"
)
-func genrelease(wuffsRoot string, langs []string, v cf.Version) error {
+func genrelease(wuffsRoot string, langs []string, v cf.Version, cformatter string) error {
revision := runGitCommand(wuffsRoot, "rev-parse", "HEAD")
commitDate := runGitCommand(wuffsRoot, "show",
"--quiet", "--date=format-local:%Y-%m-%d", "--format=%cd")
gitRevListCount := runGitCommand(wuffsRoot, "rev-list", "--count", "HEAD")
for _, lang := range langs {
- filename, contents, err := genreleaseLang(wuffsRoot, revision, commitDate, gitRevListCount, v, lang)
+ filename, contents, err := genreleaseLang(wuffsRoot, revision, commitDate, gitRevListCount, v, cformatter, lang)
if err != nil {
return err
}
@@ -41,7 +41,7 @@
return nil
}
-func genreleaseLang(wuffsRoot string, revision string, commitDate, gitRevListCount string, v cf.Version, lang string) (filename string, contents []byte, err error) {
+func genreleaseLang(wuffsRoot string, revision string, commitDate, gitRevListCount string, v cf.Version, cformatter string, lang string) (filename string, contents []byte, err error) {
qualFilenames, err := findFiles(filepath.Join(wuffsRoot, "gen", lang), "."+lang)
if err != nil {
return "", nil, err
@@ -57,6 +57,9 @@
if gitRevListCount != "" {
args = append(args, "-gitrevlistcount", gitRevListCount)
}
+ if lang == "c" {
+ args = append(args, "-cformatter", cformatter)
+ }
args = append(args, qualFilenames...)
stdout := &bytes.Buffer{}
diff --git a/cmd/wuffs/test.go b/cmd/wuffs/test.go
index fd85e3d..bb4725f 100644
--- a/cmd/wuffs/test.go
+++ b/cmd/wuffs/test.go
@@ -116,7 +116,7 @@
return err
}
}
- if err := genrelease(wuffsRoot, langs, cf.Version{}); err != nil {
+ if err := genrelease(wuffsRoot, langs, cf.Version{}, *cformatterFlag); err != nil {
return err
}
}
diff --git a/internal/cgen/cgen.go b/internal/cgen/cgen.go
index f910e97..0a580a5 100644
--- a/internal/cgen/cgen.go
+++ b/internal/cgen/cgen.go
@@ -194,6 +194,10 @@
now = time.Now()
}
+ if *cformatterFlag == "" {
+ return unformatted, nil
+ }
+
stdout := &bytes.Buffer{}
cmd := exec.Command(*cformatterFlag, "-style=Chromium")
cmd.Stdin = bytes.NewReader(unformatted)