1
0
Fork 0
mirror of https://github.com/zigzap/zap.git synced 2025-10-21 07:34:08 +00:00
zap/facil.io/build.zig
JacobCrabill 21d8afb21a Update build system to latest Zig master
Builds with Zig 0.12.0-dev.2341 on x86_64-linux

Also ran 'mdformat' on README.md
2024-01-30 20:30:31 -08:00

89 lines
3 KiB
Zig

const std = @import("std");
pub fn build_facilio(
comptime subdir: []const u8,
b: *std.Build,
target: std.Build.ResolvedTarget,
optimize: std.builtin.OptimizeMode,
use_openssl: bool,
) !*std.Build.Step.Compile {
const lib = b.addStaticLibrary(.{
.name = "facil.io",
.target = target,
.optimize = optimize,
});
// Generate flags
var flags = std.ArrayList([]const u8).init(std.heap.page_allocator);
// if (lib.optimize != .Debug) try flags.append("-Os"); // TODO
try flags.append("-Wno-return-type-c-linkage");
try flags.append("-fno-sanitize=undefined");
//
// let's not override malloc from within the lib
// when used as lib, not sure if it would work as expected anyway
// try flags.append("-DFIO_OVERRIDE_MALLOC");
//
try flags.append("-DFIO_HTTP_EXACT_LOGGING");
if (target.result.abi == .musl)
try flags.append("-D_LARGEFILE64_SOURCE");
if (use_openssl)
try flags.append("-DHAVE_OPENSSL -DFIO_TLS_FOUND");
// Include paths
lib.addIncludePath(.{ .path = subdir ++ "/." });
lib.addIncludePath(.{ .path = subdir ++ "/lib/facil" });
lib.addIncludePath(.{ .path = subdir ++ "/lib/facil/fiobj" });
lib.addIncludePath(.{ .path = subdir ++ "/lib/facil/cli" });
lib.addIncludePath(.{ .path = subdir ++ "/lib/facil/http" });
lib.addIncludePath(.{ .path = subdir ++ "/lib/facil/http/parsers" });
if (use_openssl)
lib.addIncludePath(.{ .path = subdir ++ "/lib/facil/tls" });
// C source files
lib.addCSourceFiles(.{
.files = &.{
subdir ++ "/lib/facil/fio.c",
subdir ++ "/lib/facil/fio_zig.c",
subdir ++ "/lib/facil/http/http.c",
subdir ++ "/lib/facil/http/http1.c",
subdir ++ "/lib/facil/http/websockets.c",
subdir ++ "/lib/facil/http/http_internal.c",
subdir ++ "/lib/facil/fiobj/fiobj_numbers.c",
subdir ++ "/lib/facil/fiobj/fio_siphash.c",
subdir ++ "/lib/facil/fiobj/fiobj_str.c",
subdir ++ "/lib/facil/fiobj/fiobj_ary.c",
subdir ++ "/lib/facil/fiobj/fiobj_data.c",
subdir ++ "/lib/facil/fiobj/fiobj_hash.c",
subdir ++ "/lib/facil/fiobj/fiobj_json.c",
subdir ++ "/lib/facil/fiobj/fiobject.c",
subdir ++ "/lib/facil/fiobj/fiobj_mustache.c",
subdir ++ "/lib/facil/cli/fio_cli.c",
},
.flags = flags.items,
});
if (use_openssl) {
lib.addCSourceFiles(.{
.files = &.{
subdir ++ "/lib/facil/tls/fio_tls_openssl.c",
subdir ++ "/lib/facil/tls/fio_tls_missing.c",
},
.flags = flags.items,
});
}
// link against libc
lib.linkLibC();
// link in libopenssl and libcrypto on demand
if (use_openssl) {
lib.linkSystemLibrary("ssl");
lib.linkSystemLibrary("crypto");
}
b.installArtifact(lib);
return lib;
}