diff --git a/lib/std/Build/Step/Compile.zig b/lib/std/Build/Step/Compile.zig index 64e757a7f5..572e2692d3 100644 --- a/lib/std/Build/Step/Compile.zig +++ b/lib/std/Build/Step/Compile.zig @@ -39,7 +39,7 @@ name_only_filename: ?[]const u8, strip: ?bool, unwind_tables: ?bool, // keep in sync with src/link.zig:CompressDebugSections -compress_debug_sections: enum { none, zlib } = .none, +compress_debug_sections: enum { none, zlib, zstd } = .none, lib_paths: ArrayList(LazyPath), rpaths: ArrayList(LazyPath), frameworks: StringHashMap(FrameworkLinkInfo), @@ -1628,6 +1628,7 @@ fn make(step: *Step, prog_node: *std.Progress.Node) !void { switch (self.compress_debug_sections) { .none => {}, .zlib => try zig_args.append("--compress-debug-sections=zlib"), + .zstd => try zig_args.append("--compress-debug-sections=zstd"), } if (self.link_eh_frame_hdr) { diff --git a/src/link.zig b/src/link.zig index 844ddb7b40..6c3e31ce3e 100644 --- a/src/link.zig +++ b/src/link.zig @@ -281,7 +281,7 @@ pub const Options = struct { pub const HashStyle = enum { sysv, gnu, both }; -pub const CompressDebugSections = enum { none, zlib }; +pub const CompressDebugSections = enum { none, zlib, zstd }; /// The filesystem layout of darwin SDK elements. pub const DarwinSdkLayout = enum { diff --git a/src/link/Elf.zig b/src/link/Elf.zig index bf7bfaeb43..6efe8cad67 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -2230,6 +2230,7 @@ fn linkWithLLD(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node) !v switch (self.base.options.compress_debug_sections) { .none => {}, .zlib => try argv.append("--compress-debug-sections=zlib"), + .zstd => try argv.append("--compress-debug-sections=zstd"), } if (self.base.options.bind_global_refs_locally) { diff --git a/src/main.zig b/src/main.zig index e5e5eb0051..4193ab0b07 100644 --- a/src/main.zig +++ b/src/main.zig @@ -539,6 +539,7 @@ const usage_build_generic = \\ --compress-debug-sections=[e] Debug section compression settings \\ none No compression \\ zlib Compression with deflate/inflate + \\ zstd Compression with zstandard \\ --gc-sections Force removal of functions and data that are unreachable by the entry point or exported symbols \\ --no-gc-sections Don't force removal of unreachable functions and data \\ --sort-section=[value] Sort wildcard section patterns by 'name' or 'alignment' @@ -1110,7 +1111,7 @@ fn buildOutputType( } else if (mem.startsWith(u8, arg, "--compress-debug-sections=")) { const param = arg["--compress-debug-sections=".len..]; linker_compress_debug_sections = std.meta.stringToEnum(link.CompressDebugSections, param) orelse { - fatal("expected --compress-debug-sections=[none|zlib], found '{s}'", .{param}); + fatal("expected --compress-debug-sections=[none|zlib|zstd], found '{s}'", .{param}); }; } else if (mem.eql(u8, arg, "--compress-debug-sections")) { linker_compress_debug_sections = link.CompressDebugSections.zlib; @@ -1986,7 +1987,7 @@ fn buildOutputType( linker_compress_debug_sections = .zlib; } else { linker_compress_debug_sections = std.meta.stringToEnum(link.CompressDebugSections, it.only_arg) orelse { - fatal("expected [none|zlib] after --compress-debug-sections, found '{s}'", .{it.only_arg}); + fatal("expected [none|zlib|zstd] after --compress-debug-sections, found '{s}'", .{it.only_arg}); }; } }, @@ -2139,7 +2140,7 @@ fn buildOutputType( } else if (mem.eql(u8, arg, "--compress-debug-sections")) { const arg1 = linker_args_it.nextOrFatal(); linker_compress_debug_sections = std.meta.stringToEnum(link.CompressDebugSections, arg1) orelse { - fatal("expected [none|zlib] after --compress-debug-sections, found '{s}'", .{arg1}); + fatal("expected [none|zlib|zstd] after --compress-debug-sections, found '{s}'", .{arg1}); }; } else if (mem.startsWith(u8, arg, "-z")) { var z_arg = arg[2..];