|
| 1 | +const std = @import("std"); |
| 2 | + |
| 3 | +pub fn build(b: *std.Build) !void { |
| 4 | + const target = b.standardTargetOptions(.{}); |
| 5 | + const optimize = b.standardOptimizeOption(.{}); |
| 6 | + |
| 7 | + const upstream = b.dependency("freetype", .{}); |
| 8 | + const lib = b.addLibrary(.{ |
| 9 | + .name = "freetype", |
| 10 | + .linkage = .static, |
| 11 | + .root_module = b.createModule(.{ |
| 12 | + .target = target, |
| 13 | + .optimize = optimize, |
| 14 | + .link_libc = true, |
| 15 | + }), |
| 16 | + }); |
| 17 | + |
| 18 | + lib.addIncludePath(upstream.path("include")); |
| 19 | + lib.installHeadersDirectory(upstream.path("include"), "", .{}); |
| 20 | + |
| 21 | + // Dependencies |
| 22 | + const zlib_dep = b.dependency("zlib", .{ .target = target, .optimize = optimize }); |
| 23 | + lib.root_module.linkLibrary(zlib_dep.artifact("z")); |
| 24 | + |
| 25 | + const libpng_dep = b.dependency("libpng", .{ .target = target, .optimize = optimize }); |
| 26 | + lib.root_module.linkLibrary(libpng_dep.artifact("png")); |
| 27 | + |
| 28 | + var flags: std.ArrayList([]const u8) = .empty; |
| 29 | + defer flags.deinit(b.allocator); |
| 30 | + |
| 31 | + try flags.appendSlice(b.allocator, &.{ |
| 32 | + "-DFT2_BUILD_LIBRARY", |
| 33 | + |
| 34 | + "-DFT_CONFIG_OPTION_SYSTEM_ZLIB", |
| 35 | + "-DFT_CONFIG_OPTION_USE_PNG", |
| 36 | + |
| 37 | + "-DHAVE_UNISTD_H", |
| 38 | + "-DHAVE_FCNTL_H", |
| 39 | + |
| 40 | + "-fno-sanitize=undefined", |
| 41 | + }); |
| 42 | + |
| 43 | + lib.root_module.addCSourceFiles(.{ |
| 44 | + .root = upstream.path(""), |
| 45 | + .files = srcs, |
| 46 | + .flags = flags.items, |
| 47 | + }); |
| 48 | + |
| 49 | + switch (target.result.os.tag) { |
| 50 | + .linux => lib.root_module.addCSourceFile(.{ |
| 51 | + .file = upstream.path("builds/unix/ftsystem.c"), |
| 52 | + .flags = flags.items, |
| 53 | + }), |
| 54 | + .windows => lib.root_module.addCSourceFile(.{ |
| 55 | + .file = upstream.path("builds/windows/ftsystem.c"), |
| 56 | + .flags = flags.items, |
| 57 | + }), |
| 58 | + else => lib.root_module.addCSourceFile(.{ |
| 59 | + .file = upstream.path("src/base/ftsystem.c"), |
| 60 | + .flags = flags.items, |
| 61 | + }), |
| 62 | + } |
| 63 | + switch (target.result.os.tag) { |
| 64 | + .windows => { |
| 65 | + lib.root_module.addCSourceFile(.{ |
| 66 | + .file = upstream.path("builds/windows/ftdebug.c"), |
| 67 | + .flags = flags.items, |
| 68 | + }); |
| 69 | + lib.root_module.addWin32ResourceFile(.{ |
| 70 | + .file = upstream.path("src/base/ftver.rc"), |
| 71 | + }); |
| 72 | + }, |
| 73 | + else => lib.root_module.addCSourceFile(.{ |
| 74 | + .file = upstream.path("src/base/ftdebug.c"), |
| 75 | + .flags = flags.items, |
| 76 | + }), |
| 77 | + } |
| 78 | + |
| 79 | + b.installArtifact(lib); |
| 80 | +} |
| 81 | + |
| 82 | +const srcs: []const []const u8 = &.{ |
| 83 | + "src/autofit/autofit.c", |
| 84 | + "src/base/ftbase.c", |
| 85 | + "src/base/ftbbox.c", |
| 86 | + "src/base/ftbdf.c", |
| 87 | + "src/base/ftbitmap.c", |
| 88 | + "src/base/ftcid.c", |
| 89 | + "src/base/ftfstype.c", |
| 90 | + "src/base/ftgasp.c", |
| 91 | + "src/base/ftglyph.c", |
| 92 | + "src/base/ftgxval.c", |
| 93 | + "src/base/ftinit.c", |
| 94 | + "src/base/ftmm.c", |
| 95 | + "src/base/ftotval.c", |
| 96 | + "src/base/ftpatent.c", |
| 97 | + "src/base/ftpfr.c", |
| 98 | + "src/base/ftstroke.c", |
| 99 | + "src/base/ftsynth.c", |
| 100 | + "src/base/fttype1.c", |
| 101 | + "src/base/ftwinfnt.c", |
| 102 | + "src/bdf/bdf.c", |
| 103 | + "src/bzip2/ftbzip2.c", |
| 104 | + "src/cache/ftcache.c", |
| 105 | + "src/cff/cff.c", |
| 106 | + "src/cid/type1cid.c", |
| 107 | + "src/gzip/ftgzip.c", |
| 108 | + "src/lzw/ftlzw.c", |
| 109 | + "src/pcf/pcf.c", |
| 110 | + "src/pfr/pfr.c", |
| 111 | + "src/psaux/psaux.c", |
| 112 | + "src/pshinter/pshinter.c", |
| 113 | + "src/psnames/psnames.c", |
| 114 | + "src/raster/raster.c", |
| 115 | + "src/sdf/sdf.c", |
| 116 | + "src/sfnt/sfnt.c", |
| 117 | + "src/smooth/smooth.c", |
| 118 | + "src/svg/svg.c", |
| 119 | + "src/truetype/truetype.c", |
| 120 | + "src/type1/type1.c", |
| 121 | + "src/type42/type42.c", |
| 122 | + "src/winfonts/winfnt.c", |
| 123 | +}; |
0 commit comments