Skip to content

Commit ecfa28e

Browse files
committed
enable snappy / build it from source
1 parent 2a5e211 commit ecfa28e

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

build.zig

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,18 @@ fn addRocksDB(
6868
}),
6969
});
7070

71-
try buildRocksDB(b, static_rocksdb, target);
72-
try buildRocksDB(b, dynamic_rocksdb, target);
71+
const snappy = b.addLibrary(.{
72+
.name = "snappy",
73+
.linkage = .static,
74+
.root_module = b.createModule(.{
75+
.target = target,
76+
.optimize = optimize,
77+
.pic = if (force_pic == true) true else null,
78+
}),
79+
});
80+
81+
try buildRocksDB(b, static_rocksdb, snappy, target);
82+
try buildRocksDB(b, dynamic_rocksdb, snappy, target);
7383

7484
mod.addIncludePath(rocks_dep.path("include"));
7585
mod.linkLibrary(static_rocksdb);
@@ -81,10 +91,16 @@ fn addRocksDB(
8191
fn buildRocksDB(
8292
b: *Build,
8393
librocksdb: *std.Build.Step.Compile,
94+
libsnappy: *std.Build.Step.Compile,
8495
target: std.Build.ResolvedTarget,
8596
) !void {
97+
// Ideally snappy could be an optional dependency, but Zig doesn't support them yet.
98+
// Luckily building this is cheap.
99+
const enable_snappy: bool = true;
100+
86101
const t = target.result;
87102
const rocks_dep = b.dependency("rocksdb", .{});
103+
const snappy_dep = b.dependency("snappy", .{});
88104

89105
librocksdb.linkLibC();
90106
librocksdb.linkLibCpp();
@@ -431,14 +447,39 @@ fn buildRocksDB(
431447
"utilities/transactions/lock/range/range_tree/lib/util/dbt.cc",
432448
"utilities/transactions/lock/range/range_tree/lib/util/memarena.cc",
433449
},
434-
.flags = &.{
450+
.flags = @as([]const []const u8, &.{
435451
"-std=c++17",
436452
"-faligned-new",
437453
"-DHAVE_ALIGNED_NEW",
438454
"-DROCKSDB_UBSAN_RUN",
439-
},
455+
}) ++ @as([]const []const u8, if (enable_snappy)
456+
&.{"-DSNAPPY=1"}
457+
else
458+
&.{}),
440459
});
441460

461+
if (enable_snappy) {
462+
libsnappy.linkLibCpp();
463+
464+
libsnappy.addCSourceFiles(.{
465+
.root = snappy_dep.path("."),
466+
.files = &.{
467+
"snappy-c.cc",
468+
"snappy-sinksource.cc",
469+
"snappy-stubs-internal.cc",
470+
"snappy.cc",
471+
},
472+
.flags = &.{
473+
"-std=c++11",
474+
"-fno-exceptions",
475+
"-fno-rtti",
476+
"-Wno-sign-compare",
477+
},
478+
});
479+
480+
librocksdb.linkLibrary(libsnappy);
481+
}
482+
442483
// platform dependent stuff
443484
if (t.cpu.arch == .aarch64) {
444485
librocksdb.addCSourceFile(.{

build.zig.zon

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
.url = "git+https://github.com/Syndica/rocksdb#3793e721c7795b338d9d7808544b75db6bde3548",
99
.hash = "N-V-__8AAAKhcQL5PtDzqfPNCjk1LJCK8svO8KtC-f_3bj6z",
1010
},
11+
.snappy = .{
12+
.url = "git+https://github.com/google/snappy#25e52c58fbf83ee40f4c9284f757f777f691f76f",
13+
.hash = "N-V-__8AADcwMwCa__yeHfNDwYl4KEDbkj-VwAqY844Nblr8",
14+
},
1115
},
1216
.paths = .{
1317
"build.zig",

0 commit comments

Comments
 (0)