main: run the compiler from any path
Этот коммит содержится в:
родитель
453450f40d
коммит
fd6dda5e4f
3 изменённых файлов: 15 добавлений и 5 удалений
|
@ -134,7 +134,7 @@ func (c *Compiler) Module() llvm.Module {
|
||||||
return c.mod
|
return c.mod
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Compiler) Parse(mainPath string, buildTags []string) error {
|
func (c *Compiler) Parse(mainPath, sourceDir string, buildTags []string) error {
|
||||||
tripleSplit := strings.Split(c.triple, "-")
|
tripleSplit := strings.Split(c.triple, "-")
|
||||||
|
|
||||||
config := loader.Config{
|
config := loader.Config{
|
||||||
|
@ -148,7 +148,7 @@ func (c *Compiler) Parse(mainPath string, buildTags []string) error {
|
||||||
Build: &build.Context{
|
Build: &build.Context{
|
||||||
GOARCH: tripleSplit[0],
|
GOARCH: tripleSplit[0],
|
||||||
GOOS: tripleSplit[2],
|
GOOS: tripleSplit[2],
|
||||||
GOROOT: ".",
|
GOROOT: sourceDir,
|
||||||
GOPATH: runtime.GOROOT(),
|
GOPATH: runtime.GOROOT(),
|
||||||
CgoEnabled: true,
|
CgoEnabled: true,
|
||||||
UseAllFiles: false,
|
UseAllFiles: false,
|
||||||
|
|
6
main.go
6
main.go
|
@ -32,7 +32,7 @@ func Compile(pkgName, outpath string, spec *TargetSpec, printIR, dumpSSA bool, p
|
||||||
fmt.Println(c.IR())
|
fmt.Println(c.IR())
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
return c.Parse(pkgName, spec.BuildTags)
|
return c.Parse(pkgName, sourceDir(), spec.BuildTags)
|
||||||
}()
|
}()
|
||||||
if parseErr != nil {
|
if parseErr != nil {
|
||||||
return parseErr
|
return parseErr
|
||||||
|
@ -93,6 +93,7 @@ func Compile(pkgName, outpath string, spec *TargetSpec, printIR, dumpSSA bool, p
|
||||||
cmd := exec.Command(spec.Linker, args...)
|
cmd := exec.Command(spec.Linker, args...)
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
|
cmd.Dir = sourceDir()
|
||||||
err = cmd.Run()
|
err = cmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -182,6 +183,7 @@ func Flash(pkgName, target, port string, printIR, dumpSSA bool, printSizes strin
|
||||||
cmd := exec.Command("/bin/sh", "-c", flashCmd)
|
cmd := exec.Command("/bin/sh", "-c", flashCmd)
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
|
cmd.Dir = sourceDir()
|
||||||
return cmd.Run()
|
return cmd.Run()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -192,7 +194,7 @@ func Run(pkgName string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("compiler: " + err.Error())
|
return errors.New("compiler: " + err.Error())
|
||||||
}
|
}
|
||||||
err = c.Parse(pkgName, []string{runtime.GOOS, runtime.GOARCH})
|
err = c.Parse(pkgName, sourceDir(), []string{runtime.GOOS, runtime.GOARCH})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("compiler: " + err.Error())
|
return errors.New("compiler: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
10
target.go
10
target.go
|
@ -34,7 +34,7 @@ func LoadTarget(target string) (*TargetSpec, error) {
|
||||||
|
|
||||||
// See whether there is a target specification for this target (e.g.
|
// See whether there is a target specification for this target (e.g.
|
||||||
// Arduino).
|
// Arduino).
|
||||||
path := filepath.Join("targets", strings.ToLower(target)+".json")
|
path := filepath.Join(sourceDir(), "targets", strings.ToLower(target)+".json")
|
||||||
if fp, err := os.Open(path); err == nil {
|
if fp, err := os.Open(path); err == nil {
|
||||||
defer fp.Close()
|
defer fp.Close()
|
||||||
err := json.NewDecoder(fp).Decode(spec)
|
err := json.NewDecoder(fp).Decode(spec)
|
||||||
|
@ -50,3 +50,11 @@ func LoadTarget(target string) (*TargetSpec, error) {
|
||||||
|
|
||||||
return spec, nil
|
return spec, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return the source directory of this package, or "." when it cannot be
|
||||||
|
// recovered.
|
||||||
|
func sourceDir() string {
|
||||||
|
// https://stackoverflow.com/a/32163888/559350
|
||||||
|
_, path, _, _ := runtime.Caller(0)
|
||||||
|
return filepath.Dir(path)
|
||||||
|
}
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче