| ... | ... | @@ -229,6 +229,57 @@ pub fn main(init: std.process.Init.Minimal) anyerror!void { |
| 229 | 229 | return mainArgs(gpa, arena, io, args, &environ_map); |
| 230 | 230 | } |
| 231 | 231 | |
| 232 | const cmd_map = std.StaticStringMap(void).initEnum(Cmd); |
| 233 | |
| 234 | const Cmd = enum { |
| 235 | @"build-exe", |
| 236 | @"build-lib", |
| 237 | @"build-obj", |
| 238 | @"test", |
| 239 | @"test-obj", |
| 240 | run, |
| 241 | |
| 242 | dlltool, |
| 243 | ranlib, |
| 244 | lib, |
| 245 | ar, |
| 246 | |
| 247 | build, |
| 248 | |
| 249 | clang, |
| 250 | @"-cc1", |
| 251 | @"-cc1as", |
| 252 | |
| 253 | @"ld.lld", |
| 254 | @"lld-link", |
| 255 | @"wasm-ld", |
| 256 | |
| 257 | cc, |
| 258 | @"c++", |
| 259 | @"translate-c", |
| 260 | rc, |
| 261 | fmt, |
| 262 | objcopy, |
| 263 | objdump, |
| 264 | fetch, |
| 265 | libc, |
| 266 | std, |
| 267 | init, |
| 268 | targets, |
| 269 | version, |
| 270 | env, |
| 271 | reduce, |
| 272 | zen, |
| 273 | @"ast-check", |
| 274 | |
| 275 | help, |
| 276 | @"-h", |
| 277 | @"--help", |
| 278 | |
| 279 | changelist, |
| 280 | @"dump-zir", |
| 281 | }; |
| 282 | |
| 232 | 283 | fn mainArgs( |
| 233 | 284 | gpa: Allocator, |
| 234 | 285 | arena: Allocator, |
| ... | ... | @@ -271,144 +322,169 @@ fn mainArgs( |
| 271 | 322 | |
| 272 | 323 | const cmd = args[1]; |
| 273 | 324 | const cmd_args = args[2..]; |
| 274 | | if (mem.eql(u8, cmd, "build-exe")) { |
| 275 | | dev.check(.build_exe_command); |
| 276 | | return buildOutputType(gpa, arena, io, args, .{ .build = .Exe }, environ_map); |
| 277 | | } else if (mem.eql(u8, cmd, "build-lib")) { |
| 278 | | dev.check(.build_lib_command); |
| 279 | | return buildOutputType(gpa, arena, io, args, .{ .build = .Lib }, environ_map); |
| 280 | | } else if (mem.eql(u8, cmd, "build-obj")) { |
| 281 | | dev.check(.build_obj_command); |
| 282 | | return buildOutputType(gpa, arena, io, args, .{ .build = .Obj }, environ_map); |
| 283 | | } else if (mem.eql(u8, cmd, "test")) { |
| 284 | | dev.check(.test_command); |
| 285 | | return buildOutputType(gpa, arena, io, args, .zig_test, environ_map); |
| 286 | | } else if (mem.eql(u8, cmd, "test-obj")) { |
| 287 | | dev.check(.test_command); |
| 288 | | return buildOutputType(gpa, arena, io, args, .zig_test_obj, environ_map); |
| 289 | | } else if (mem.eql(u8, cmd, "run")) { |
| 290 | | dev.check(.run_command); |
| 291 | | return buildOutputType(gpa, arena, io, args, .run, environ_map); |
| 292 | | } else if (mem.eql(u8, cmd, "dlltool") or |
| 293 | | mem.eql(u8, cmd, "ranlib") or |
| 294 | | mem.eql(u8, cmd, "lib") or |
| 295 | | mem.eql(u8, cmd, "ar")) |
| 296 | | { |
| 297 | | dev.check(.ar_command); |
| 298 | | return process.exit(try llvmArMain(arena, args)); |
| 299 | | } else if (mem.eql(u8, cmd, "build")) { |
| 300 | | dev.check(.build_command); |
| 301 | | return cmdBuild(gpa, arena, io, cmd_args, environ_map); |
| 302 | | } else if (mem.eql(u8, cmd, "clang") or |
| 303 | | mem.eql(u8, cmd, "-cc1") or mem.eql(u8, cmd, "-cc1as")) |
| 304 | | { |
| 305 | | dev.check(.clang_command); |
| 306 | | return process.exit(try clangMain(arena, args)); |
| 307 | | } else if (mem.eql(u8, cmd, "ld.lld") or |
| 308 | | mem.eql(u8, cmd, "lld-link") or |
| 309 | | mem.eql(u8, cmd, "wasm-ld")) |
| 310 | | { |
| 311 | | dev.check(.lld_linker); |
| 312 | | return process.exit(try lldMain(arena, args, true)); |
| 313 | | } else if (mem.eql(u8, cmd, "cc")) { |
| 314 | | dev.check(.cc_command); |
| 315 | | return buildOutputType(gpa, arena, io, args, .cc, environ_map); |
| 316 | | } else if (mem.eql(u8, cmd, "c++")) { |
| 317 | | dev.check(.cc_command); |
| 318 | | return buildOutputType(gpa, arena, io, args, .cpp, environ_map); |
| 319 | | } else if (mem.eql(u8, cmd, "translate-c")) { |
| 320 | | dev.check(.translate_c_command); |
| 321 | | return buildOutputType(gpa, arena, io, args, .translate_c, environ_map); |
| 322 | | } else if (mem.eql(u8, cmd, "rc")) { |
| 323 | | const use_server = cmd_args.len > 0 and std.mem.eql(u8, cmd_args[0], "--zig-integration"); |
| 324 | | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 325 | | .cmd_name = "resinator", |
| 326 | | .root_src_path = "resinator/main.zig", |
| 327 | | .depend_on_aro = true, |
| 328 | | .prepend_zig_lib_dir_path = true, |
| 329 | | .server = use_server, |
| 330 | | .color = Color.settingFromEnvironment(environ_map), |
| 331 | | }); |
| 332 | | } else if (mem.eql(u8, cmd, "fmt")) { |
| 333 | | dev.check(.fmt_command); |
| 334 | | return @import("fmt.zig").run(gpa, arena, io, cmd_args); |
| 335 | | } else if (mem.eql(u8, cmd, "objcopy")) { |
| 336 | | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 337 | | .cmd_name = "objcopy", |
| 338 | | .root_src_path = "objcopy.zig", |
| 339 | | .color = Color.settingFromEnvironment(environ_map), |
| 340 | | }); |
| 341 | | } else if (mem.eql(u8, cmd, "objdump")) { |
| 342 | | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 343 | | .cmd_name = "objdump", |
| 344 | | .root_src_path = "objdump.zig", |
| 345 | | .color = Color.settingFromEnvironment(environ_map), |
| 346 | | }); |
| 347 | | } else if (mem.eql(u8, cmd, "fetch")) { |
| 348 | | return cmdFetch(gpa, arena, io, cmd_args, environ_map); |
| 349 | | } else if (mem.eql(u8, cmd, "libc")) { |
| 350 | | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 351 | | .cmd_name = "libc", |
| 352 | | .root_src_path = "libc.zig", |
| 353 | | .prepend_zig_lib_dir_path = true, |
| 354 | | .color = Color.settingFromEnvironment(environ_map), |
| 355 | | }); |
| 356 | | } else if (mem.eql(u8, cmd, "std")) { |
| 357 | | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 358 | | .cmd_name = "std", |
| 359 | | .root_src_path = "std-docs.zig", |
| 360 | | .prepend_zig_lib_dir_path = true, |
| 361 | | .prepend_zig_exe_path = true, |
| 362 | | .prepend_global_cache_path = true, |
| 363 | | .color = Color.settingFromEnvironment(environ_map), |
| 364 | | }); |
| 365 | | } else if (mem.eql(u8, cmd, "init")) { |
| 366 | | return cmdInit(gpa, arena, io, cmd_args); |
| 367 | | } else if (mem.eql(u8, cmd, "targets")) { |
| 368 | | dev.check(.targets_command); |
| 369 | | const host = std.zig.resolveTargetQueryOrFatal(io, .{}); |
| 370 | | var stdout_writer = Io.File.stdout().writer(io, &stdout_buffer); |
| 371 | | try @import("print_targets.zig").cmdTargets(arena, io, cmd_args, &stdout_writer.interface, &host); |
| 372 | | return stdout_writer.interface.flush(); |
| 373 | | } else if (mem.eql(u8, cmd, "version")) { |
| 374 | | dev.check(.version_command); |
| 375 | | try Io.File.stdout().writeStreamingAll(io, build_options.version ++ "\n"); |
| 376 | | return; |
| 377 | | } else if (mem.eql(u8, cmd, "env")) { |
| 378 | | dev.check(.env_command); |
| 379 | | const host = std.zig.resolveTargetQueryOrFatal(io, .{}); |
| 380 | | var stdout_writer = Io.File.stdout().writer(io, &stdout_buffer); |
| 381 | | try @import("print_env.zig").cmdEnv( |
| 382 | | arena, |
| 383 | | io, |
| 384 | | &stdout_writer.interface, |
| 385 | | args, |
| 386 | | preopens, |
| 387 | | &host, |
| 388 | | environ_map, |
| 389 | | ); |
| 390 | | return stdout_writer.interface.flush(); |
| 391 | | } else if (mem.eql(u8, cmd, "reduce")) { |
| 392 | | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 393 | | .cmd_name = "reduce", |
| 394 | | .root_src_path = "reduce.zig", |
| 395 | | .color = Color.settingFromEnvironment(environ_map), |
| 396 | | }); |
| 397 | | } else if (mem.eql(u8, cmd, "zen")) { |
| 398 | | dev.check(.zen_command); |
| 399 | | return Io.File.stdout().writeStreamingAll(io, info_zen); |
| 400 | | } else if (mem.eql(u8, cmd, "help") or mem.eql(u8, cmd, "-h") or mem.eql(u8, cmd, "--help")) { |
| 401 | | dev.check(.help_command); |
| 402 | | return Io.File.stdout().writeStreamingAll(io, usage); |
| 403 | | } else if (mem.eql(u8, cmd, "ast-check")) { |
| 404 | | return cmdAstCheck(arena, io, cmd_args, environ_map); |
| 405 | | } else if (build_options.enable_debug_extensions and mem.eql(u8, cmd, "changelist")) { |
| 406 | | return cmdChangelist(arena, io, cmd_args, environ_map); |
| 407 | | } else if (build_options.enable_debug_extensions and mem.eql(u8, cmd, "dump-zir")) { |
| 408 | | return cmdDumpZir(arena, io, cmd_args); |
| 409 | | } else { |
| 325 | switch (@as(Cmd, @enumFromInt(cmd_map.getIndex(cmd) orelse { |
| 410 | 326 | std.log.info("{s}", .{usage}); |
| 411 | 327 | fatal("unknown command: {s}", .{args[1]}); |
| 328 | }))) { |
| 329 | .@"build-exe" => { |
| 330 | dev.check(.build_exe_command); |
| 331 | return buildOutputType(gpa, arena, io, args, .{ .build = .Exe }, environ_map); |
| 332 | }, |
| 333 | .@"build-lib" => { |
| 334 | dev.check(.build_lib_command); |
| 335 | return buildOutputType(gpa, arena, io, args, .{ .build = .Lib }, environ_map); |
| 336 | }, |
| 337 | .@"build-obj" => { |
| 338 | dev.check(.build_obj_command); |
| 339 | return buildOutputType(gpa, arena, io, args, .{ .build = .Obj }, environ_map); |
| 340 | }, |
| 341 | .@"test" => { |
| 342 | dev.check(.test_command); |
| 343 | return buildOutputType(gpa, arena, io, args, .zig_test, environ_map); |
| 344 | }, |
| 345 | .@"test-obj" => { |
| 346 | dev.check(.test_command); |
| 347 | return buildOutputType(gpa, arena, io, args, .zig_test_obj, environ_map); |
| 348 | }, |
| 349 | .run => { |
| 350 | dev.check(.run_command); |
| 351 | return buildOutputType(gpa, arena, io, args, .run, environ_map); |
| 352 | }, |
| 353 | .dlltool, .ranlib, .lib, .ar => { |
| 354 | dev.check(.ar_command); |
| 355 | return process.exit(try llvmArMain(arena, args)); |
| 356 | }, |
| 357 | .build => { |
| 358 | dev.check(.build_command); |
| 359 | return cmdBuild(gpa, arena, io, cmd_args, environ_map); |
| 360 | }, |
| 361 | .clang, .@"-cc1", .@"-cc1as" => { |
| 362 | dev.check(.clang_command); |
| 363 | return process.exit(try clangMain(arena, args)); |
| 364 | }, |
| 365 | .@"ld.lld", .@"lld-link", .@"wasm-ld" => { |
| 366 | dev.check(.lld_linker); |
| 367 | return process.exit(try lldMain(arena, args, true)); |
| 368 | }, |
| 369 | .cc => { |
| 370 | dev.check(.cc_command); |
| 371 | return buildOutputType(gpa, arena, io, args, .cc, environ_map); |
| 372 | }, |
| 373 | .@"c++" => { |
| 374 | dev.check(.cc_command); |
| 375 | return buildOutputType(gpa, arena, io, args, .cpp, environ_map); |
| 376 | }, |
| 377 | .@"translate-c" => { |
| 378 | dev.check(.translate_c_command); |
| 379 | return buildOutputType(gpa, arena, io, args, .translate_c, environ_map); |
| 380 | }, |
| 381 | .rc => { |
| 382 | const use_server = cmd_args.len > 0 and std.mem.eql(u8, cmd_args[0], "--zig-integration"); |
| 383 | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 384 | .cmd_name = "resinator", |
| 385 | .root_src_path = "resinator/main.zig", |
| 386 | .depend_on_aro = true, |
| 387 | .prepend_zig_lib_dir_path = true, |
| 388 | .server = use_server, |
| 389 | .color = Color.settingFromEnvironment(environ_map), |
| 390 | }); |
| 391 | }, |
| 392 | .fmt => { |
| 393 | dev.check(.fmt_command); |
| 394 | return @import("fmt.zig").run(gpa, arena, io, cmd_args); |
| 395 | }, |
| 396 | .objcopy => { |
| 397 | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 398 | .cmd_name = "objcopy", |
| 399 | .root_src_path = "objcopy.zig", |
| 400 | .color = Color.settingFromEnvironment(environ_map), |
| 401 | }); |
| 402 | }, |
| 403 | .objdump => { |
| 404 | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 405 | .cmd_name = "objdump", |
| 406 | .root_src_path = "objdump.zig", |
| 407 | .color = Color.settingFromEnvironment(environ_map), |
| 408 | }); |
| 409 | }, |
| 410 | .fetch => { |
| 411 | return cmdFetch(gpa, arena, io, cmd_args, environ_map); |
| 412 | }, |
| 413 | .libc => { |
| 414 | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 415 | .cmd_name = "libc", |
| 416 | .root_src_path = "libc.zig", |
| 417 | .prepend_zig_lib_dir_path = true, |
| 418 | .color = Color.settingFromEnvironment(environ_map), |
| 419 | }); |
| 420 | }, |
| 421 | .std => { |
| 422 | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 423 | .cmd_name = "std", |
| 424 | .root_src_path = "std-docs.zig", |
| 425 | .prepend_zig_lib_dir_path = true, |
| 426 | .prepend_zig_exe_path = true, |
| 427 | .prepend_global_cache_path = true, |
| 428 | .color = Color.settingFromEnvironment(environ_map), |
| 429 | }); |
| 430 | }, |
| 431 | .init => { |
| 432 | return cmdInit(gpa, arena, io, cmd_args); |
| 433 | }, |
| 434 | .targets => { |
| 435 | dev.check(.targets_command); |
| 436 | const host = std.zig.resolveTargetQueryOrFatal(io, .{}); |
| 437 | var stdout_writer = Io.File.stdout().writer(io, &stdout_buffer); |
| 438 | try @import("print_targets.zig").cmdTargets(arena, io, cmd_args, &stdout_writer.interface, &host); |
| 439 | return stdout_writer.interface.flush(); |
| 440 | }, |
| 441 | .version => { |
| 442 | dev.check(.version_command); |
| 443 | try Io.File.stdout().writeStreamingAll(io, build_options.version ++ "\n"); |
| 444 | return; |
| 445 | }, |
| 446 | .env => { |
| 447 | dev.check(.env_command); |
| 448 | const host = std.zig.resolveTargetQueryOrFatal(io, .{}); |
| 449 | var stdout_writer = Io.File.stdout().writer(io, &stdout_buffer); |
| 450 | try @import("print_env.zig").cmdEnv( |
| 451 | arena, |
| 452 | io, |
| 453 | &stdout_writer.interface, |
| 454 | args, |
| 455 | preopens, |
| 456 | &host, |
| 457 | environ_map, |
| 458 | ); |
| 459 | return stdout_writer.interface.flush(); |
| 460 | }, |
| 461 | .reduce => { |
| 462 | return jitCmd(gpa, arena, io, cmd_args, environ_map, .{ |
| 463 | .cmd_name = "reduce", |
| 464 | .root_src_path = "reduce.zig", |
| 465 | .color = Color.settingFromEnvironment(environ_map), |
| 466 | }); |
| 467 | }, |
| 468 | .zen => { |
| 469 | dev.check(.zen_command); |
| 470 | return Io.File.stdout().writeStreamingAll(io, info_zen); |
| 471 | }, |
| 472 | .help, .@"-h", .@"--help" => { |
| 473 | dev.check(.help_command); |
| 474 | return Io.File.stdout().writeStreamingAll(io, usage); |
| 475 | }, |
| 476 | .@"ast-check" => { |
| 477 | dev.check(.ast_check_command); |
| 478 | return cmdAstCheck(arena, io, cmd_args, environ_map); |
| 479 | }, |
| 480 | .changelist => { |
| 481 | dev.check(.changelist_command); |
| 482 | return cmdChangelist(arena, io, cmd_args, environ_map); |
| 483 | }, |
| 484 | .@"dump-zir" => { |
| 485 | dev.check(.dump_zir_command); |
| 486 | return cmdDumpZir(arena, io, cmd_args); |
| 487 | }, |
| 412 | 488 | } |
| 413 | 489 | } |
| 414 | 490 | |
| ... | ... | @@ -6537,8 +6613,6 @@ const usage_ast_check = |
| 6537 | 6613 | ; |
| 6538 | 6614 | |
| 6539 | 6615 | fn cmdAstCheck(arena: Allocator, io: Io, args: []const []const u8, environ_map: *const std.process.Environ.Map) !void { |
| 6540 | | dev.check(.ast_check_command); |
| 6541 | | |
| 6542 | 6616 | const Zir = std.zig.Zir; |
| 6543 | 6617 | |
| 6544 | 6618 | var color: Color = Color.settingFromEnvironment(environ_map); |
| ... | ... | @@ -6705,8 +6779,6 @@ fn cmdAstCheck(arena: Allocator, io: Io, args: []const []const u8, environ_map: |
| 6705 | 6779 | |
| 6706 | 6780 | /// This is only enabled for debug builds. |
| 6707 | 6781 | fn cmdDumpZir(arena: Allocator, io: Io, args: []const []const u8) !void { |
| 6708 | | dev.check(.dump_zir_command); |
| 6709 | | |
| 6710 | 6782 | const Zir = std.zig.Zir; |
| 6711 | 6783 | |
| 6712 | 6784 | const cache_file = args[0]; |
| ... | ... | @@ -6749,8 +6821,6 @@ fn cmdDumpZir(arena: Allocator, io: Io, args: []const []const u8) !void { |
| 6749 | 6821 | |
| 6750 | 6822 | /// This is only enabled for debug builds. |
| 6751 | 6823 | fn cmdChangelist(arena: Allocator, io: Io, args: []const []const u8, environ_map: *const std.process.Environ.Map) !void { |
| 6752 | | dev.check(.changelist_command); |
| 6753 | | |
| 6754 | 6824 | const color: Color = Color.settingFromEnvironment(environ_map); |
| 6755 | 6825 | const Zir = std.zig.Zir; |
| 6756 | 6826 | |