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
10 changes: 4 additions & 6 deletions build.zig
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
const std = @import("std");
const builtin = @import("builtin");
const androidbuild = @import("src/androidbuild/androidbuild.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");
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");

// Deprecated exposed fields

Expand Down
1 change: 0 additions & 1 deletion build.zig.zon
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,5 @@
"build.zig.zon",
"src",
},
.minimum_zig_version = "0.14.0",
.fingerprint = 0x92bcb62d42fb2cee,
}
28 changes: 13 additions & 15 deletions src/androidbuild/Apk.zig
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
33 changes: 29 additions & 4 deletions src/androidbuild/androidbuild.zig
Original file line number Diff line number Diff line change
@@ -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");

Expand Down Expand Up @@ -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 {
const all_targets = b.option(bool, "android", "if true, build for all Android targets (x86, x86_64, aarch64, etc)") orelse false;
if (all_targets) {
// 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", "Build for all Android targets (x86, x86_64, aarch64, arm, etc)") orelse false;
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{};
}
Expand Down
Loading