yamori

有給休暇計算を主目的とした簡易勤怠管理システム

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com>
// SPDX-License-Identifier: AGPL-3.0-only

//! Zig のビルドスクリプト。

const std = @import("std");

const ProtoGenStep = @import("gremlin").ProtoGenStep;

pub fn build(b: *std.Build) void {
    const system_target = b.standardTargetOptions(.{});
    const system_optimize = b.standardOptimizeOption(.{});

    const proto_gen = ProtoGenStep.create(b, .{
        .proto_sources = b.path("../proto/"),
        .target = b.path("src/proto"),
    });

    // === WASM

    const wasm_target = b.resolveTargetQuery(.{
        .os_tag = .freestanding,
        .cpu_arch = .wasm32,
    });

    // ファイルサイズが大きくなってきたら ReleaseSmall に置き換えるが、
    // アプリケーションであるため初回ダウンロードよりも継続的な実行速度
    // を重視したビルド設定になっている。
    const wasm_optimize: std.builtin.OptimizeMode = .ReleaseSmall;

    const wasm = b.addExecutable(.{
        .name = "yamori_backend",
        .root_source_file = b.path("src/wasm.zig"),
        .target = wasm_target,
        .optimize = wasm_optimize,
    });

    wasm.root_module.addImport(
        "gremlin",
        b.dependency("gremlin", .{
            .target = wasm_target,
            .optimize = wasm_optimize,
        }).module("gremlin"),
    );
    // WASM モジュールを出力するために必要。
    wasm.rdynamic = true;
    wasm.entry = .disabled;

    wasm.step.dependOn(&proto_gen.step);

    b.installArtifact(wasm);

    // === サーバ

    const server = b.addExecutable(.{
        .name = "yamori",
        .root_source_file = b.path("src/server.zig"),
        .target = system_target,
        .optimize = system_optimize,
    });

    server.root_module.addImport(
        "gremlin",
        b.dependency("gremlin", .{
            .target = system_target,
            .optimize = system_optimize,
        }).module("gremlin"),
    );

    server.step.dependOn(&proto_gen.step);

    b.installArtifact(server);
}