mirror of
https://github.com/golang/go
synced 2024-11-25 09:07:58 -07:00
go/build: fix build and clean ups
R=rsc CC=golang-dev https://golang.org/cl/4620045
This commit is contained in:
parent
4a8de67058
commit
7c248ae077
@ -48,10 +48,9 @@ func Build(tree *Tree, pkg string, info *DirInfo) (*Script, os.Error) {
|
|||||||
if len(info.CgoFiles) > 0 {
|
if len(info.CgoFiles) > 0 {
|
||||||
cgoFiles := b.abss(info.CgoFiles...)
|
cgoFiles := b.abss(info.CgoFiles...)
|
||||||
s.addInput(cgoFiles...)
|
s.addInput(cgoFiles...)
|
||||||
outInter, outGo, outObj := b.cgo(cgoFiles)
|
outGo, outObj := b.cgo(cgoFiles)
|
||||||
gofiles = append(gofiles, outGo...)
|
gofiles = append(gofiles, outGo...)
|
||||||
ofiles = append(ofiles, outObj...)
|
ofiles = append(ofiles, outObj...)
|
||||||
s.addIntermediate(outInter...)
|
|
||||||
s.addIntermediate(outGo...)
|
s.addIntermediate(outGo...)
|
||||||
s.addIntermediate(outObj...)
|
s.addIntermediate(outObj...)
|
||||||
}
|
}
|
||||||
@ -71,7 +70,7 @@ func Build(tree *Tree, pkg string, info *DirInfo) (*Script, os.Error) {
|
|||||||
s.addInput(sfile)
|
s.addInput(sfile)
|
||||||
b.asm(ofile, sfile)
|
b.asm(ofile, sfile)
|
||||||
ofiles = append(ofiles, ofile)
|
ofiles = append(ofiles, ofile)
|
||||||
s.addIntermediate(sfile, ofile)
|
s.addIntermediate(ofile)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(ofiles) == 0 {
|
if len(ofiles) == 0 {
|
||||||
@ -158,6 +157,7 @@ func (s *Script) Stale() bool {
|
|||||||
// Clean removes the Script's Intermediate files.
|
// Clean removes the Script's Intermediate files.
|
||||||
// It tries to remove every file and returns the first error it encounters.
|
// It tries to remove every file and returns the first error it encounters.
|
||||||
func (s *Script) Clean() (err os.Error) {
|
func (s *Script) Clean() (err os.Error) {
|
||||||
|
// Reverse order so that directories get removed after the files they contain.
|
||||||
for i := len(s.Intermediate) - 1; i >= 0; i-- {
|
for i := len(s.Intermediate) - 1; i >= 0; i-- {
|
||||||
if e := os.Remove(s.Intermediate[i]); err == nil {
|
if e := os.Remove(s.Intermediate[i]); err == nil {
|
||||||
err = e
|
err = e
|
||||||
@ -169,6 +169,7 @@ func (s *Script) Clean() (err os.Error) {
|
|||||||
// Clean removes the Script's Intermediate and Output files.
|
// Clean removes the Script's Intermediate and Output files.
|
||||||
// It tries to remove every file and returns the first error it encounters.
|
// It tries to remove every file and returns the first error it encounters.
|
||||||
func (s *Script) Nuke() (err os.Error) {
|
func (s *Script) Nuke() (err os.Error) {
|
||||||
|
// Reverse order so that directories get removed after the files they contain.
|
||||||
for i := len(s.Output) - 1; i >= 0; i-- {
|
for i := len(s.Output) - 1; i >= 0; i-- {
|
||||||
if e := os.Remove(s.Output[i]); err == nil {
|
if e := os.Remove(s.Output[i]); err == nil {
|
||||||
err = e
|
err = e
|
||||||
@ -337,7 +338,7 @@ func (b *build) gccArgs(args ...string) []string {
|
|||||||
return append([]string{"gcc", m, "-I", b.path, "-g", "-fPIC", "-O2"}, args...)
|
return append([]string{"gcc", m, "-I", b.path, "-g", "-fPIC", "-O2"}, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *build) cgo(cgofiles []string) (outInter, outGo, outObj []string) {
|
func (b *build) cgo(cgofiles []string) (outGo, outObj []string) {
|
||||||
// cgo
|
// cgo
|
||||||
// TODO(adg): CGOPKGPATH
|
// TODO(adg): CGOPKGPATH
|
||||||
// TODO(adg): CGO_FLAGS
|
// TODO(adg): CGO_FLAGS
|
||||||
@ -359,8 +360,8 @@ func (b *build) cgo(cgofiles []string) (outInter, outGo, outObj []string) {
|
|||||||
})
|
})
|
||||||
outGo = append(outGo, gofiles...)
|
outGo = append(outGo, gofiles...)
|
||||||
exportH := filepath.Join(b.path, "_cgo_export.h")
|
exportH := filepath.Join(b.path, "_cgo_export.h")
|
||||||
outInter = append(outInter, exportH, defunC, b.obj+"_cgo_flags")
|
b.script.addIntermediate(defunC, exportH, b.obj+"_cgo_flags")
|
||||||
outInter = append(outInter, cfiles...)
|
b.script.addIntermediate(cfiles...)
|
||||||
|
|
||||||
// cc _cgo_defun.c
|
// cc _cgo_defun.c
|
||||||
defunObj := b.obj + "_cgo_defun." + b.arch
|
defunObj := b.obj + "_cgo_defun." + b.arch
|
||||||
@ -376,12 +377,12 @@ func (b *build) cgo(cgofiles []string) (outInter, outGo, outObj []string) {
|
|||||||
if !strings.HasSuffix(ofile, "_cgo_main.o") {
|
if !strings.HasSuffix(ofile, "_cgo_main.o") {
|
||||||
outObj = append(outObj, ofile)
|
outObj = append(outObj, ofile)
|
||||||
} else {
|
} else {
|
||||||
outInter = append(outInter, ofile)
|
b.script.addIntermediate(ofile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dynObj := b.obj + "_cgo_.o"
|
dynObj := b.obj + "_cgo_.o"
|
||||||
b.gccLink(dynObj, linkobj...)
|
b.gccLink(dynObj, linkobj...)
|
||||||
outInter = append(outInter, dynObj)
|
b.script.addIntermediate(dynObj)
|
||||||
|
|
||||||
// cgo -dynimport
|
// cgo -dynimport
|
||||||
importC := b.obj + "_cgo_import.c"
|
importC := b.obj + "_cgo_import.c"
|
||||||
@ -391,7 +392,7 @@ func (b *build) cgo(cgofiles []string) (outInter, outGo, outObj []string) {
|
|||||||
Input: []string{dynObj},
|
Input: []string{dynObj},
|
||||||
Output: []string{importC},
|
Output: []string{importC},
|
||||||
})
|
})
|
||||||
outInter = append(outInter, importC)
|
b.script.addIntermediate(importC)
|
||||||
|
|
||||||
// cc _cgo_import.ARCH
|
// cc _cgo_import.ARCH
|
||||||
importObj := b.obj + "_cgo_import." + b.arch
|
importObj := b.obj + "_cgo_import." + b.arch
|
||||||
|
Loading…
Reference in New Issue
Block a user