blob: e1ee17e2f951d8c6535ec4265bfcfa228b86b9bb [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The makefuchsia.go script builds a GOROOT in the out/ build directory
// using sources from third_party/go.
package main
import (
"bytes"
"flag"
"io/ioutil"
"log"
"os"
"os/exec"
"path/filepath"
"time"
)
var (
bootstrapGoroot = flag.String("bootstrap-goroot", "", "Path to go root used for bootstrap")
gocache = flag.String("gocache", "", "Path to GOCACHE")
goroot = flag.String("goroot", "", "Path to the output GOROOT")
depfilePath = flag.String("depfile", "", "depfile to write into")
stampPath = flag.String("stamp-file", "", "Path of a file to create upon completion")
)
func main() {
log.SetFlags(log.Lshortfile)
flag.Parse()
src := filepath.Join(*goroot, "src")
abs, err := filepath.Abs(filepath.Join(src, "make.bash"))
if err != nil {
log.Fatal(err)
}
cmd := exec.Command(abs)
cmd.Dir = src
cmd.Env = []string{
"PATH=" + os.Getenv("PATH"),
"GOROOT_BOOTSTRAP=" + *bootstrapGoroot,
"GOCACHE=" + *gocache,
}
if tmp, ok := os.LookupEnv("TMPDIR"); ok {
cmd.Env = append(cmd.Env, "TMPDIR=" + tmp)
}
if out, err := cmd.CombinedOutput(); err != nil {
log.Fatalf("%s failed: %s\n%s", cmd.Args, err, out)
}
var buf bytes.Buffer
buf.WriteString(*stampPath)
buf.WriteByte(':')
if err := filepath.Walk(*goroot, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() {
buf.WriteByte(' ')
buf.WriteString(path)
}
return nil
}); err != nil {
log.Fatal(err)
}
buf.WriteByte('\n')
if err := ioutil.WriteFile(*depfilePath, buf.Bytes(), os.ModePerm); err != nil {
log.Fatal(err)
}
f, err := os.OpenFile(*stampPath, os.O_CREATE|os.O_TRUNC, os.ModePerm)
if err != nil {
log.Fatal(err)
}
if err := f.Close(); err != nil {
log.Fatal(err)
}
now := time.Now()
if err := os.Chtimes(*stampPath, now, now); err != nil {
log.Fatal(err)
}
}