diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-04-26 15:33:29 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-05-08 19:37:29 -0700 |
| commit | 06ee65af9ed6aa5ee4d1d7f4fab9d7acecf66e76 (patch) | |
| tree | 1316711b92a43dd5c599e425b8693fa8e1e0c0b7 /src | |
| parent | bc6ebc6f2597fda1f98842c6f545751fef2a5334 (diff) | |
| download | zig-06ee65af9ed6aa5ee4d1d7f4fab9d7acecf66e76.tar.gz zig-06ee65af9ed6aa5ee4d1d7f4fab9d7acecf66e76.zip | |
libcxx: update to LLVM 18
release/18.x branch, commit 78b99c73ee4b96fe9ce0e294d4632326afb2db42
This adds the flag `-D_LIBCPP_HARDENING_MODE` which is determined based
on the Zig optimization mode.
This commit also fixes libunwind, libcxx, and libcxxabi to properly
report sub compilation errors.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Compilation.zig | 29 | ||||
| -rw-r--r-- | src/libcxx.zig | 21 |
2 files changed, 36 insertions, 14 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig index fa9331eae5..95a3b8cc3a 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -3590,39 +3590,42 @@ fn processOneJob(comp: *Compilation, job: Job, prog_node: *std.Progress.Node) !v const named_frame = tracy.namedFrame("libunwind"); defer named_frame.end(); - libunwind.buildStaticLib(comp, prog_node) catch |err| { - // TODO Surface more error details. - comp.lockAndSetMiscFailure( + libunwind.buildStaticLib(comp, prog_node) catch |err| switch (err) { + error.OutOfMemory => return error.OutOfMemory, + error.SubCompilationFailed => return, // error reported already + else => comp.lockAndSetMiscFailure( .libunwind, "unable to build libunwind: {s}", .{@errorName(err)}, - ); + ), }; }, .libcxx => { const named_frame = tracy.namedFrame("libcxx"); defer named_frame.end(); - libcxx.buildLibCXX(comp, prog_node) catch |err| { - // TODO Surface more error details. - comp.lockAndSetMiscFailure( + libcxx.buildLibCXX(comp, prog_node) catch |err| switch (err) { + error.OutOfMemory => return error.OutOfMemory, + error.SubCompilationFailed => return, // error reported already + else => comp.lockAndSetMiscFailure( .libcxx, "unable to build libcxx: {s}", .{@errorName(err)}, - ); + ), }; }, .libcxxabi => { const named_frame = tracy.namedFrame("libcxxabi"); defer named_frame.end(); - libcxx.buildLibCXXABI(comp, prog_node) catch |err| { - // TODO Surface more error details. - comp.lockAndSetMiscFailure( + libcxx.buildLibCXXABI(comp, prog_node) catch |err| switch (err) { + error.OutOfMemory => return error.OutOfMemory, + error.SubCompilationFailed => return, // error reported already + else => comp.lockAndSetMiscFailure( .libcxxabi, "unable to build libcxxabi: {s}", .{@errorName(err)}, - ); + ), }; }, .libtsan => { @@ -5159,6 +5162,8 @@ pub fn addCCArgs( try argv.append(try std.fmt.allocPrint(arena, "-D_LIBCPP_ABI_NAMESPACE=__{d}", .{ @intFromEnum(comp.libcxx_abi_version), })); + + try argv.append(libcxx.hardeningModeFlag(mod.optimize_mode)); } if (comp.config.link_libunwind) { diff --git a/src/libcxx.zig b/src/libcxx.zig index dc1930be4d..63ebc3f2c8 100644 --- a/src/libcxx.zig +++ b/src/libcxx.zig @@ -43,12 +43,14 @@ const libcxx_files = [_][]const u8{ "src/atomic.cpp", "src/barrier.cpp", "src/bind.cpp", + "src/call_once.cpp", "src/charconv.cpp", "src/chrono.cpp", "src/condition_variable.cpp", "src/condition_variable_destructor.cpp", + "src/error_category.cpp", "src/exception.cpp", - "src/experimental/memory_resource.cpp", + "src/experimental/keep.cpp", "src/filesystem/directory_entry.cpp", "src/filesystem/directory_iterator.cpp", "src/filesystem/filesystem_clock.cpp", @@ -58,13 +60,13 @@ const libcxx_files = [_][]const u8{ //"src/filesystem/int128_builtins.cpp", "src/filesystem/operations.cpp", "src/filesystem/path.cpp", + "src/fstream.cpp", "src/functional.cpp", "src/future.cpp", "src/hash.cpp", "src/ios.cpp", "src/ios.instantiations.cpp", "src/iostream.cpp", - "src/legacy_debug_handler.cpp", "src/legacy_pointer_safety.cpp", "src/locale.cpp", "src/memory.cpp", @@ -75,7 +77,9 @@ const libcxx_files = [_][]const u8{ "src/new_handler.cpp", "src/new_helpers.cpp", "src/optional.cpp", + "src/ostream.cpp", "src/print.cpp", + //"src/pstl/libdispatch.cpp", "src/random.cpp", "src/random_shuffle.cpp", "src/regex.cpp", @@ -95,6 +99,8 @@ const libcxx_files = [_][]const u8{ "src/system_error.cpp", "src/thread.cpp", "src/typeinfo.cpp", + "src/tz.cpp", + "src/tzdb_list.cpp", "src/valarray.cpp", "src/variant.cpp", "src/vector.cpp", @@ -209,6 +215,7 @@ pub fn buildLibCXX(comp: *Compilation, prog_node: *std.Progress.Node) !void { } try cflags.append("-DNDEBUG"); + try cflags.append(hardeningModeFlag(optimize_mode)); try cflags.append("-D_LIBCPP_BUILDING_LIBRARY"); try cflags.append("-D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER"); try cflags.append("-DLIBCXX_BUILDING_LIBCXXABI"); @@ -449,6 +456,8 @@ pub fn buildLibCXXABI(comp: *Compilation, prog_node: *std.Progress.Node) !void { } } + try cflags.append(hardeningModeFlag(optimize_mode)); + if (target_util.supports_fpic(target)) { try cflags.append("-fPIC"); } @@ -509,3 +518,11 @@ pub fn buildLibCXXABI(comp: *Compilation, prog_node: *std.Progress.Node) !void { assert(comp.libcxxabi_static_lib == null); comp.libcxxabi_static_lib = try sub_compilation.toCrtFile(); } + +pub fn hardeningModeFlag(optimize_mode: std.builtin.OptimizeMode) []const u8 { + return switch (optimize_mode) { + .Debug => "-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG", + .ReleaseFast, .ReleaseSmall => "-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_NONE", + .ReleaseSafe => "-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST", + }; +} |
