aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-04-26 15:33:29 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-05-08 19:37:29 -0700
commit06ee65af9ed6aa5ee4d1d7f4fab9d7acecf66e76 (patch)
tree1316711b92a43dd5c599e425b8693fa8e1e0c0b7 /src
parentbc6ebc6f2597fda1f98842c6f545751fef2a5334 (diff)
downloadzig-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.zig29
-rw-r--r--src/libcxx.zig21
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",
+ };
+}