func (d *Deter) Build(build string) error { dbg.Lvl1("Building for", d.Login, d.Host, d.Project, build) start := time.Now() var wg sync.WaitGroup // Start with a clean build-directory current, _ := os.Getwd() dbg.Lvl4("Current dir is:", current) defer os.Chdir(current) // Go into deterlab-dir and create the build-dir os.Chdir(d.DeterDir) os.RemoveAll(d.BuildDir) os.Mkdir(d.BuildDir, 0777) // start building the necessary packages packages := []string{"logserver", "forkexec", "../../app", "deter"} if build != "" { packages = strings.Split(build, ",") } dbg.Lvl3("Starting to build all executables", packages) for _, p := range packages { basename := path.Base(p) dbg.Lvl4("Building ", p, "into", basename) wg.Add(1) src := p + "/" + basename + ".go" dst := d.BuildDir + "/" + basename if p == "deter" { go func(s, d string) { defer wg.Done() // the users node has a 386 FreeBSD architecture out, err := cliutils.Build(s, d, "386", "freebsd") if err != nil { cliutils.KillGo() fmt.Println(out) log.Fatal(err) } }(src, dst) continue } go func(s, d string) { defer wg.Done() // deter has an amd64, linux architecture out, err := cliutils.Build(s, d, "amd64", "linux") if err != nil { cliutils.KillGo() fmt.Println(out) log.Fatal(err) } }(src, dst) } // wait for the build to finish wg.Wait() dbg.Lvl1("Build is finished after", time.Since(start)) return nil }
// Will build the application func (d *Localhost) Build(build string) error { src, _ := filepath.Rel(d.LocalDir, d.AppDir+"/"+d.App) dst := d.RunDir + "/" + d.App start := time.Now() // build for the local machine res, err := cliutils.Build(src, dst, runtime.GOARCH, runtime.GOOS) if err != nil { dbg.Fatal("Error while building for localhost (src", src, ", dst", dst, ":", res) } dbg.Lvl3("Localhost: Build src", src, ", dst", dst) dbg.Lvl3("Localhost: Results of localhost build:", res) dbg.Lvl2("Localhost: build finished in", time.Since(start)) return err }
// build is the name of the app to build // empty = all otherwise build specific package func (d *Deterlab) Build(build string) error { dbg.Lvl1("Building for", d.Login, d.Host, d.Project, build) start := time.Now() var wg sync.WaitGroup // Start with a clean build-directory current, _ := os.Getwd() dbg.Lvl3("Current dir is:", current, d.DeterDir) defer os.Chdir(current) // Go into deterlab-dir and create the build-dir os.Chdir(d.DeterDir) os.RemoveAll(d.BuildDir) os.Mkdir(d.BuildDir, 0777) // start building the necessary packages packages := []string{"forkexec", "app", "users"} if build != "" { packages = strings.Split(build, ",") } dbg.Lvl3("Starting to build all executables", packages) for _, p := range packages { src_dir := d.DeterDir + "/" + p basename := path.Base(p) if p == "app" { src_dir = d.AppDir + "/" + d.App basename = d.App } dst := d.BuildDir + "/" + basename dbg.Lvl3("Building", p, "from", src_dir, "into", basename) wg.Add(1) if p == "users" { go func(src, dest string) { defer wg.Done() // the users node has a 386 FreeBSD architecture // go won't compile on an absolute path so we need to // convert it to a relative one src_rel, _ := filepath.Rel(d.DeterDir, src) out, err := cliutils.Build("./"+src_rel, dest, "386", "freebsd") if err != nil { cliutils.KillGo() dbg.Lvl1(out) dbg.Fatal(err) } }(src_dir, dst) continue } go func(src, dest string) { defer wg.Done() // deter has an amd64, linux architecture src_rel, _ := filepath.Rel(d.DeterDir, src) dbg.Lvl3("Relative-path is", src, src_rel, d.DeterDir) out, err := cliutils.Build("./"+src_rel, dest, "amd64", "linux") if err != nil { cliutils.KillGo() dbg.Lvl1(out) dbg.Fatal(err) } }(src_dir, dst) } // wait for the build to finish wg.Wait() dbg.Lvl1("Build is finished after", time.Since(start)) return nil }