49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package soft
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"sunhpc/internal/log"
|
|
"sunhpc/pkg/utils"
|
|
)
|
|
|
|
// compileFromSource 通用源码编译流程
|
|
func compileFromSource(srcDir, prefix string, jobs int) error {
|
|
// 切换到源码目录
|
|
if err := os.Chdir(srcDir); err != nil {
|
|
return fmt.Errorf("进入源码目录失败: %v", err)
|
|
}
|
|
|
|
// 检测 configure 脚本是否存在
|
|
if utils.FileExists("./configure") {
|
|
log.Debug("执行 configure ...")
|
|
cmd := exec.Command("./configure", "--prefix="+prefix)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
if err := cmd.Run(); err != nil {
|
|
return fmt.Errorf("configure 失败: %v", err)
|
|
}
|
|
}
|
|
|
|
// make
|
|
log.Debugf("执行 make -j%d ...", jobs)
|
|
cmd := exec.Command("make", fmt.Sprintf("-j%d", jobs))
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
if err := cmd.Run(); err != nil {
|
|
return fmt.Errorf("make 失败: %v", err)
|
|
}
|
|
|
|
// make install
|
|
log.Debug("执行 make install ...")
|
|
cmd = exec.Command("make", "install")
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
if err := cmd.Run(); err != nil {
|
|
return fmt.Errorf("make install 失败: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|