blob: 80f7567ada324d001df352429b96cc76d206b32b [file] [log] [blame]
package config
import (
"context"
"fmt"
"log"
"net/url"
"os"
"path/filepath"
"cloud.google.com/go/storage"
"cos.googlesource.com/cos/tools.git/src/cmd/cos_gpu_driver_builder/internal/builder"
"cos.googlesource.com/cos/tools.git/src/pkg/gcs"
"cos.googlesource.com/cos/tools.git/src/pkg/gpuconfig"
)
func outputDriverFile(config gpuconfig.GPUPrecompilationConfig) string {
driverRunfile := fmt.Sprintf("NVIDIA-Linux-x86_64-%s-custom.run", config.DriverVersion)
return fmt.Sprintf("%s/%s", config.ProtoConfig.GetDriverOutputGcsDir(), driverRunfile)
}
func ProcessConfigs(ctx context.Context, client *storage.Client, configs []gpuconfig.GPUPrecompilationConfig, dryRun bool) error {
for _, config := range configs {
log.Printf("building precompiled GPU driver for %s:%s, driver version %s\n", config.VersionType, config.Version, config.DriverVersion)
if processed, _ := gcs.GCSObjectExists(ctx, client, outputDriverFile(config)); processed {
continue
}
dir, precompiledDriver, err := builder.BuildPrecompiledDriver(ctx, client, config)
defer os.RemoveAll(dir)
if err != nil {
log.Printf("precompilation failed for: %s, driver version %s: %v\n", config.Version, config.DriverVersion, err)
continue
}
outputURL, err := url.Parse(config.ProtoConfig.GetDriverOutputGcsDir())
if err != nil {
log.Printf("failed to parse driver output gcs dir: %v\n", err)
}
outputURL.Path = filepath.Join(outputURL.Path, precompiledDriver)
outputDriverFile := outputURL.String()
if !dryRun {
if err := gcs.UploadGCSObject(ctx, client, filepath.Join(dir, precompiledDriver), outputDriverFile); err != nil {
log.Printf("export failed for: %s, driver version %s: %v\n", config.Version, config.DriverVersion, err)
continue
}
}
}
return nil
}