Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions priv/templates/mob.new/ios/build.zig.eex
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,19 @@ pub fn build(b: *std.Build) void {
swift_run.addArg("-I");
swift_run.addArg(b.fmt("{s}/ios", .{mob_dir}));
swift_run.addArgs(&.{ "-parse-as-library", "-wmo" });
swift_run.addFileArg(.{ .cwd_relative = b.fmt("{s}/ios/MobViewModel.swift", .{mob_dir}) });
swift_run.addFileArg(.{ .cwd_relative = b.fmt("{s}/ios/MobRootView.swift", .{mob_dir}) });
swift_run.addFileArg(.{ .cwd_relative = b.fmt("{s}/ios/MobGpuView.swift", .{mob_dir}) });
// Glob all mob Swift sources so a newly-added file (e.g. MobGpuView.swift,
// referenced by MobRootView) compiles without editing this template.
{
const glob_io = b.graph.io;
var mob_ios = b.build_root.handle.openDir(glob_io, b.fmt("{s}/ios", .{mob_dir}), .{ .iterate = true }) catch @panic("mob ios dir not found");
defer mob_ios.close(glob_io);
var swift_entries = mob_ios.iterate();
while (swift_entries.next(glob_io) catch @panic("mob ios dir iterate failed")) |entry| {
if (entry.kind == .file and std.mem.endsWith(u8, entry.name, ".swift")) {
swift_run.addFileArg(.{ .cwd_relative = b.fmt("{s}/ios/{s}", .{ mob_dir, entry.name }) });
}
}
}
if (project_swift_sources.len > 0) {
var swift_it = std.mem.splitScalar(u8, project_swift_sources, ',');
while (swift_it.next()) |source| {
Expand Down
16 changes: 13 additions & 3 deletions priv/templates/mob.new/ios/build_device.zig.eex
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,19 @@ pub fn build(b: *std.Build) void {
swift_run.addArg("-I");
swift_run.addArg(b.fmt("{s}/ios", .{mob_dir}));
swift_run.addArgs(&.{ "-parse-as-library", "-wmo" });
swift_run.addFileArg(.{ .cwd_relative = b.fmt("{s}/ios/MobViewModel.swift", .{mob_dir}) });
swift_run.addFileArg(.{ .cwd_relative = b.fmt("{s}/ios/MobRootView.swift", .{mob_dir}) });
swift_run.addFileArg(.{ .cwd_relative = b.fmt("{s}/ios/MobGpuView.swift", .{mob_dir}) });
// Glob all mob Swift sources so a newly-added file (e.g. MobGpuView.swift,
// referenced by MobRootView) compiles without editing this template.
{
const glob_io = b.graph.io;
var mob_ios = b.build_root.handle.openDir(glob_io, b.fmt("{s}/ios", .{mob_dir}), .{ .iterate = true }) catch @panic("mob ios dir not found");
defer mob_ios.close(glob_io);
var swift_entries = mob_ios.iterate();
while (swift_entries.next(glob_io) catch @panic("mob ios dir iterate failed")) |entry| {
if (entry.kind == .file and std.mem.endsWith(u8, entry.name, ".swift")) {
swift_run.addFileArg(.{ .cwd_relative = b.fmt("{s}/ios/{s}", .{ mob_dir, entry.name }) });
}
}
}
if (project_swift_sources.len > 0) {
var swift_it = std.mem.splitScalar(u8, project_swift_sources, ',');
while (swift_it.next()) |source| {
Expand Down
16 changes: 16 additions & 0 deletions test/mob_new/project_generator_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -1031,6 +1031,22 @@ defmodule MobNew.ProjectGeneratorTest do
assert content =~ "std.mem.splitScalar(u8, project_swift_sources, ',')"
assert content =~ "swift_run.addFileArg(.{ .cwd_relative = source });"
end

test "#{@label} build.zig globs mob Swift sources (no hardcoded file list)",
%{tmp: tmp} do
{:ok, dir} = ProjectGenerator.generate("test_app", tmp)
content = File.read!(Path.join(dir, @path))

# mob Swift sources are globbed from $mob_dir/ios at build time so a
# newly-added file (e.g. MobGpuView.swift, referenced by MobRootView)
# compiles without a template edit — listing files by name is how a new
# mob Swift file broke iOS builds.
assert content =~ ~s|b.build_root.handle.openDir(glob_io, b.fmt("{s}/ios", .{mob_dir})|
assert content =~ ~s|std.mem.endsWith(u8, entry.name, ".swift")|

refute content =~ ~s|b.fmt("{s}/ios/MobGpuView.swift", .{mob_dir})|,
"#{@label} build.zig must glob ios/*.swift, not list mob Swift files by name"
end
end

# Regression: the Android jni build.zig must declare `tflite_static` as
Expand Down
Loading