// Copyright 2017 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
// +build
package main
import (
"bytes"
"fmt"
"io/ioutil"
"os"
"regexp"
)
func main() {
out, err := os.Create("generated.go")
if err != nil {
failf("%v", err)
}
defer out.Close()
data, err := ioutil.ReadFile("../../executor/common.h")
if err != nil {
failf("%v", err)
}
for _, include := range []string{
"common_linux.h",
"common_akaros.h",
"common_bsd.h",
"common_fuchsia.h",
"common_windows.h",
"common_test.h",
"common_kvm_amd64.h",
"common_kvm_arm64.h",
"kvm.h",
"kvm.S.h",
} {
contents, err := ioutil.ReadFile("../../executor/" + include)
if err != nil {
failf("%v", err)
}
replace := []byte("#include \"" + include + "\"")
if bytes.Index(data, replace) == -1 {
failf("can't fine %v include", include)
}
data = bytes.Replace(data, replace, contents, -1)
}
for _, remove := range []string{
"(\n|^)\\s*//.*",
"\\s*//.*",
} {
data = regexp.MustCompile(remove).ReplaceAll(data, nil)
}
fmt.Fprintf(out, "// AUTOGENERATED FROM executor/common.h\n\n")
fmt.Fprintf(out, "package csource\n\nvar commonHeader = `\n")
out.Write(data)
fmt.Fprintf(out, "`\n")
}
func failf(msg string, args ...interface{}) {
fmt.Fprintf(os.Stderr, msg+"\n", args...)
os.Exit(1)
}