@@ -29,7 +29,7 @@ pub fn appendToolPath(self: *const GCCDetector, tc: *Toolchain) !void {
29
29
}, .program );
30
30
}
31
31
32
- fn addDefaultGCCPrefixes (prefixes : * PathPrefixes , tc : * const Toolchain ) ! void {
32
+ fn addDefaultGCCPrefixes (prefixes : * std . ArrayListUnmanaged ([] const u8 ) , tc : * const Toolchain ) ! void {
33
33
const sysroot = tc .getSysroot ();
34
34
const target = tc .getTarget ();
35
35
if (sysroot .len == 0 and target .os .tag == .linux and tc .filesystem .exists ("/opt/rh" )) {
@@ -57,14 +57,12 @@ fn addDefaultGCCPrefixes(prefixes: *PathPrefixes, tc: *const Toolchain) !void {
57
57
}
58
58
}
59
59
60
- const PathPrefixes = std .BoundedArray ([]const u8 , 16 );
61
-
62
60
fn collectLibDirsAndTriples (
63
61
tc : * Toolchain ,
64
- lib_dirs : * PathPrefixes ,
65
- triple_aliases : * PathPrefixes ,
66
- biarch_libdirs : * PathPrefixes ,
67
- biarch_triple_aliases : * PathPrefixes ,
62
+ lib_dirs : * std . ArrayListUnmanaged ([] const u8 ) ,
63
+ triple_aliases : * std . ArrayListUnmanaged ([] const u8 ) ,
64
+ biarch_libdirs : * std . ArrayListUnmanaged ([] const u8 ) ,
65
+ biarch_triple_aliases : * std . ArrayListUnmanaged ([] const u8 ) ,
68
66
) ! void {
69
67
const AArch64LibDirs : [2 ][]const u8 = .{ "/lib64" , "/lib" };
70
68
const AArch64Triples : [4 ][]const u8 = .{ "aarch64-none-linux-gnu" , "aarch64-linux-gnu" , "aarch64-redhat-linux" , "aarch64-suse-linux" };
@@ -408,10 +406,18 @@ pub fn discover(self: *GCCDetector, tc: *Toolchain) !void {
408
406
else
409
407
target_util .get32BitArchVariant (target );
410
408
411
- var candidate_lib_dirs : PathPrefixes = .{};
412
- var candidate_triple_aliases : PathPrefixes = .{};
413
- var candidate_biarch_lib_dirs : PathPrefixes = .{};
414
- var candidate_biarch_triple_aliases : PathPrefixes = .{};
409
+ var candidate_lib_dirs_buffer : [16 ][]const u8 = undefined ;
410
+ var candidate_lib_dirs = std .ArrayListUnmanaged ([]const u8 ).initBuffer (& candidate_lib_dirs_buffer );
411
+
412
+ var candidate_triple_aliases_buffer : [16 ][]const u8 = undefined ;
413
+ var candidate_triple_aliases = std .ArrayListUnmanaged ([]const u8 ).initBuffer (& candidate_triple_aliases_buffer );
414
+
415
+ var candidate_biarch_lib_dirs_buffer : [16 ][]const u8 = undefined ;
416
+ var candidate_biarch_lib_dirs = std .ArrayListUnmanaged ([]const u8 ).initBuffer (& candidate_biarch_lib_dirs_buffer );
417
+
418
+ var candidate_biarch_triple_aliases_buffer : [16 ][]const u8 = undefined ;
419
+ var candidate_biarch_triple_aliases = std .ArrayListUnmanaged ([]const u8 ).initBuffer (& candidate_biarch_triple_aliases_buffer );
420
+
415
421
try collectLibDirsAndTriples (
416
422
tc ,
417
423
& candidate_lib_dirs ,
@@ -433,7 +439,8 @@ pub fn discover(self: *GCCDetector, tc: *Toolchain) !void {
433
439
}
434
440
}
435
441
436
- var prefixes : PathPrefixes = .{};
442
+ var prefixes_buf : [16 ][]const u8 = undefined ;
443
+ var prefixes = std .ArrayListUnmanaged ([]const u8 ).initBuffer (& prefixes_buf );
437
444
const gcc_toolchain_dir = gccToolchainDir (tc );
438
445
if (gcc_toolchain_dir .len != 0 ) {
439
446
const adjusted = if (gcc_toolchain_dir [gcc_toolchain_dir .len - 1 ] == '/' )
@@ -455,10 +462,10 @@ pub fn discover(self: *GCCDetector, tc: *Toolchain) !void {
455
462
}
456
463
457
464
const v0 = GCCVersion .parse ("0.0.0" );
458
- for (prefixes .constSlice () ) | prefix | {
465
+ for (prefixes .items ) | prefix | {
459
466
if (! tc .filesystem .exists (prefix )) continue ;
460
467
461
- for (candidate_lib_dirs .constSlice () ) | suffix | {
468
+ for (candidate_lib_dirs .items ) | suffix | {
462
469
defer fib .reset ();
463
470
const lib_dir = std .fs .path .join (fib .allocator (), &.{ prefix , suffix }) catch continue ;
464
471
if (! tc .filesystem .exists (lib_dir )) continue ;
@@ -467,17 +474,17 @@ pub fn discover(self: *GCCDetector, tc: *Toolchain) !void {
467
474
const gcc_cross_dir_exists = tc .filesystem .joinedExists (&.{ lib_dir , "/gcc-cross" });
468
475
469
476
try self .scanLibDirForGCCTriple (tc , target , lib_dir , triple_str , false , gcc_dir_exists , gcc_cross_dir_exists );
470
- for (candidate_triple_aliases .constSlice () ) | candidate | {
477
+ for (candidate_triple_aliases .items ) | candidate | {
471
478
try self .scanLibDirForGCCTriple (tc , target , lib_dir , candidate , false , gcc_dir_exists , gcc_cross_dir_exists );
472
479
}
473
480
}
474
- for (candidate_biarch_lib_dirs .constSlice () ) | suffix | {
481
+ for (candidate_biarch_lib_dirs .items ) | suffix | {
475
482
const lib_dir = std .fs .path .join (fib .allocator (), &.{ prefix , suffix }) catch continue ;
476
483
if (! tc .filesystem .exists (lib_dir )) continue ;
477
484
478
485
const gcc_dir_exists = tc .filesystem .joinedExists (&.{ lib_dir , "/gcc" });
479
486
const gcc_cross_dir_exists = tc .filesystem .joinedExists (&.{ lib_dir , "/gcc-cross" });
480
- for (candidate_biarch_triple_aliases .constSlice () ) | candidate | {
487
+ for (candidate_biarch_triple_aliases .items ) | candidate | {
481
488
try self .scanLibDirForGCCTriple (tc , target , lib_dir , candidate , true , gcc_dir_exists , gcc_cross_dir_exists );
482
489
}
483
490
}
0 commit comments