Enable tsan for c libs

This commit is contained in:
Nikolay Govorov
2026-03-10 03:16:50 +00:00
parent 0e4a65efb7
commit 7171305972

View File

@@ -53,7 +53,7 @@ pub fn build(b: *Build) !void {
mod.addImport("build_config", opts.createModule()); mod.addImport("build_config", opts.createModule());
try linkV8(b, mod, enable_asan, enable_tsan, prebuilt_v8_path); try linkV8(b, mod, enable_asan, enable_tsan, prebuilt_v8_path);
try linkCurl(b, mod); try linkCurl(b, mod, enable_tsan);
try linkHtml5Ever(b, mod); try linkHtml5Ever(b, mod);
break :blk mod; break :blk mod;
@@ -189,19 +189,19 @@ fn linkHtml5Ever(b: *Build, mod: *Build.Module) !void {
mod.addObjectFile(obj); mod.addObjectFile(obj);
} }
fn linkCurl(b: *Build, mod: *Build.Module) !void { fn linkCurl(b: *Build, mod: *Build.Module, is_tsan: bool) !void {
const target = mod.resolved_target.?; const target = mod.resolved_target.?;
const curl = buildCurl(b, target, mod.optimize.?); const curl = buildCurl(b, target, mod.optimize.?, is_tsan);
mod.linkLibrary(curl); mod.linkLibrary(curl);
const zlib = buildZlib(b, target, mod.optimize.?); const zlib = buildZlib(b, target, mod.optimize.?, is_tsan);
curl.root_module.linkLibrary(zlib); curl.root_module.linkLibrary(zlib);
const brotli = buildBrotli(b, target, mod.optimize.?); const brotli = buildBrotli(b, target, mod.optimize.?, is_tsan);
for (brotli) |lib| curl.root_module.linkLibrary(lib); for (brotli) |lib| curl.root_module.linkLibrary(lib);
const nghttp2 = buildNghttp2(b, target, mod.optimize.?); const nghttp2 = buildNghttp2(b, target, mod.optimize.?, is_tsan);
curl.root_module.linkLibrary(nghttp2); curl.root_module.linkLibrary(nghttp2);
const boringssl = buildBoringSsl(b, target, mod.optimize.?); const boringssl = buildBoringSsl(b, target, mod.optimize.?);
@@ -218,13 +218,14 @@ fn linkCurl(b: *Build, mod: *Build.Module) !void {
} }
} }
fn buildZlib(b: *Build, target: Build.ResolvedTarget, optimize: std.builtin.OptimizeMode) *Build.Step.Compile { fn buildZlib(b: *Build, target: Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, is_tsan: bool) *Build.Step.Compile {
const dep = b.dependency("zlib", .{}); const dep = b.dependency("zlib", .{});
const mod = b.createModule(.{ const mod = b.createModule(.{
.target = target, .target = target,
.optimize = optimize, .optimize = optimize,
.link_libc = true, .link_libc = true,
.sanitize_thread = is_tsan,
}); });
const lib = b.addLibrary(.{ .name = "z", .root_module = mod }); const lib = b.addLibrary(.{ .name = "z", .root_module = mod });
@@ -249,13 +250,14 @@ fn buildZlib(b: *Build, target: Build.ResolvedTarget, optimize: std.builtin.Opti
return lib; return lib;
} }
fn buildBrotli(b: *Build, target: Build.ResolvedTarget, optimize: std.builtin.OptimizeMode) [3]*Build.Step.Compile { fn buildBrotli(b: *Build, target: Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, is_tsan: bool) [3]*Build.Step.Compile {
const dep = b.dependency("brotli", .{}); const dep = b.dependency("brotli", .{});
const mod = b.createModule(.{ const mod = b.createModule(.{
.target = target, .target = target,
.optimize = optimize, .optimize = optimize,
.link_libc = true, .link_libc = true,
.sanitize_thread = is_tsan,
}); });
mod.addIncludePath(dep.path("c/include")); mod.addIncludePath(dep.path("c/include"));
@@ -311,13 +313,14 @@ fn buildBoringSsl(b: *Build, target: Build.ResolvedTarget, optimize: std.builtin
return .{ ssl, crypto }; return .{ ssl, crypto };
} }
fn buildNghttp2(b: *Build, target: Build.ResolvedTarget, optimize: std.builtin.OptimizeMode) *Build.Step.Compile { fn buildNghttp2(b: *Build, target: Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, is_tsan: bool) *Build.Step.Compile {
const dep = b.dependency("nghttp2", .{}); const dep = b.dependency("nghttp2", .{});
const mod = b.createModule(.{ const mod = b.createModule(.{
.target = target, .target = target,
.optimize = optimize, .optimize = optimize,
.link_libc = true, .link_libc = true,
.sanitize_thread = is_tsan,
}); });
mod.addIncludePath(dep.path("lib/includes")); mod.addIncludePath(dep.path("lib/includes"));
@@ -362,6 +365,7 @@ fn buildCurl(
b: *Build, b: *Build,
target: Build.ResolvedTarget, target: Build.ResolvedTarget,
optimize: std.builtin.OptimizeMode, optimize: std.builtin.OptimizeMode,
is_tsan: bool,
) *Build.Step.Compile { ) *Build.Step.Compile {
const dep = b.dependency("curl", .{}); const dep = b.dependency("curl", .{});
@@ -369,6 +373,7 @@ fn buildCurl(
.target = target, .target = target,
.optimize = optimize, .optimize = optimize,
.link_libc = true, .link_libc = true,
.sanitize_thread = is_tsan,
}); });
mod.addIncludePath(dep.path("lib")); mod.addIncludePath(dep.path("lib"));
mod.addIncludePath(dep.path("include")); mod.addIncludePath(dep.path("include"));