| ... | @@ -284,6 +284,7 @@ const Code = struct { | ... | @@ -284,6 +284,7 @@ const Code = struct { |
| 284 | link_objects: []const []const u8, | 284 | link_objects: []const []const u8, |
| 285 | target_str: ?[]const u8, | 285 | target_str: ?[]const u8, |
| 286 | link_libc: bool, | 286 | link_libc: bool, |
| | 287 | link_mode: ?std.builtin.LinkMode, |
| 287 | disable_cache: bool, | 288 | disable_cache: bool, |
| 288 | | 289 | |
| 289 | const Id = union(enum) { | 290 | const Id = union(enum) { |
| ... | @@ -533,6 +534,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { | ... | @@ -533,6 +534,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 533 | defer link_objects.deinit(); | 534 | defer link_objects.deinit(); |
| 534 | var target_str: ?[]const u8 = null; | 535 | var target_str: ?[]const u8 = null; |
| 535 | var link_libc = false; | 536 | var link_libc = false; |
| | 537 | var link_mode: ?std.builtin.LinkMode = null; |
| 536 | var disable_cache = false; | 538 | var disable_cache = false; |
| 537 | | 539 | |
| 538 | const source_token = while (true) { | 540 | const source_token = while (true) { |
| ... | @@ -562,6 +564,8 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { | ... | @@ -562,6 +564,8 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 562 | target_str = "wasm32-wasi"; | 564 | target_str = "wasm32-wasi"; |
| 563 | } else if (mem.eql(u8, end_tag_name, "link_libc")) { | 565 | } else if (mem.eql(u8, end_tag_name, "link_libc")) { |
| 564 | link_libc = true; | 566 | link_libc = true; |
| | 567 | } else if (mem.eql(u8, end_tag_name, "link_mode_dynamic")) { |
| | 568 | link_mode = .Dynamic; |
| 565 | } else if (mem.eql(u8, end_tag_name, "code_end")) { | 569 | } else if (mem.eql(u8, end_tag_name, "code_end")) { |
| 566 | _ = try eatToken(tokenizer, Token.Id.BracketClose); | 570 | _ = try eatToken(tokenizer, Token.Id.BracketClose); |
| 567 | break content_tok; | 571 | break content_tok; |
| ... | @@ -585,6 +589,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { | ... | @@ -585,6 +589,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 585 | .link_objects = link_objects.toOwnedSlice(), | 589 | .link_objects = link_objects.toOwnedSlice(), |
| 586 | .target_str = target_str, | 590 | .target_str = target_str, |
| 587 | .link_libc = link_libc, | 591 | .link_libc = link_libc, |
| | 592 | .link_mode = link_mode, |
| 588 | .disable_cache = disable_cache, | 593 | .disable_cache = disable_cache, |
| 589 | }, | 594 | }, |
| 590 | }); | 595 | }); |
| ... | @@ -1468,6 +1473,18 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any | ... | @@ -1468,6 +1473,18 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1468 | try test_args.appendSlice(&[_][]const u8{ "-target", triple }); | 1473 | try test_args.appendSlice(&[_][]const u8{ "-target", triple }); |
| 1469 | try out.print(" -target {s}", .{triple}); | 1474 | try out.print(" -target {s}", .{triple}); |
| 1470 | } | 1475 | } |
| | 1476 | if (code.link_mode) |link_mode| { |
| | 1477 | switch (link_mode) { |
| | 1478 | .Static => { |
| | 1479 | try test_args.append("-static"); |
| | 1480 | try out.print(" -static", .{}); |
| | 1481 | }, |
| | 1482 | .Dynamic => { |
| | 1483 | try test_args.append("-dynamic"); |
| | 1484 | try out.print(" -dynamic", .{}); |
| | 1485 | }, |
| | 1486 | } |
| | 1487 | } |
| 1471 | const result = exec(allocator, &env_map, test_args.items) catch return parseError(tokenizer, code.source_token, "test failed", .{}); | 1488 | const result = exec(allocator, &env_map, test_args.items) catch return parseError(tokenizer, code.source_token, "test failed", .{}); |
| 1472 | const escaped_stderr = try escapeHtml(allocator, result.stderr); | 1489 | const escaped_stderr = try escapeHtml(allocator, result.stderr); |
| 1473 | const escaped_stdout = try escapeHtml(allocator, result.stdout); | 1490 | const escaped_stdout = try escapeHtml(allocator, result.stdout); |