| ... | ... | @@ -1220,32 +1220,38 @@ pub fn main() anyerror!void { |
| 1220 | 1220 | defer arena_state.deinit(); |
| 1221 | 1221 | const arena = arena_state.allocator(); |
| 1222 | 1222 | |
| 1223 | | const args = try std.process.argsAlloc(arena); |
| 1224 | | if (args.len <= 1) { |
| 1225 | | usageAndExit(std.io.getStdErr(), args[0], 1); |
| 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 | | } |
| 1223 | const stderr = std.io.getStdErr(); |
| 1224 | var args = try std.process.argsWithAllocator(arena); |
| 1225 | const args0 = args.next().?; |
| 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 | 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 | 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 | 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 | 1255 | var zig_src_dir = try fs.cwd().openDir(zig_src_root, .{}); |
| 1250 | 1256 | defer zig_src_dir.close(); |
| 1251 | 1257 | |
| ... | ... | @@ -1254,6 +1260,7 @@ pub fn main() anyerror!void { |
| 1254 | 1260 | |
| 1255 | 1261 | if (builtin.single_threaded) { |
| 1256 | 1262 | for (llvm_targets) |llvm_target| { |
| 1263 | if (filter) |zig_name| if (!std.mem.eql(u8, llvm_target.zig_name, zig_name)) continue; |
| 1257 | 1264 | try processOneTarget(Job{ |
| 1258 | 1265 | .llvm_tblgen_exe = llvm_tblgen_exe, |
| 1259 | 1266 | .llvm_src_root = llvm_src_root, |
| ... | ... | @@ -1263,8 +1270,12 @@ pub fn main() anyerror!void { |
| 1263 | 1270 | }); |
| 1264 | 1271 | } |
| 1265 | 1272 | } else { |
| 1266 | | var threads = try arena.alloc(std.Thread, llvm_targets.len); |
| 1267 | | for (llvm_targets, 0..) |llvm_target, i| { |
| 1273 | var pool: std.Thread.Pool = undefined; |
| 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 | 1279 | const job = Job{ |
| 1269 | 1280 | .llvm_tblgen_exe = llvm_tblgen_exe, |
| 1270 | 1281 | .llvm_src_root = llvm_src_root, |
| ... | ... | @@ -1272,10 +1283,7 @@ pub fn main() anyerror!void { |
| 1272 | 1283 | .root_progress = root_progress, |
| 1273 | 1284 | .llvm_target = llvm_target, |
| 1274 | 1285 | }; |
| 1275 | | threads[i] = try std.Thread.spawn(.{}, processOneTarget, .{job}); |
| 1276 | | } |
| 1277 | | for (threads) |thread| { |
| 1278 | | thread.join(); |
| 1286 | try pool.spawn(processOneTarget, .{job}); |
| 1279 | 1287 | } |
| 1280 | 1288 | } |
| 1281 | 1289 | } |
| ... | ... | @@ -1288,7 +1296,8 @@ const Job = struct { |
| 1288 | 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 | 1301 | const llvm_target = job.llvm_target; |
| 1293 | 1302 | |
| 1294 | 1303 | var arena_state = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| ... | ... | @@ -1522,20 +1531,6 @@ fn processOneTarget(job: Job) anyerror!void { |
| 1522 | 1531 | )) orelse continue; |
| 1523 | 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 | 1534 | try all_cpus.append(.{ |
| 1540 | 1535 | .llvm_name = llvm_name, |
| 1541 | 1536 | .zig_name = zig_name, |
| ... | ... | @@ -1756,7 +1751,7 @@ fn processOneTarget(job: Job) anyerror!void { |
| 1756 | 1751 | |
| 1757 | 1752 | fn usageAndExit(file: fs.File, arg0: []const u8, code: u8) noreturn { |
| 1758 | 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 | 1756 | \\Updates lib/std/target/<target>.zig from llvm/lib/Target/<Target>/<Target>.td . |
| 1762 | 1757 | \\ |