tangled
alpha
login
or
join now
altagos.dev
/
factorio-toolbox
0
fork
atom
this repo has no description
0
fork
atom
overview
issues
pulls
pipelines
build: setup sokol
altagos.dev
5 months ago
32f1a8e6
ee363b39
verified
This commit was signed with the committer's
known signature
.
altagos.dev
SSH Key Fingerprint:
SHA256:UbTjEcCZlc6GzQWLCuDK3D//HESWD2xFPkzue9XMras=
+96
-21
2 changed files
expand all
collapse all
unified
split
build.zig
build.zig.zon
+90
-20
build.zig
···
1
1
const std = @import("std");
2
2
+
const Build = std.Build;
3
3
+
const sokol = @import("sokol");
2
4
3
3
-
pub fn build(b: *std.Build) void {
5
5
+
const Options = struct {
6
6
+
mod: *Build.Module,
7
7
+
dep_sokol: *Build.Dependency,
8
8
+
};
9
9
+
10
10
+
pub fn build(b: *std.Build) !void {
4
11
const target = b.standardTargetOptions(.{});
5
12
const optimize = b.standardOptimizeOption(.{});
13
13
+
14
14
+
const dep_sokol = b.dependency("sokol", .{
15
15
+
.target = target,
16
16
+
.optimize = optimize,
17
17
+
});
6
18
7
19
const mod = b.addModule("ft", .{
8
20
.root_source_file = b.path("src/root.zig"),
9
21
.target = target,
10
22
});
11
23
24
24
+
const mod_exe = b.createModule(.{
25
25
+
.root_source_file = b.path("src/main.zig"),
26
26
+
.target = target,
27
27
+
.optimize = optimize,
28
28
+
.imports = &.{
29
29
+
.{ .name = "ft", .module = mod },
30
30
+
.{ .name = "sokol", .module = dep_sokol.module("sokol") },
31
31
+
// .{ .name = "shader", .module = try createShaderModule(b, dep_sokol) },
32
32
+
},
33
33
+
});
34
34
+
35
35
+
const opts = Options{ .mod = mod_exe, .dep_sokol = dep_sokol };
36
36
+
if (target.result.cpu.arch.isWasm()) {
37
37
+
try buildWeb(b, opts);
38
38
+
} else {
39
39
+
try buildNative(b, opts);
40
40
+
41
41
+
const mod_tests = b.addTest(.{
42
42
+
.name = "mod tests",
43
43
+
.root_module = mod,
44
44
+
});
45
45
+
const run_mod_tests = b.addRunArtifact(mod_tests);
46
46
+
47
47
+
const exe_tests = b.addTest(.{
48
48
+
.name = "exe tests",
49
49
+
.root_module = mod_exe,
50
50
+
});
51
51
+
const run_exe_tests = b.addRunArtifact(exe_tests);
52
52
+
53
53
+
const test_step = b.step("test", "Run tests");
54
54
+
test_step.dependOn(&run_mod_tests.step);
55
55
+
test_step.dependOn(&run_exe_tests.step);
56
56
+
}
57
57
+
}
58
58
+
59
59
+
fn buildNative(b: *Build, opts: Options) !void {
12
60
const exe = b.addExecutable(.{
13
61
.name = "factorio_toolbox",
14
14
-
.root_module = b.createModule(.{
15
15
-
.root_source_file = b.path("src/main.zig"),
16
16
-
.target = target,
17
17
-
.optimize = optimize,
18
18
-
.imports = &.{
19
19
-
.{ .name = "ft", .module = mod },
20
20
-
},
21
21
-
}),
62
62
+
.root_module = opts.mod,
22
63
});
64
64
+
23
65
b.installArtifact(exe);
24
66
25
67
const run_step = b.step("run", "Run the app");
···
31
73
if (b.args) |args| {
32
74
run_cmd.addArgs(args);
33
75
}
76
76
+
}
34
77
35
35
-
const mod_tests = b.addTest(.{
36
36
-
.name = "mod tests",
37
37
-
.root_module = mod,
78
78
+
fn buildWeb(b: *Build, opts: Options) !void {
79
79
+
const lib = b.addLibrary(.{
80
80
+
.name = "factorio_toolbox",
81
81
+
.root_module = opts.mod,
38
82
});
39
39
-
const run_mod_tests = b.addRunArtifact(mod_tests);
40
83
41
41
-
const exe_tests = b.addTest(.{
42
42
-
.name = "exe tests",
43
43
-
.root_module = exe.root_module,
84
84
+
const emsdk = opts.dep_sokol.builder.dependency("emsdk", .{});
85
85
+
const link_step = try sokol.emLinkStep(b, .{
86
86
+
.lib_main = lib,
87
87
+
.target = opts.mod.resolved_target.?,
88
88
+
.optimize = opts.mod.optimize.?,
89
89
+
.emsdk = emsdk,
90
90
+
.use_webgl2 = true,
91
91
+
.use_emmalloc = true,
92
92
+
.use_filesystem = false,
93
93
+
.shell_file_path = opts.dep_sokol.path("src/sokol/web/shell.html"),
94
94
+
});
95
95
+
b.getInstallStep().dependOn(&link_step.step);
96
96
+
97
97
+
const run = sokol.emRunStep(b, .{
98
98
+
.name = "factorio_toolbox",
99
99
+
.emsdk = emsdk,
44
100
});
45
45
-
const run_exe_tests = b.addRunArtifact(exe_tests);
101
101
+
run.step.dependOn(&link_step.step);
102
102
+
b.step("run", "Run the web app").dependOn(&run.step);
103
103
+
}
46
104
47
47
-
const test_step = b.step("test", "Run tests");
48
48
-
test_step.dependOn(&run_mod_tests.step);
49
49
-
test_step.dependOn(&run_exe_tests.step);
105
105
+
fn createShaderModule(b: *Build, dep_sokol: *Build.Dependency) !*Build.Module {
106
106
+
const mod_sokol = dep_sokol.module("sokol");
107
107
+
const dep_shdc = dep_sokol.builder.dependency("shdc", .{});
108
108
+
return sokol.shdc.createModule(b, "shader", mod_sokol, .{
109
109
+
.shdc_dep = dep_shdc,
110
110
+
.input = "src/shader/shader.glsl",
111
111
+
.output = "shader.zig",
112
112
+
.slang = .{
113
113
+
.glsl410 = true,
114
114
+
.glsl300es = true,
115
115
+
.hlsl4 = true,
116
116
+
.metal_macos = true,
117
117
+
.wgsl = true,
118
118
+
},
119
119
+
});
50
120
}
+6
-1
build.zig.zon
···
3
3
.version = "0.0.0",
4
4
.fingerprint = 0x5506658b7a972311, // Changing this has security and trust implications.
5
5
.minimum_zig_version = "0.16.0-dev.747+493ad58ff",
6
6
-
.dependencies = .{},
6
6
+
.dependencies = .{
7
7
+
.sokol = .{
8
8
+
.url = "git+https://github.com/floooh/sokol-zig.git#76d4afd25adfae9666d76a0d324cdb70ad178a88",
9
9
+
.hash = "sokol-0.1.0-pb1HK3TYLgCx8lOxdLVWIVDcAzacxO8YDfyw2Er-_2nN",
10
10
+
},
11
11
+
},
7
12
.paths = .{
8
13
"build.zig",
9
14
"build.zig.zon",