@@ -1189,6 +1189,10 @@ final class BuildPlanTests: XCTestCase {
1189
1189
#endif
1190
1190
1191
1191
args += [ hostTriple. isWindows ( ) ? " -gdwarf " : " -g " ]
1192
+
1193
+ if hostTriple. isLinux ( ) {
1194
+ args += [ " -fno-omit-frame-pointer " ]
1195
+ }
1192
1196
1193
1197
XCTAssertEqual ( try ext. basicArguments ( isCXX: false ) , args)
1194
1198
XCTAssertEqual ( try ext. objects, [ buildPath. appending ( components: " extlib.build " , " extlib.c.o " ) ] )
@@ -1219,6 +1223,11 @@ final class BuildPlanTests: XCTestCase {
1219
1223
args += [ " -fmodules-cache-path= \( buildPath. appending ( components: " ModuleCache " ) ) " ]
1220
1224
#endif
1221
1225
args += [ hostTriple. isWindows ( ) ? " -gdwarf " : " -g " ]
1226
+
1227
+ if hostTriple. isLinux ( ) {
1228
+ args += [ " -fno-omit-frame-pointer " ]
1229
+ }
1230
+
1222
1231
XCTAssertEqual ( try exe. basicArguments ( isCXX: false ) , args)
1223
1232
XCTAssertEqual ( try exe. objects, [ buildPath. appending ( components: " exe.build " , " main.c.o " ) ] )
1224
1233
XCTAssertEqual ( exe. moduleMap, nil )
@@ -1514,6 +1523,11 @@ final class BuildPlanTests: XCTestCase {
1514
1523
args += [ " -fmodules-cache-path= \( buildPath. appending ( components: " ModuleCache " ) ) " ]
1515
1524
#endif
1516
1525
args += [ hostTriple. isWindows ( ) ? " -gdwarf " : " -g " ]
1526
+
1527
+ if hostTriple. isLinux ( ) {
1528
+ args += [ " -fno-omit-frame-pointer " ]
1529
+ }
1530
+
1517
1531
XCTAssertEqual ( try lib. basicArguments ( isCXX: false ) , args)
1518
1532
XCTAssertEqual ( try lib. objects, [ buildPath. appending ( components: " lib.build " , " lib.c.o " ) ] )
1519
1533
XCTAssertEqual ( lib. moduleMap, buildPath. appending ( components: " lib.build " , " module.modulemap " ) )
@@ -2509,6 +2523,11 @@ final class BuildPlanTests: XCTestCase {
2509
2523
#endif
2510
2524
2511
2525
expectedExeBasicArgs += [ triple. isWindows ( ) ? " -gdwarf " : " -g " ]
2526
+
2527
+ if triple. isLinux ( ) {
2528
+ expectedExeBasicArgs += [ " -fno-omit-frame-pointer " ]
2529
+ }
2530
+
2512
2531
XCTAssertEqual ( try exe. basicArguments ( isCXX: false ) , expectedExeBasicArgs)
2513
2532
XCTAssertEqual ( try exe. objects, [ buildPath. appending ( components: " exe.build " , " main.c.o " ) ] )
2514
2533
XCTAssertEqual ( exe. moduleMap, nil )
@@ -2530,6 +2549,11 @@ final class BuildPlanTests: XCTestCase {
2530
2549
triple. isWindows ( ) ? " -gdwarf " : " -g " ,
2531
2550
triple. isWindows ( ) ? " -gdwarf " : " -g " ,
2532
2551
]
2552
+
2553
+ if triple. isLinux ( ) {
2554
+ expectedLibBasicArgs += [ " -fno-omit-frame-pointer " ]
2555
+ }
2556
+
2533
2557
XCTAssertEqual ( try lib. basicArguments ( isCXX: true ) , expectedLibBasicArgs)
2534
2558
2535
2559
XCTAssertEqual ( try lib. objects, [ buildPath. appending ( components: " lib.build " , " lib.cpp.o " ) ] )
@@ -3059,7 +3083,7 @@ final class BuildPlanTests: XCTestCase {
3059
3083
" -fblocks " , " -fmodules " , " -fmodule-name=lib " ,
3060
3084
" -I " , Pkg . appending ( components: " Sources " , " lib " , " include " ) . pathString,
3061
3085
" -fmodules-cache-path= \( buildPath. appending ( components: " ModuleCache " ) ) " ,
3062
- " -g " ,
3086
+ " -g "
3063
3087
]
3064
3088
XCTAssertEqual ( try lib. basicArguments ( isCXX: false ) , args)
3065
3089
XCTAssertEqual ( try lib. objects, [ buildPath. appending ( components: " lib.build " , " lib.c.o " ) ] )
@@ -3136,7 +3160,10 @@ final class BuildPlanTests: XCTestCase {
3136
3160
3137
3161
func createResult( for triple: Basics . Triple ) throws -> BuildPlanResult {
3138
3162
try BuildPlanResult ( plan: BuildPlan (
3139
- buildParameters: mockBuildParameters ( canRenameEntrypointFunctionName: true , targetTriple: triple) ,
3163
+ buildParameters: mockBuildParameters (
3164
+ canRenameEntrypointFunctionName: true ,
3165
+ targetTriple: triple
3166
+ ) ,
3140
3167
graph: graph,
3141
3168
fileSystem: fs,
3142
3169
observabilityScope: observability. topScope
@@ -3511,18 +3538,68 @@ final class BuildPlanTests: XCTestCase {
3511
3538
XCTAssertMatch ( dep, [ . anySequence, " -DDEP " , . anySequence] )
3512
3539
3513
3540
let cbar = try result. target ( for: " cbar " ) . clangTarget ( ) . basicArguments ( isCXX: false )
3514
- XCTAssertMatch ( cbar, [ . anySequence, " -DCCC=2 " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " headers " ) ) " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " cppheaders " ) ) " , " -Icfoo " , " -L " , " cbar " , " -Icxxfoo " , " -L " , " cxxbar " , " -g " , . end] )
3541
+ XCTAssertMatch ( cbar, [ . anySequence, " -DCCC=2 " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " headers " ) ) " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " cppheaders " ) ) " , " -Icfoo " , " -L " , " cbar " , " -Icxxfoo " , " -L " , " cxxbar " , " -g " , " -fno-omit-frame-pointer " , . end] )
3515
3542
3516
3543
let bar = try result. target ( for: " bar " ) . swiftTarget ( ) . compileArguments ( )
3517
- XCTAssertMatch ( bar, [ . anySequence, " -DLINUX " , " -Isfoo " , " -L " , " sbar " , " -cxx-interoperability-mode=default " , " -enable-upcoming-feature " , " BestFeature " , " -g " , " -Xcc " , " -g " , . end] )
3544
+ XCTAssertMatch ( bar, [ . anySequence, " -DLINUX " , " -Isfoo " , " -L " , " sbar " , " -cxx-interoperability-mode=default " , " -enable-upcoming-feature " , " BestFeature " , " -g " , " -Xcc " , " -g " , " -Xcc " , " -fno-omit-frame-pointer " , . end] )
3518
3545
3519
3546
let exe = try result. target ( for: " exe " ) . swiftTarget ( ) . compileArguments ( )
3520
- XCTAssertMatch ( exe, [ . anySequence, " -DFOO " , " -g " , " -Xcc " , " -g " , . end] )
3547
+ XCTAssertMatch ( exe, [ . anySequence, " -DFOO " , " -g " , " -Xcc " , " -g " , " -Xcc " , " -fno-omit-frame-pointer " , . end] )
3521
3548
3522
3549
let linkExe = try result. buildProduct ( for: " exe " ) . linkArguments ( )
3523
3550
XCTAssertMatch ( linkExe, [ . anySequence, " -lsqlite3 " , " -llibz " , " -Ilfoo " , " -L " , " lbar " , " -g " , . end] )
3524
3551
}
3525
3552
3553
+ // omit frame pointers explicitly set to true
3554
+ do {
3555
+ let result = try BuildPlanResult ( plan: BuildPlan (
3556
+ buildParameters: mockBuildParameters (
3557
+ targetTriple: . x86_64Linux,
3558
+ omitFramePointers: true
3559
+ ) ,
3560
+ graph: graph,
3561
+ fileSystem: fs,
3562
+ observabilityScope: observability. topScope
3563
+ ) )
3564
+
3565
+ let dep = try result. target ( for: " t1 " ) . swiftTarget ( ) . compileArguments ( )
3566
+ XCTAssertMatch ( dep, [ . anySequence, " -DDEP " , . anySequence] )
3567
+
3568
+ let cbar = try result. target ( for: " cbar " ) . clangTarget ( ) . basicArguments ( isCXX: false )
3569
+ XCTAssertMatch ( cbar, [ . anySequence, " -DCCC=2 " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " headers " ) ) " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " cppheaders " ) ) " , " -Icfoo " , " -L " , " cbar " , " -Icxxfoo " , " -L " , " cxxbar " , " -g " , " -fomit-frame-pointer " , . end] )
3570
+
3571
+ let bar = try result. target ( for: " bar " ) . swiftTarget ( ) . compileArguments ( )
3572
+ XCTAssertMatch ( bar, [ . anySequence, " -DLINUX " , " -Isfoo " , " -L " , " sbar " , " -cxx-interoperability-mode=default " , " -enable-upcoming-feature " , " BestFeature " , " -g " , " -Xcc " , " -g " , " -Xcc " , " -fomit-frame-pointer " , . end] )
3573
+
3574
+ let exe = try result. target ( for: " exe " ) . swiftTarget ( ) . compileArguments ( )
3575
+ XCTAssertMatch ( exe, [ . anySequence, " -DFOO " , " -g " , " -Xcc " , " -g " , " -Xcc " , " -fomit-frame-pointer " , . end] )
3576
+ }
3577
+
3578
+ // omit frame pointers explicitly set to false
3579
+ do {
3580
+ let result = try BuildPlanResult ( plan: BuildPlan (
3581
+ buildParameters: mockBuildParameters (
3582
+ targetTriple: . x86_64Linux,
3583
+ omitFramePointers: false
3584
+ ) ,
3585
+ graph: graph,
3586
+ fileSystem: fs,
3587
+ observabilityScope: observability. topScope
3588
+ ) )
3589
+
3590
+ let dep = try result. target ( for: " t1 " ) . swiftTarget ( ) . compileArguments ( )
3591
+ XCTAssertMatch ( dep, [ . anySequence, " -DDEP " , . anySequence] )
3592
+
3593
+ let cbar = try result. target ( for: " cbar " ) . clangTarget ( ) . basicArguments ( isCXX: false )
3594
+ XCTAssertMatch ( cbar, [ . anySequence, " -DCCC=2 " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " headers " ) ) " , " -I \( A . appending ( components: " Sources " , " cbar " , " Sources " , " cppheaders " ) ) " , " -Icfoo " , " -L " , " cbar " , " -Icxxfoo " , " -L " , " cxxbar " , " -g " , " -fno-omit-frame-pointer " , . end] )
3595
+
3596
+ let bar = try result. target ( for: " bar " ) . swiftTarget ( ) . compileArguments ( )
3597
+ XCTAssertMatch ( bar, [ . anySequence, " -DLINUX " , " -Isfoo " , " -L " , " sbar " , " -cxx-interoperability-mode=default " , " -enable-upcoming-feature " , " BestFeature " , " -g " , " -Xcc " , " -g " , " -Xcc " , " -fno-omit-frame-pointer " , . end] )
3598
+
3599
+ let exe = try result. target ( for: " exe " ) . swiftTarget ( ) . compileArguments ( )
3600
+ XCTAssertMatch ( exe, [ . anySequence, " -DFOO " , " -g " , " -Xcc " , " -g " , " -Xcc " , " -fno-omit-frame-pointer " , . end] )
3601
+ }
3602
+
3526
3603
do {
3527
3604
let result = try createResult ( for: . x86_64MacOS)
3528
3605
0 commit comments