From d59fb43475ff90d01a71d3797ca0bf144e4d0cf4 Mon Sep 17 00:00:00 2001 From: Jae B Date: Sat, 11 Apr 2026 21:44:08 +1000 Subject: [PATCH 1/3] add separate "resolveTargets" function to improve b.lazyImport support --- build.zig | 11 ++++++----- build.zig.zon | 1 - src/androidbuild/Apk.zig | 28 +++++++++++++--------------- src/androidbuild/androidbuild.zig | 31 ++++++++++++++++++++++++++++--- 4 files changed, 47 insertions(+), 24 deletions(-) diff --git a/build.zig b/build.zig index 2e08003..2e353c2 100644 --- a/build.zig +++ b/build.zig @@ -1,15 +1,16 @@ const std = @import("std"); const builtin = @import("builtin"); + const androidbuild = @import("src/androidbuild/androidbuild.zig"); +pub const ApiLevel = androidbuild.ApiLevel; +pub const standardTargets = androidbuild.standardTargets; +pub const resolveTargets = androidbuild.resolveTargets; +pub const Apk = @import("src/androidbuild/Apk.zig"); +pub const Sdk = @import("src/androidbuild/tools.zig"); // Expose Android build functionality for use in your build.zig // TODO: rename tools.zig to Sdk.zig -pub const Sdk = @import("src/androidbuild/tools.zig"); -pub const Apk = @import("src/androidbuild/Apk.zig"); -pub const ApiLevel = androidbuild.ApiLevel; -pub const standardTargets = androidbuild.standardTargets; - // Deprecated exposed fields /// Deprecated: Use ApiLevel diff --git a/build.zig.zon b/build.zig.zon index 484222c..1add7e8 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -7,6 +7,5 @@ "build.zig.zon", "src", }, - .minimum_zig_version = "0.14.0", .fingerprint = 0x92bcb62d42fb2cee, } diff --git a/src/androidbuild/Apk.zig b/src/androidbuild/Apk.zig index 68c5128..673275a 100644 --- a/src/androidbuild/Apk.zig +++ b/src/androidbuild/Apk.zig @@ -1,25 +1,23 @@ const std = @import("std"); +const Allocator = std.mem.Allocator; +const Target = std.Target; +const Step = std.Build.Step; +const ResolvedTarget = std.Build.ResolvedTarget; +const LazyPath = std.Build.LazyPath; const builtin = @import("builtin"); -const androidbuild = @import("androidbuild.zig"); -const Sdk = @import("tools.zig"); -const BuiltinOptionsUpdate = @import("BuiltinOptionsUpdate.zig"); -const DirectoryFileInput = @import("DirectoryFileInput.zig"); -const Ndk = @import("Ndk.zig"); -const BuildTools = @import("BuildTools.zig"); -const D8Glob = @import("D8Glob.zig"); - -const KeyStore = Sdk.KeyStore; +const androidbuild = @import("androidbuild.zig"); const ApiLevel = androidbuild.ApiLevel; const getAndroidTriple = androidbuild.getAndroidTriple; const runNameContext = androidbuild.runNameContext; const printErrorsAndExit = androidbuild.printErrorsAndExit; - -const Allocator = std.mem.Allocator; -const Target = std.Target; -const Step = std.Build.Step; -const ResolvedTarget = std.Build.ResolvedTarget; -const LazyPath = std.Build.LazyPath; +const BuildTools = @import("BuildTools.zig"); +const BuiltinOptionsUpdate = @import("BuiltinOptionsUpdate.zig"); +const D8Glob = @import("D8Glob.zig"); +const DirectoryFileInput = @import("DirectoryFileInput.zig"); +const Ndk = @import("Ndk.zig"); +const Sdk = @import("tools.zig"); +const KeyStore = Sdk.KeyStore; pub const Resource = union(enum) { // file: File, diff --git a/src/androidbuild/androidbuild.zig b/src/androidbuild/androidbuild.zig index fa0d2b0..32db78a 100644 --- a/src/androidbuild/androidbuild.zig +++ b/src/androidbuild/androidbuild.zig @@ -1,9 +1,8 @@ const std = @import("std"); -const builtin = @import("builtin"); - const Target = std.Target; const ResolvedTarget = std.Build.ResolvedTarget; const LazyPath = std.Build.LazyPath; +const builtin = @import("builtin"); const log = std.log.scoped(.@"zig-android-sdk"); @@ -62,10 +61,36 @@ pub fn getAndroidTriple(target: ResolvedTarget) error{InvalidAndroidTarget}![]co /// /// If none of the above, then return a zero length slice. pub fn standardTargets(b: *std.Build, target: ResolvedTarget) []ResolvedTarget { + // NOTE(jae): 2026-04-11 + // Seperated logic into "resolveTargets" so that consumers of this library can create this option themselves and use "b.lazyImport" + // See: https://github.com/silbinarywolf/zig-android-sdk/pull/82 const all_targets = b.option(bool, "android", "if true, build for all Android targets (x86, x86_64, aarch64, etc)") orelse false; - if (all_targets) { + return resolveTargets(b, .{ + .default_target = target, + .all_targets = all_targets, + }); +} + +pub const ResolveTargetOptions = struct { + /// The target retrieved from b.standardTargetOptions + default_target: ResolvedTarget, + /// If true, then retrieve all Android targets rather than using the default target + all_targets: bool, + + /// Shorthand to query all Android targets + pub const all: ResolveTargetOptions = .{ + .default_target = undefined, + .all_targets = true, + }; +}; + +/// Will return a slice of Android targets depending on the options given. +/// Avoids setting up options +pub fn resolveTargets(b: *std.Build, options: ResolveTargetOptions) []ResolvedTarget { + if (options.all_targets) { return getAllAndroidTargets(b); } + const target = options.default_target; if (!target.result.abi.isAndroid()) { return &[0]ResolvedTarget{}; } From ec2d7cfa6edf85139a10bb50263a00f5ebd643db Mon Sep 17 00:00:00 2001 From: Jae B Date: Sat, 11 Apr 2026 21:45:24 +1000 Subject: [PATCH 2/3] tidy up --- build.zig | 3 --- 1 file changed, 3 deletions(-) diff --git a/build.zig b/build.zig index 2e353c2..11c13d5 100644 --- a/build.zig +++ b/build.zig @@ -8,9 +8,6 @@ pub const resolveTargets = androidbuild.resolveTargets; pub const Apk = @import("src/androidbuild/Apk.zig"); pub const Sdk = @import("src/androidbuild/tools.zig"); -// Expose Android build functionality for use in your build.zig - -// TODO: rename tools.zig to Sdk.zig // Deprecated exposed fields /// Deprecated: Use ApiLevel From 30ae9ee5f55807d8156285943ed5f169158a8a8a Mon Sep 17 00:00:00 2001 From: Jae B Date: Sat, 11 Apr 2026 21:54:04 +1000 Subject: [PATCH 3/3] simplify androidbuild copy --- src/androidbuild/androidbuild.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/androidbuild/androidbuild.zig b/src/androidbuild/androidbuild.zig index 32db78a..facb30a 100644 --- a/src/androidbuild/androidbuild.zig +++ b/src/androidbuild/androidbuild.zig @@ -64,7 +64,7 @@ pub fn standardTargets(b: *std.Build, target: ResolvedTarget) []ResolvedTarget { // NOTE(jae): 2026-04-11 // Seperated logic into "resolveTargets" so that consumers of this library can create this option themselves and use "b.lazyImport" // See: https://github.com/silbinarywolf/zig-android-sdk/pull/82 - const all_targets = b.option(bool, "android", "if true, build for all Android targets (x86, x86_64, aarch64, etc)") orelse false; + const all_targets = b.option(bool, "android", "Build for all Android targets (x86, x86_64, aarch64, arm, etc)") orelse false; return resolveTargets(b, .{ .default_target = target, .all_targets = all_targets,