@@ -31,66 +31,34 @@ func (gvisor gvisor) build(params Params) (ImageDetails, error) {
3131 if err != nil {
3232 return ImageDetails {}, fmt .Errorf ("cannot parse gVisor configuration: %w" , err )
3333 }
34- args := [] string {}
34+ bazelOpts := "--verbose_failures"
3535
3636 target := "//runsc:runsc"
37- if config .Race {
38- args = append (args , "--config=race" )
39- target = "//runsc:runsc-race"
40- }
4137 if config .Coverage {
42- coverageFiles := "//pkg/..."
43- exclusions := []string {
44- "//pkg/sentry/platform" , "//pkg/ring0" , // Breaks kvm.
45- "//pkg/coverage:coverage" , // Too slow.
46- }
4738 if config .Race {
48- // These targets use go:norace, which is not
49- // respected by coverage instrumentation. Race builds
50- // will be instrumented with atomic coverage (using
51- // sync/atomic.AddInt32), which will not work.
52- exclusions = append (exclusions , []string {
53- "//pkg/sleep:sleep" ,
54- "//pkg/sync:sync" ,
55- "//pkg/syncevent:syncevent" ,
56- }... )
39+ target = "//runsc:runsc_race_coverage"
40+ } else {
41+ target = "//runsc:runsc_coverage"
5742 }
58- for _ , f := range exclusions {
59- coverageFiles += ",-" + f
60- }
61- args = append (args , []string {
62- "--collect_code_coverage" ,
63- "--instrumentation_filter=" + coverageFiles }... )
64- }
65- buildArgs := []string {"build" , "--verbose_failures" }
66- buildArgs = append (buildArgs , args ... )
67- buildArgs = append (buildArgs , target )
68- log .Logf (0 , "bazel: %v" , buildArgs )
69- // The 1 hour timeout is quite high. But we've seen false positives with 20 mins
70- // on the first build after bazel/deps update. Also other gvisor instances running
71- // on the same machine contribute to longer build times.
72- if _ , err := osutil .RunCmd (60 * time .Minute , params .KernelDir , params .Compiler , buildArgs ... ); err != nil {
73- return ImageDetails {}, err
43+ } else if config .Race {
44+ bazelOpts += " --config=race "
45+ target = "//runsc:runsc-race"
7446 }
7547
76- // Find out a path to the runsc binary.
77- aqueryArgs := append ([]string {"aquery" }, args ... )
78- aqueryArgs = append (aqueryArgs , fmt .Sprintf ("mnemonic(\" GoLink\" , %s)" , target ))
79- log .Logf (0 , "bazel: %v" , aqueryArgs )
80- out , err := osutil .RunCmd (10 * time .Minute , params .KernelDir , params .Compiler , aqueryArgs ... )
81- if err != nil {
48+ outBinary := filepath .Join (params .OutputDir , "image" )
49+ cmd := osutil .Command ("make" , "copy" ,
50+ "DOCKER_BUILD=0" ,
51+ fmt .Sprintf ("BAZEL_OPTIONS=%s" , bazelOpts ),
52+ fmt .Sprintf ("TARGETS=%s" , target ),
53+ fmt .Sprintf ("DESTINATION=%s" , outBinary ),
54+ )
55+ cmd .Dir = params .KernelDir
56+
57+ log .Logf (0 , "bazel copy: %v" , cmd .Env )
58+ if _ , err := osutil .Run (60 * time .Minute , cmd ); err != nil {
8259 return ImageDetails {}, err
8360 }
8461
85- match := bazelTargetPath .FindSubmatch (out )
86- if match == nil {
87- return ImageDetails {}, fmt .Errorf ("failed to find the runsc binary" )
88- }
89- outBinary := filepath .Join (params .KernelDir , filepath .FromSlash (string (match [1 ])))
90-
91- if err := osutil .CopyFile (outBinary , filepath .Join (params .OutputDir , "image" )); err != nil {
92- return ImageDetails {}, err
93- }
9462 sysTarget := targets .Get (params .TargetOS , params .TargetArch )
9563 return ImageDetails {}, osutil .CopyFile (outBinary , filepath .Join (params .OutputDir , "obj" , sysTarget .KernelObject ))
9664}
0 commit comments