// Build toolchain for a given target platform func buildToolchain(goos string, arch string, settings *config.Settings) error { goroot := settings.GoRoot scriptpath := core.GetMakeScriptPath(goroot) cmd := exec.Command(scriptpath) cmd.Dir = filepath.Join(goroot, "src") noClean := settings.GetTaskSettingBool(TASK_BUILD_TOOLCHAIN, "no-clean") if noClean { cmd.Args = append(cmd.Args, "--no-clean") } //0.8.5: no longer using cgoEnabled env := []string{"GOOS=" + goos, "GOARCH=" + arch} extraEnv := settings.GetTaskSettingStringSlice(TASK_BUILD_TOOLCHAIN, "extra-env") if settings.IsVerbose() { log.Printf("extra-env: %v", extraEnv) } env = append(env, extraEnv...) if goos == platforms.LINUX && arch == platforms.ARM { // see http://dave.cheney.net/2012/09/08/an-introduction-to-cross-compilation-with-go //NOTE: I don't think it has any effect on fp goarm := settings.GetTaskSettingString(TASK_BUILD_TOOLCHAIN, "GOARM") if goarm != "" { env = append(env, "GOARM="+goarm) } } if settings.IsVerbose() { log.Printf("Setting env: %v", env) } cmd.Env = append([]string{}, os.Environ()...) cmd.Env = append(cmd.Env, env...) if settings.IsVerbose() { log.Printf("'make' env: GOOS=%s GOARCH=%s GOROOT=%s", goos, arch, goroot) log.Printf("Invoking '%v' from %s", executils.PrintableArgs(cmd.Args), cmd.Dir) } executils.RedirectIO(cmd) err := cmd.Start() if err != nil { log.Printf("Build toolchain: Launch error: %s", err) return err } err = cmd.Wait() if err != nil { log.Printf("Build Toolchain: wait error: %s", err) return err } if settings.IsVerbose() { log.Printf("Complete") } return err }
func getArmArchName(settings *config.Settings) string { armArchName := settings.GetTaskSettingString(TASK_PKG_BUILD, "armarch") if armArchName == "" { //derive it from GOARM version: goArm := settings.GetTaskSettingString(TASK_XC, "GOARM") if goArm == "5" { armArchName = "armel" } else { armArchName = "armhf" } } return armArchName }
func codesignPlat(goos, arch string, binPath string, settings *config.Settings) error { // settings.codesign only works on OS X for binaries generated for OS X. id := settings.GetTaskSettingString("codesign", "id") if id != "" && runtime.GOOS == platforms.DARWIN && goos == platforms.DARWIN { if err := signBinary(binPath, id); err != nil { log.Printf("codesign failed: %s", err) return err } else { log.Printf("Signed with ID: %q", id) return nil } } return nil }