diff --git a/src/androidbuild/androidbuild.zig b/src/androidbuild/androidbuild.zig index 6e6b7e2..30ee893 100644 --- a/src/androidbuild/androidbuild.zig +++ b/src/androidbuild/androidbuild.zig @@ -85,7 +85,7 @@ pub const AndroidTarget = enum { .cpu_arch = .x86, }, }; - return b.resolveTargetQuery(android_target_query.queryTarget()); + return b.resolveTargetQuery(android_target_query.queryTarget(.none)); } /// The "lib/{AndroidTarget}" directory name as it appears in an APK @@ -121,6 +121,8 @@ pub const ResolveTargetOptions = struct { default_target: ResolvedTarget, /// If true, then retrieve all Android targets rather than using the default target all_targets: bool, + /// Target API level, defaults to `.android9` if unset + api_level: ApiLevel = .android9, /// Shorthand to query all Android targets pub const all: ResolveTargetOptions = .{ @@ -133,7 +135,7 @@ pub const ResolveTargetOptions = struct { /// Avoids setting up options pub fn resolveTargets(b: *std.Build, options: ResolveTargetOptions) []ResolvedTarget { if (options.all_targets) { - return getAllAndroidTargets(b); + return getAllAndroidTargets(b, options.api_level); } const target = options.default_target; if (!target.result.abi.isAndroid()) { @@ -146,7 +148,7 @@ pub fn resolveTargets(b: *std.Build, options: ResolveTargetOptions) []ResolvedTa for (supported_android_targets) |android_target| { if (target.result.cpu.arch == android_target.cpu_arch) { const resolved_targets = b.allocator.alloc(ResolvedTarget, 1) catch @panic("OOM"); - resolved_targets[0] = b.resolveTargetQuery(android_target.queryTarget()); + resolved_targets[0] = b.resolveTargetQuery(android_target.queryTarget(options.api_level)); return resolved_targets; } } @@ -177,10 +179,10 @@ pub fn getTargetLibDir(b: *std.Build, target: ResolvedTarget) []const u8 { }; } -fn getAllAndroidTargets(b: *std.Build) []ResolvedTarget { +fn getAllAndroidTargets(b: *std.Build, api_level: ApiLevel) []ResolvedTarget { const resolved_targets = b.allocator.alloc(ResolvedTarget, supported_android_targets.len) catch @panic("OOM"); for (supported_android_targets, 0..) |android_target, i| { - const resolved_target = b.resolveTargetQuery(android_target.queryTarget()); + const resolved_target = b.resolveTargetQuery(android_target.queryTarget(api_level)); resolved_targets[i] = resolved_target; } return resolved_targets; @@ -249,16 +251,14 @@ const AndroidTargetQuery = struct { cpu_arch: Target.Cpu.Arch, cpu_features_add: Target.Cpu.Feature.Set = Target.Cpu.Feature.Set.empty, - fn queryTarget(android_target: AndroidTargetQuery) Target.Query { + fn queryTarget(android_target: AndroidTargetQuery, api_level: ApiLevel) Target.Query { return .{ .os_tag = .linux, .cpu_model = .baseline, .abi = if (android_target.cpu_arch != .arm) .android else .androideabi, .cpu_arch = android_target.cpu_arch, .cpu_features_add = android_target.cpu_features_add, - // NOTE(jae): 2025-05-11 - // Consider setting Android API Level for Zig 0.14.0+ - // .android_api_level = null, + .android_api_level = if (api_level == .none) null else @intFromEnum(api_level), }; } };