ZigAndroidTemplate
ZigAndroidTemplate copied to clipboard
Enhance Quick-Start Documentation and NDK compatiblity ?
Hi, at first thanks for this usefull template.
Perhaps this hels someone using this as base.
Documentation Quick-Start:
Installting android sdk,ndk,platforms using dpkg/apt sample:
apt install google-android-ndk-r25-installer install google-android-platform-30-installer google-android-build-tools-33.0.0-installer
for jarsigner:
apt install openjdk-19-jdk-headless
Using Build Tools > 22
The sysroot moved to <NDK>/toolchains/llvm/prebuilt/
So this dirty hack to Sdk.zig are working (not perfect but perhaps a Hint for anyone with more experience):
diff --git a/Sdk.zig b/Sdk.zig
index 58e3b50..a6eb83a 100644
--- a/Sdk.zig
+++ b/Sdk.zig
@@ -81,9 +81,9 @@ pub fn init(b: *Builder, user_config: ?UserConfig, versions: ToolchainVersions)
}
pub const ToolchainVersions = struct {
- android_sdk_version: u16 = 28,
- build_tools_version: []const u8 = "28.0.3",
- ndk_version: []const u8 = "21.1.6352462",
+ android_sdk_version: u16 = 30,
+ build_tools_version: []const u8 = "33.0.0",
+ ndk_version: []const u8 = "25.0.8775105",
pub fn androidSdkString(self: ToolchainVersions, buf: *[5]u8) []u8 {
return std.fmt.bufPrint(buf, "{d}", .{self.android_sdk_version}) catch unreachable;
@@ -561,7 +561,7 @@ pub fn compileAppLibrary(
exe.defineCMacro("ANDROID", null);
- const include_dir = std.fs.path.resolve(sdk.b.allocator, &[_][]const u8{ ndk_root, "sysroot/usr/include" }) catch unreachable;
+ const include_dir = std.fs.path.resolve(sdk.b.allocator, &[_][]const u8{ ndk_root, "toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include" }) catch unreachable;
exe.addIncludeDir(include_dir);
exe.linkLibC();
@@ -572,66 +572,49 @@ pub fn compileAppLibrary(
exe.setBuildMode(mode);
const TargetConfig = struct {
- lib_dir: []const u8,
include_dir: []const u8,
- libgcc_dir: []const u8,
out_dir: []const u8,
target: std.zig.CrossTarget,
};
const config: TargetConfig = switch (target) {
.aarch64 => TargetConfig{
- .lib_dir = "arch-arm64/usr/lib",
- .libgcc_dir = "aarch64-linux-android-4.9",
.include_dir = "aarch64-linux-android",
.out_dir = "arm64-v8a",
.target = zig_targets.aarch64,
},
.arm => TargetConfig{
- .lib_dir = "arch-arm/usr/lib",
- .libgcc_dir = "arm-linux-androideabi-4.9",
.include_dir = "arm-linux-androideabi",
.out_dir = "armeabi",
.target = zig_targets.arm,
},
.x86 => TargetConfig{
- .lib_dir = "arch-x86/usr/lib",
- .libgcc_dir = "x86-4.9",
.include_dir = "i686-linux-android",
.out_dir = "x86",
.target = zig_targets.x86,
},
.x86_64 => TargetConfig{
- .lib_dir = "arch-x86_64/usr/lib64",
- .libgcc_dir = "x86_64-4.9",
.include_dir = "x86_64-linux-android",
.out_dir = "x86_64",
.target = zig_targets.x86_64,
},
};
- const lib_dir_root = sdk.b.fmt("{s}/platforms/android-{d}", .{
+ const lib_dir = sdk.b.fmt("{s}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/{s}-linux-android/{}/",.{
ndk_root,
+ @tagName(target),
sdk.versions.android_sdk_version,
});
- const lib_dir = std.fs.path.resolve(sdk.b.allocator, &[_][]const u8{ lib_dir_root, config.lib_dir }) catch unreachable;
-
- const prebuilt_dir = switch (builtin.os.tag) {
- .windows => "windows",
- .linux => "linux",
- .macos => "darwin",
- else => unreachable,
- };
-
- const libgcc_path = sdk.b.fmt(
- "{s}/toolchains/{s}/prebuilt/{s}-x86_64/lib/gcc/{s}/4.9.x/libgcc.a",
- .{ ndk_root, config.libgcc_dir, prebuilt_dir, config.include_dir },
- );
+ //const prebuilt_dir = switch (builtin.os.tag) {
+ // .windows => "windows",
+ // .linux => "linux",
+ // .macos => "darwin",
+ // else => unreachable,
+ //};
exe.setTarget(config.target);
exe.addLibPath(lib_dir);
- exe.addObjectFile(libgcc_path);
exe.addIncludeDir(std.fs.path.resolve(sdk.b.allocator, &[_][]const u8{ include_dir, config.include_dir }) catch unreachable);
exe.setLibCFile(sdk.createLibCFile(config.out_dir, include_dir, include_dir, lib_dir) catch unreachable);
diff --git a/build/auto-detect.zig b/build/auto-detect.zig
index 98bafce..2bfd5bc 100644
--- a/build/auto-detect.zig
+++ b/build/auto-detect.zig
@@ -458,6 +458,10 @@ fn findProblemWithAndroidNdk(b: *Builder, versions: Sdk.ToolchainVersions, path:
const ndk_include_path = std.fs.path.join(b.allocator, &[_][]const u8{
path,
+"toolchains",
+"llvm",
+"prebuilt",
+"linux-x86_64", //<host-tag>
"sysroot",
"usr",
"include",