@@ -329,15 +329,14 @@ func (b2g *bpf2go) convertAll() (err error) {
329
329
return nil
330
330
}
331
331
332
- // compileOne compiles a single source file and returns the temporary object file name
333
- // and any dependencies found during compilation.
334
- func (b2g * bpf2go ) compileOne (tgt gen.Target , cwd , source , objFileName , outputStem string ) (tmpObjFileName string , deps []dependency , err error ) {
332
+ // compileOne compiles a single source file and returns any dependencies found during compilation.
333
+ func (b2g * bpf2go ) compileOne (tgt gen.Target , cwd , source , objFileName string ) (deps []dependency , err error ) {
335
334
var depInput * os.File
336
335
cFlags := slices .Clone (b2g .cFlags )
337
336
if b2g .makeBase != "" {
338
337
depInput , err = os .CreateTemp ("" , "bpf2go" )
339
338
if err != nil {
340
- return "" , nil , err
339
+ return nil , err
341
340
}
342
341
defer depInput .Close ()
343
342
defer os .Remove (depInput .Name ())
@@ -353,7 +352,7 @@ func (b2g *bpf2go) compileOne(tgt gen.Target, cwd, source, objFileName, outputSt
353
352
)
354
353
}
355
354
356
- // Compile to final object file name first
355
+ // Compile to final object file name
357
356
err = gen .Compile (gen.CompileArgs {
358
357
CC : b2g .cc ,
359
358
Strip : b2g .strip ,
@@ -365,27 +364,18 @@ func (b2g *bpf2go) compileOne(tgt gen.Target, cwd, source, objFileName, outputSt
365
364
Dest : objFileName ,
366
365
})
367
366
if err != nil {
368
- return "" , nil , fmt .Errorf ("compile %s: %w" , source , err )
369
- }
370
-
371
- // Move the compiled object to a temporary file
372
- tmpObjFileName = filepath .Join (filepath .Dir (objFileName ), fmt .Sprintf ("%s_%s_%s.o" ,
373
- outputStem ,
374
- filepath .Base (source ),
375
- tgt .Suffix ()))
376
- if err := os .Rename (objFileName , tmpObjFileName ); err != nil {
377
- return "" , nil , fmt .Errorf ("move object file: %w" , err )
367
+ return nil , fmt .Errorf ("compile %s: %w" , source , err )
378
368
}
379
369
380
370
// Parse dependencies if enabled
381
371
if b2g .makeBase != "" {
382
372
deps , err = parseDependencies (cwd , depInput )
383
373
if err != nil {
384
- return "" , nil , fmt .Errorf ("parse dependencies for %s: %w" , source , err )
374
+ return nil , fmt .Errorf ("parse dependencies for %s: %w" , source , err )
385
375
}
386
376
}
387
377
388
- return tmpObjFileName , deps , nil
378
+ return deps , nil
389
379
}
390
380
391
381
func (b2g * bpf2go ) convert (tgt gen.Target , goarches gen.GoArches ) (err error ) {
@@ -427,17 +417,31 @@ func (b2g *bpf2go) convert(tgt gen.Target, goarches gen.GoArches) (err error) {
427
417
var allDeps []dependency
428
418
var tmpObjFileNames []string
429
419
for _ , source := range b2g .sourceFiles {
430
- tmpObjFileName , deps , err := b2g .compileOne (tgt , cwd , source , objFileName , outputStem )
420
+ deps , err := b2g .compileOne (tgt , cwd , source , objFileName )
431
421
if err != nil {
432
422
return err
433
423
}
434
- tmpObjFileNames = append (tmpObjFileNames , tmpObjFileName )
435
424
436
425
if len (deps ) > 0 {
437
426
// There is always at least a dependency for the main file.
438
427
deps [0 ].file = goFileName
439
428
allDeps = append (allDeps , deps ... )
440
429
}
430
+
431
+ // For multiple source files, we need to move the compiled object to a temporary file
432
+ if len (b2g .sourceFiles ) > 1 {
433
+ tmpObj , err := os .CreateTemp ("" , filepath .Base (source ))
434
+ if err != nil {
435
+ return fmt .Errorf ("create temporary object file: %w" , err )
436
+ }
437
+ tmpObj .Close ()
438
+ defer os .Remove (tmpObj .Name ())
439
+
440
+ if err := os .Rename (objFileName , tmpObj .Name ()); err != nil {
441
+ return fmt .Errorf ("move object file: %w" , err )
442
+ }
443
+ tmpObjFileNames = append (tmpObjFileNames , tmpObj .Name ())
444
+ }
441
445
}
442
446
443
447
// If we have multiple object files, link them together
@@ -449,18 +453,6 @@ func (b2g *bpf2go) convert(tgt gen.Target, goarches gen.GoArches) (err error) {
449
453
if err != nil {
450
454
return fmt .Errorf ("link object files: %w" , err )
451
455
}
452
- } else {
453
- // Single file, just rename it back to the final name
454
- if err := os .Rename (tmpObjFileNames [0 ], objFileName ); err != nil {
455
- return fmt .Errorf ("rename object file: %w" , err )
456
- }
457
- }
458
-
459
- // Clean up temporary object files
460
- for _ , tmpObj := range tmpObjFileNames {
461
- if err := os .Remove (tmpObj ); err != nil && ! os .IsNotExist (err ) {
462
- return fmt .Errorf ("remove temporary object file: %w" , err )
463
- }
464
456
}
465
457
466
458
if b2g .disableStripping {
0 commit comments