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
6 changes: 3 additions & 3 deletions src/androidbuild/BuildTools.zig
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ pub const empty: BuildTools = .{

const BuildToolError = Allocator.Error || error{BuildToolFailed};

pub fn init(b: *std.Build, android_sdk_path: []const u8, build_tools_version: []const u8, errors: *std.ArrayList([]const u8)) BuildToolError!BuildTools {
pub fn init(b: *std.Build, android_sdk_path: []const u8, build_tools_version: []const u8, errors: *std.ArrayListUnmanaged([]const u8)) BuildToolError!BuildTools {
const prev_errors_len = errors.items.len;

// Get build tools path
Expand All @@ -38,14 +38,14 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, build_tools_version: []
const message = b.fmt("Android Build Tool version '{s}' not found. Install it via 'sdkmanager' or Android Studio.", .{
build_tools_version,
});
errors.append(message) catch @panic("OOM");
errors.append(b.allocator, message) catch @panic("OOM");
},
else => {
const message = b.fmt("Android Build Tool version '{s}' had unexpected error: {s}", .{
build_tools_version,
@errorName(err),
});
errors.append(message) catch @panic("OOM");
errors.append(b.allocator, message) catch @panic("OOM");
},
};
if (errors.items.len != prev_errors_len) {
Expand Down
20 changes: 10 additions & 10 deletions src/androidbuild/Ndk.zig
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ pub const empty: Ndk = .{

const NdkError = Allocator.Error || error{NdkFailed};

pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8, errors: *std.ArrayList([]const u8)) NdkError!Ndk {
pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8, errors: *std.ArrayListUnmanaged([]const u8)) NdkError!Ndk {
// Get NDK path
// ie. $ANDROID_HOME/ndk/27.0.12077973
const android_ndk_path = b.fmt("{s}/ndk/{s}", .{ android_sdk_path, ndk_version });
Expand All @@ -39,7 +39,7 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8
const message = b.fmt("Android NDK version '{s}' not found. Install it via 'sdkmanager' or Android Studio.", .{
ndk_version,
});
try errors.append(message);
try errors.append(b.allocator, message);
break :blk false;
},
else => {
Expand All @@ -48,7 +48,7 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8
@errorName(err),
android_ndk_path,
});
try errors.append(message);
try errors.append(b.allocator, message);
break :blk false;
},
};
Expand Down Expand Up @@ -82,7 +82,7 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8
ndk_version,
ndk_sysroot,
});
try errors.append(message);
try errors.append(b.allocator, message);
break :blk false;
},
else => {
Expand All @@ -91,7 +91,7 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8
@errorName(err),
ndk_sysroot,
});
try errors.append(message);
try errors.append(b.allocator, message);
break :blk false;
},
};
Expand All @@ -111,7 +111,7 @@ pub fn init(b: *std.Build, android_sdk_path: []const u8, ndk_version: []const u8
return ndk;
}

pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, errors: *std.ArrayList([]const u8)) void {
pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, errors: *std.ArrayListUnmanaged([]const u8)) void {
if (ndk.android_sdk_path.len == 0 or ndk.sysroot_path.len == 0) {
@panic("Should not call validateApiLevel if NDK path is not set");
}
Expand All @@ -128,7 +128,7 @@ pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, err
@intFromEnum(api_level),
ndk_sysroot_target_api_version,
});
errors.append(message) catch @panic("OOM");
errors.append(b.allocator, message) catch @panic("OOM");
break :blk false;
},
else => {
Expand All @@ -138,7 +138,7 @@ pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, err
@errorName(err),
ndk_sysroot_target_api_version,
});
errors.append(message) catch @panic("OOM");
errors.append(b.allocator, message) catch @panic("OOM");
break :blk false;
},
};
Expand All @@ -160,7 +160,7 @@ pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, err
@intFromEnum(api_level),
root_jar,
});
errors.append(message) catch @panic("OOM");
errors.append(b.allocator, message) catch @panic("OOM");
break :blk false;
},
else => {
Expand All @@ -169,7 +169,7 @@ pub fn validateApiLevel(ndk: *const Ndk, b: *std.Build, api_level: ApiLevel, err
@errorName(err),
root_jar,
});
errors.append(message) catch @panic("OOM");
errors.append(b.allocator, message) catch @panic("OOM");
break :blk false;
},
};
Expand Down
24 changes: 13 additions & 11 deletions src/androidbuild/apk.zig
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ pub const Options = struct {
pub fn create(sdk: *Sdk, options: Options) *Apk {
const b = sdk.b;

var errors = std.ArrayList([]const u8).init(b.allocator);
defer errors.deinit();
var errors = std.ArrayListUnmanaged([]const u8).empty;
defer errors.deinit(b.allocator);

const build_tools = BuildTools.init(b, sdk.android_sdk_path, options.build_tools_version, &errors) catch |err| switch (err) {
error.BuildToolFailed => BuildTools.empty, // fallthruogh and print all errors below
Expand Down Expand Up @@ -213,35 +213,37 @@ fn doInstallApk(apk: *Apk) std.mem.Allocator.Error!*Step.InstallFile {

// validate
{
var errors = std.ArrayList([]const u8).init(b.allocator);
var errors = std.ArrayListUnmanaged([]const u8).empty;
defer errors.deinit(b.allocator);

if (key_store.password.len == 0) {
try errors.append("Keystore not configured with password, must be setup with setKeyStore");
try errors.append(b.allocator, "Keystore not configured with password, must be setup with setKeyStore");
}
if (apk.android_manifest == null) {
try errors.append("AndroidManifest.xml not configured, must be set with setAndroidManifest");
try errors.append(b.allocator, "AndroidManifest.xml not configured, must be set with setAndroidManifest");
}
if (apk.artifacts.items.len == 0) {
try errors.append("Must add at least one artifact targeting a valid Android CPU architecture: aarch64, x86_64, x86, etc");
try errors.append(b.allocator, "Must add at least one artifact targeting a valid Android CPU architecture: aarch64, x86_64, x86, etc");
} else {
for (apk.artifacts.items, 0..) |artifact, i| {
if (artifact.kind == .exe) {
try errors.append(b.fmt("artifact[{}]: must make Android artifacts be created with addSharedLibrary, not addExecutable", .{i}));
try errors.append(b.allocator, b.fmt("artifact[{}]: must make Android artifacts be created with addSharedLibrary, not addExecutable", .{i}));
} else {
if (artifact.linkage) |linkage| {
if (linkage != .dynamic) {
try errors.append(b.fmt("artifact[{}]: invalid linkage, expected it to be created via addSharedLibrary", .{i}));
try errors.append(b.allocator, b.fmt("artifact[{}]: invalid linkage, expected it to be created via addSharedLibrary", .{i}));
}
} else {
try errors.append(b.fmt("artifact[{}]: unable to get linkage from artifact, expected it to be created via addSharedLibrary", .{i}));
try errors.append(b.allocator, b.fmt("artifact[{}]: unable to get linkage from artifact, expected it to be created via addSharedLibrary", .{i}));
}
}
if (artifact.root_module.resolved_target) |target| {
if (!target.result.abi.isAndroid()) {
try errors.append(b.fmt("artifact[{}]: must be targetting Android abi", .{i}));
try errors.append(b.allocator, b.fmt("artifact[{}]: must be targetting Android abi", .{i}));
continue;
}
} else {
try errors.append(b.fmt("artifact[{}]: unable to get resolved target from artifact", .{i}));
try errors.append(b.allocator, b.fmt("artifact[{}]: unable to get resolved target from artifact", .{i}));
}
}
}
Expand Down
14 changes: 7 additions & 7 deletions src/androidbuild/tools.zig
Original file line number Diff line number Diff line change
Expand Up @@ -84,18 +84,18 @@ pub fn create(b: *std.Build, options: Options) *Sdk {
const jdk_path = path_search.findJDK(b.allocator) catch @panic("OOM");

// Validate
var errors = std.ArrayList([]const u8).init(b.allocator);
defer errors.deinit();
var errors = std.ArrayListUnmanaged([]const u8).empty;
defer errors.deinit(b.allocator);

if (jdk_path.len == 0) {
errors.append(
errors.append(b.allocator,
\\JDK not found.
\\- Download it from https://www.oracle.com/th/java/technologies/downloads/
\\- Then configure your JDK_HOME environment variable to where you've installed it.
) catch @panic("OOM");
}
if (android_sdk_path.len == 0) {
errors.append(
errors.append(b.allocator,
\\Android SDK not found.
\\- Download it from https://developer.android.com/studio
\\- Then configure your ANDROID_HOME environment variable to where you've installed it."
Expand All @@ -120,14 +120,14 @@ pub fn create(b: *std.Build, options: Options) *Sdk {
cmdline_tools,
tools,
});
errors.append(message) catch @panic("OOM");
errors.append(b.allocator, message) catch @panic("OOM");
},
else => {
const message = b.fmt("Android Command Line Tools path had unexpected error: {s} ({s})", .{
@errorName(toolerr),
tools,
});
errors.append(message) catch @panic("OOM");
errors.append(b.allocator, message) catch @panic("OOM");
},
};
},
Expand All @@ -136,7 +136,7 @@ pub fn create(b: *std.Build, options: Options) *Sdk {
@errorName(cmderr),
cmdline_tools,
});
errors.append(message) catch @panic("OOM");
errors.append(b.allocator, message) catch @panic("OOM");
},
};
break :cmdlineblk cmdline_tools;
Expand Down
Loading