| ... | @@ -1220,32 +1220,38 @@ pub fn main() anyerror!void { | ... | @@ -1220,32 +1220,38 @@ pub fn main() anyerror!void { |
| 1220 | defer arena_state.deinit(); | 1220 | defer arena_state.deinit(); |
| 1221 | const arena = arena_state.allocator(); | 1221 | const arena = arena_state.allocator(); |
| 1222 | | 1222 | |
| 1223 | const args = try std.process.argsAlloc(arena); | 1223 | const stderr = std.io.getStdErr(); |
| 1224 | if (args.len <= 1) { | 1224 | var args = try std.process.argsWithAllocator(arena); |
| 1225 | usageAndExit(std.io.getStdErr(), args[0], 1); | 1225 | const args0 = args.next().?; |
| 1226 | } | | |
| 1227 | if (std.mem.eql(u8, args[1], "--help")) { | | |
| 1228 | usageAndExit(std.io.getStdOut(), args[0], 0); | | |
| 1229 | } | | |
| 1230 | if (args.len < 4) { | | |
| 1231 | usageAndExit(std.io.getStdErr(), args[0], 1); | | |
| 1232 | } | | |
| 1233 | | 1226 | |
| 1234 | const llvm_tblgen_exe = args[1]; | 1227 | const llvm_tblgen_exe = args.next() orelse |
| | 1228 | usageAndExit(stderr, args0, 1); |
| | 1229 | |
| | 1230 | if (std.mem.eql(u8, llvm_tblgen_exe, "--help")) { |
| | 1231 | usageAndExit(std.io.getStdOut(), args0, 0); |
| | 1232 | } |
| 1235 | if (std.mem.startsWith(u8, llvm_tblgen_exe, "-")) { | 1233 | if (std.mem.startsWith(u8, llvm_tblgen_exe, "-")) { |
| 1236 | usageAndExit(std.io.getStdErr(), args[0], 1); | 1234 | usageAndExit(stderr, args0, 1); |
| 1237 | } | 1235 | } |
| 1238 | | 1236 | |
| 1239 | const llvm_src_root = args[2]; | 1237 | const llvm_src_root = args.next() orelse |
| | 1238 | usageAndExit(stderr, args0, 1); |
| | 1239 | |
| 1240 | if (std.mem.startsWith(u8, llvm_src_root, "-")) { | 1240 | if (std.mem.startsWith(u8, llvm_src_root, "-")) { |
| 1241 | usageAndExit(std.io.getStdErr(), args[0], 1); | 1241 | usageAndExit(stderr, args0, 1); |
| 1242 | } | 1242 | } |
| 1243 | | 1243 | |
| 1244 | const zig_src_root = args[3]; | 1244 | const zig_src_root = args.next() orelse |
| | 1245 | usageAndExit(stderr, args0, 1); |
| 1245 | if (std.mem.startsWith(u8, zig_src_root, "-")) { | 1246 | if (std.mem.startsWith(u8, zig_src_root, "-")) { |
| 1246 | usageAndExit(std.io.getStdErr(), args[0], 1); | 1247 | usageAndExit(stderr, args0, 1); |
| 1247 | } | 1248 | } |
| 1248 | | 1249 | |
| | 1250 | var filter: ?[]const u8 = null; |
| | 1251 | if (args.next()) |arg| filter = arg; |
| | 1252 | |
| | 1253 | if (args.skip()) usageAndExit(stderr, args0, 1); |
| | 1254 | |
| 1249 | var zig_src_dir = try fs.cwd().openDir(zig_src_root, .{}); | 1255 | var zig_src_dir = try fs.cwd().openDir(zig_src_root, .{}); |
| 1250 | defer zig_src_dir.close(); | 1256 | defer zig_src_dir.close(); |
| 1251 | | 1257 | |
| ... | @@ -1254,6 +1260,7 @@ pub fn main() anyerror!void { | ... | @@ -1254,6 +1260,7 @@ pub fn main() anyerror!void { |
| 1254 | | 1260 | |
| 1255 | if (builtin.single_threaded) { | 1261 | if (builtin.single_threaded) { |
| 1256 | for (llvm_targets) |llvm_target| { | 1262 | for (llvm_targets) |llvm_target| { |
| | 1263 | if (filter) |zig_name| if (!std.mem.eql(u8, llvm_target.zig_name, zig_name)) continue; |
| 1257 | try processOneTarget(Job{ | 1264 | try processOneTarget(Job{ |
| 1258 | .llvm_tblgen_exe = llvm_tblgen_exe, | 1265 | .llvm_tblgen_exe = llvm_tblgen_exe, |
| 1259 | .llvm_src_root = llvm_src_root, | 1266 | .llvm_src_root = llvm_src_root, |
| ... | @@ -1263,8 +1270,12 @@ pub fn main() anyerror!void { | ... | @@ -1263,8 +1270,12 @@ pub fn main() anyerror!void { |
| 1263 | }); | 1270 | }); |
| 1264 | } | 1271 | } |
| 1265 | } else { | 1272 | } else { |
| 1266 | var threads = try arena.alloc(std.Thread, llvm_targets.len); | 1273 | var pool: std.Thread.Pool = undefined; |
| 1267 | for (llvm_targets, 0..) |llvm_target, i| { | 1274 | try pool.init(.{ .allocator = arena, .n_jobs = llvm_targets.len }); |
| | 1275 | defer pool.deinit(); |
| | 1276 | |
| | 1277 | for (llvm_targets) |llvm_target| { |
| | 1278 | if (filter) |zig_name| if (!std.mem.eql(u8, llvm_target.zig_name, zig_name)) continue; |
| 1268 | const job = Job{ | 1279 | const job = Job{ |
| 1269 | .llvm_tblgen_exe = llvm_tblgen_exe, | 1280 | .llvm_tblgen_exe = llvm_tblgen_exe, |
| 1270 | .llvm_src_root = llvm_src_root, | 1281 | .llvm_src_root = llvm_src_root, |
| ... | @@ -1272,10 +1283,7 @@ pub fn main() anyerror!void { | ... | @@ -1272,10 +1283,7 @@ pub fn main() anyerror!void { |
| 1272 | .root_progress = root_progress, | 1283 | .root_progress = root_progress, |
| 1273 | .llvm_target = llvm_target, | 1284 | .llvm_target = llvm_target, |
| 1274 | }; | 1285 | }; |
| 1275 | threads[i] = try std.Thread.spawn(.{}, processOneTarget, .{job}); | 1286 | try pool.spawn(processOneTarget, .{job}); |
| 1276 | } | | |
| 1277 | for (threads) |thread| { | | |
| 1278 | thread.join(); | | |
| 1279 | } | 1287 | } |
| 1280 | } | 1288 | } |
| 1281 | } | 1289 | } |
| ... | @@ -1288,7 +1296,8 @@ const Job = struct { | ... | @@ -1288,7 +1296,8 @@ const Job = struct { |
| 1288 | llvm_target: LlvmTarget, | 1296 | llvm_target: LlvmTarget, |
| 1289 | }; | 1297 | }; |
| 1290 | | 1298 | |
| 1291 | fn processOneTarget(job: Job) anyerror!void { | 1299 | fn processOneTarget(job: Job) void { |
| | 1300 | errdefer |err| std.debug.panic("panic: {s}", .{@errorName(err)}); |
| 1292 | const llvm_target = job.llvm_target; | 1301 | const llvm_target = job.llvm_target; |
| 1293 | | 1302 | |
| 1294 | var arena_state = std.heap.ArenaAllocator.init(std.heap.page_allocator); | 1303 | var arena_state = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| ... | @@ -1522,20 +1531,6 @@ fn processOneTarget(job: Job) anyerror!void { | ... | @@ -1522,20 +1531,6 @@ fn processOneTarget(job: Job) anyerror!void { |
| 1522 | )) orelse continue; | 1531 | )) orelse continue; |
| 1523 | try deps.append(feature_zig_name); | 1532 | try deps.append(feature_zig_name); |
| 1524 | } | 1533 | } |
| 1525 | for (llvm_target.feature_overrides) |feature_override| { | | |
| 1526 | if (mem.eql(u8, llvm_name, feature_override.llvm_name)) { | | |
| 1527 | if (feature_override.omit) { | | |
| 1528 | continue; | | |
| 1529 | } | | |
| 1530 | if (feature_override.zig_name) |override_name| { | | |
| 1531 | zig_name = override_name; | | |
| 1532 | } | | |
| 1533 | for (feature_override.extra_deps) |extra_dep| { | | |
| 1534 | try deps.append(extra_dep); | | |
| 1535 | } | | |
| 1536 | break; | | |
| 1537 | } | | |
| 1538 | } | | |
| 1539 | try all_cpus.append(.{ | 1534 | try all_cpus.append(.{ |
| 1540 | .llvm_name = llvm_name, | 1535 | .llvm_name = llvm_name, |
| 1541 | .zig_name = zig_name, | 1536 | .zig_name = zig_name, |
| ... | @@ -1756,7 +1751,7 @@ fn processOneTarget(job: Job) anyerror!void { | ... | @@ -1756,7 +1751,7 @@ fn processOneTarget(job: Job) anyerror!void { |
| 1756 | | 1751 | |
| 1757 | fn usageAndExit(file: fs.File, arg0: []const u8, code: u8) noreturn { | 1752 | fn usageAndExit(file: fs.File, arg0: []const u8, code: u8) noreturn { |
| 1758 | file.writer().print( | 1753 | file.writer().print( |
| 1759 | \\Usage: {s} /path/to/llvm-tblgen /path/git/llvm-project /path/git/zig | 1754 | \\Usage: {s} /path/to/llvm-tblgen /path/git/llvm-project /path/git/zig [zig_name filter] |
| 1760 | \\ | 1755 | \\ |
| 1761 | \\Updates lib/std/target/<target>.zig from llvm/lib/Target/<Target>/<Target>.td . | 1756 | \\Updates lib/std/target/<target>.zig from llvm/lib/Target/<Target>/<Target>.td . |
| 1762 | \\ | 1757 | \\ |