Skip to content

Commit e68e6a0

Browse files
committed
make snappy a lazy dep
1 parent 72ce2f9 commit e68e6a0

File tree

2 files changed

+43
-34
lines changed

2 files changed

+43
-34
lines changed

build.zig

Lines changed: 42 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,28 @@ const Build = std.Build;
33
const ResolvedTarget = Build.ResolvedTarget;
44
const OptimizeMode = std.builtin.OptimizeMode;
55

6-
pub fn build(b: *Build) void {
6+
const Options = struct {
7+
enable_snappy: bool,
8+
9+
fn init(b: *Build) Options {
10+
return .{
11+
.enable_snappy = b.option(
12+
bool,
13+
"enable_snappy",
14+
"Enables and builds with the Snappy compressor",
15+
) orelse false,
16+
};
17+
}
18+
};
19+
20+
pub fn build(b: *Build) !void {
721
const target = b.standardTargetOptions(.{});
822
const optimize = b.standardOptimizeOption(.{});
923

24+
const options: Options = .init(b);
25+
1026
// RocksDB's translate-c module
11-
const rocksdb_mod = addRocksDB(b, target, optimize);
27+
const rocksdb_mod = try addRocksDB(b, target, optimize, options);
1228
const bindings_mod = b.addModule("bindings", .{
1329
.target = target,
1430
.optimize = optimize,
@@ -32,7 +48,8 @@ fn addRocksDB(
3248
b: *Build,
3349
target: ResolvedTarget,
3450
optimize: OptimizeMode,
35-
) *Build.Module {
51+
options: Options,
52+
) !*Build.Module {
3653
const rocks_dep = b.dependency("rocksdb", .{});
3754

3855
const translate_c = b.addTranslateC(.{
@@ -68,18 +85,18 @@ fn addRocksDB(
6885
}),
6986
});
7087

71-
const snappy = b.addLibrary(.{
88+
const maybe_libsnappy = if (options.enable_snappy) b.addLibrary(.{
7289
.name = "snappy",
7390
.linkage = .static,
7491
.root_module = b.createModule(.{
7592
.target = target,
7693
.optimize = optimize,
7794
.pic = if (force_pic == true) true else null,
7895
}),
79-
});
96+
}) else null;
8097

81-
try buildRocksDB(b, static_rocksdb, snappy, target);
82-
try buildRocksDB(b, dynamic_rocksdb, snappy, target);
98+
try buildRocksDB(b, static_rocksdb, maybe_libsnappy, target);
99+
try buildRocksDB(b, dynamic_rocksdb, maybe_libsnappy, target);
83100

84101
mod.addIncludePath(rocks_dep.path("include"));
85102
mod.linkLibrary(static_rocksdb);
@@ -91,20 +108,25 @@ fn addRocksDB(
91108
fn buildRocksDB(
92109
b: *Build,
93110
librocksdb: *std.Build.Step.Compile,
94-
libsnappy: *std.Build.Step.Compile,
111+
maybe_libsnappy: ?*std.Build.Step.Compile,
95112
target: std.Build.ResolvedTarget,
96113
) !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-
101114
const t = target.result;
102115
const rocks_dep = b.dependency("rocksdb", .{});
103-
const snappy_dep = b.dependency("snappy", .{});
104116

105117
librocksdb.linkLibC();
106118
librocksdb.linkLibCpp();
107119

120+
var rocksdb_flags: std.ArrayListUnmanaged([]const u8) = .empty;
121+
defer rocksdb_flags.deinit(b.allocator);
122+
try rocksdb_flags.appendSlice(b.allocator, &.{
123+
"-std=c++17",
124+
"-faligned-new",
125+
"-DHAVE_ALIGNED_NEW",
126+
"-DROCKSDB_UBSAN_RUN",
127+
});
128+
if (maybe_libsnappy != null) try rocksdb_flags.append(b.allocator, "-DSNAPPY=1");
129+
108130
librocksdb.addIncludePath(rocks_dep.path("include"));
109131
librocksdb.addIncludePath(rocks_dep.path("."));
110132
librocksdb.addCSourceFiles(.{
@@ -447,18 +469,13 @@ fn buildRocksDB(
447469
"utilities/transactions/lock/range/range_tree/lib/util/dbt.cc",
448470
"utilities/transactions/lock/range/range_tree/lib/util/memarena.cc",
449471
},
450-
.flags = @as([]const []const u8, &.{
451-
"-std=c++17",
452-
"-faligned-new",
453-
"-DHAVE_ALIGNED_NEW",
454-
"-DROCKSDB_UBSAN_RUN",
455-
}) ++ @as([]const []const u8, if (enable_snappy)
456-
&.{"-DSNAPPY=1"}
457-
else
458-
&.{}),
472+
.flags = rocksdb_flags.items,
459473
});
460474

461-
if (enable_snappy) {
475+
if (maybe_libsnappy) |libsnappy| not_yet_fetched: {
476+
const snappy_dep = b.lazyDependency("snappy", .{}) orelse
477+
break :not_yet_fetched;
478+
462479
librocksdb.linkLibrary(libsnappy);
463480
librocksdb.addIncludePath(snappy_dep.path("."));
464481

@@ -500,12 +517,7 @@ fn buildRocksDB(
500517
if (t.cpu.arch == .aarch64) {
501518
librocksdb.addCSourceFile(.{
502519
.file = rocks_dep.path("util/crc32c_arm64.cc"),
503-
.flags = &.{
504-
"-std=c++17",
505-
"-faligned-new",
506-
"-DHAVE_ALIGNED_NEW",
507-
"-DROCKSDB_UBSAN_RUN",
508-
},
520+
.flags = rocksdb_flags.items,
509521
});
510522
}
511523

@@ -520,11 +532,7 @@ fn buildRocksDB(
520532
"env/fs_posix.cc",
521533
"env/io_posix.cc",
522534
},
523-
.flags = &.{
524-
"-std=c++17",
525-
"-faligned-new",
526-
"-DHAVE_ALIGNED_NEW",
527-
},
535+
.flags = rocksdb_flags.items,
528536
});
529537
} else {
530538
@panic("TODO: support windows!");

build.zig.zon

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
.snappy = .{
1212
.url = "git+https://github.com/google/snappy#25e52c58fbf83ee40f4c9284f757f777f691f76f",
1313
.hash = "N-V-__8AADcwMwCa__yeHfNDwYl4KEDbkj-VwAqY844Nblr8",
14+
.lazy = true,
1415
},
1516
},
1617
.paths = .{

0 commit comments

Comments
 (0)