diff options
| author | Andrew Donnellan <andrew.donnellan@au1.ibm.com> | 2019-03-26 14:36:39 +1100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2019-05-03 10:00:16 +0200 |
| commit | 90c8f82ae8f12735e0e06d422dfea80758aaf0a5 (patch) | |
| tree | bf6d82e78966fb6d64ea7178d7ed8adfbfc92b2c /pkg/build/linux.go | |
| parent | 0642ca0c5c781f144cabb6e4b811a6714d5eed51 (diff) | |
pkg/build: Add ppc64le Linux as a supported configuration
Enable the Linux builder for ppc64le.
For ppc64le, we use zImage rather than bzImage as our kernel target. Pass
through the target architecture to buildKernel() so we can pick the right
target based on arch.
Closes: #1084 ("pkg/build: Support building Linux on ppc64le")
Signed-off-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Diffstat (limited to 'pkg/build/linux.go')
| -rw-r--r-- | pkg/build/linux.go | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/pkg/build/linux.go b/pkg/build/linux.go index e3c8a6d9f..c56595743 100644 --- a/pkg/build/linux.go +++ b/pkg/build/linux.go @@ -25,7 +25,7 @@ type linux struct{} func (linux linux) build(targetArch, vmType, kernelDir, outputDir, compiler, userspaceDir, cmdlineFile, sysctlFile string, config []byte) error { - if err := linux.buildKernel(kernelDir, outputDir, compiler, config); err != nil { + if err := linux.buildKernel(targetArch, kernelDir, outputDir, compiler, config); err != nil { return err } if err := linux.createImage(targetArch, vmType, kernelDir, outputDir, userspaceDir, cmdlineFile, @@ -35,7 +35,7 @@ func (linux linux) build(targetArch, vmType, kernelDir, outputDir, compiler, use return nil } -func (linux) buildKernel(kernelDir, outputDir, compiler string, config []byte) error { +func (linux) buildKernel(targetArch, kernelDir, outputDir, compiler string, config []byte) error { configFile := filepath.Join(kernelDir, ".config") if err := osutil.WriteFile(configFile, config); err != nil { return fmt.Errorf("failed to write config file: %v", err) @@ -59,9 +59,18 @@ func (linux) buildKernel(kernelDir, outputDir, compiler string, config []byte) e if err := osutil.CopyFile(configFile, outputConfig); err != nil { return err } - // We build only bzImage as we currently don't use modules. + // We build only zImage/bzImage as we currently don't use modules. cpu := strconv.Itoa(runtime.NumCPU()) - cmd = osutil.Command("make", "bzImage", "-j", cpu, "CC="+compiler) + + var target string + switch targetArch { + case "386", "amd64": + target = "bzImage" + case "ppc64le": + target = "zImage" + } + cmd = osutil.Command("make", target, "-j", cpu, "CC="+compiler) + if err := osutil.Sandbox(cmd, true, true); err != nil { return err } @@ -87,8 +96,16 @@ func (linux) createImage(targetArch, vmType, kernelDir, outputDir, userspaceDir, if err := osutil.WriteExecFile(scriptFile, []byte(createImageScript)); err != nil { return fmt.Errorf("failed to write script file: %v", err) } - bzImage := filepath.Join(kernelDir, filepath.FromSlash("arch/x86/boot/bzImage")) - cmd := osutil.Command(scriptFile, userspaceDir, bzImage, targetArch) + + var kernelImage string + switch targetArch { + case "386", "amd64": + kernelImage = "arch/x86/boot/bzImage" + case "ppc64le": + kernelImage = "arch/powerpc/boot/zImage.pseries" + } + kernelImagePath := filepath.Join(kernelDir, filepath.FromSlash(kernelImage)) + cmd := osutil.Command(scriptFile, userspaceDir, kernelImagePath, targetArch) cmd.Dir = tempDir cmd.Env = append([]string{}, os.Environ()...) cmd.Env = append(cmd.Env, |
