Write file is ok:
const std = @import("std");
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const lib = b.addLibrary(.{
.name = "testso",
.linkage = .dynamic,
.root_module = b.createModule(.{
.target = target,
.optimize = optimize,
}),
});
lib.linkLibC();
const system_target = getAndroidTriple(lib.rootModuleTarget()) catch |err| @panic(@errorName(err));
const android_api_version: u32 = 34;
const libc = createLibC(b, system_target, android_api_version, "E:\\SDKs\\AndroidSDK\\ndk\\27.0.12077973\\toolchains\\llvm\\prebuilt\\windows-x86_64\\sysroot", "27.0.12077973");
lib.setLibCFile(libc);
lib.root_module.addCSourceFile(.{ .file = b.path("test.c") });
b.installArtifact(lib);
}
fn getAndroidTriple(target: std.Target) error{InvalidAndroidTarget}![]const u8 {
if (target.abi != .android) return error.InvalidAndroidTarget;
return switch (target.cpu.arch) {
.x86 => "i686-linux-android",
.x86_64 => "x86_64-linux-android",
.arm => "arm-linux-androideabi",
.aarch64 => "aarch64-linux-android",
.riscv64 => "riscv64-linux-android",
else => error.InvalidAndroidTarget,
};
}
fn createLibC(b: *std.Build, system_target: []const u8, android_api_version: u32, ndk_sysroot_path: []const u8, ndk_version: []const u8) std.Build.LazyPath {
const libc_file_format =
\\# Generated by zig-android-sdk. DO NOT EDIT.
\\
\\# The directory that contains `stdlib.h`.
\\# On POSIX-like systems, include directories be found with: `cc -E -Wp,-v -xc /dev/null`
\\include_dir={[include_dir]s}
\\
\\# The system-specific include directory. May be the same as `include_dir`.
\\# On Windows it's the directory that includes `vcruntime.h`.
\\# On POSIX it's the directory that includes `sys/errno.h`.
\\sys_include_dir={[sys_include_dir]s}
\\
\\# The directory that contains `crt1.o`.
\\# On POSIX, can be found with `cc -print-file-name=crt1.o`.
\\# Not needed when targeting MacOS.
\\crt_dir={[crt_dir]s}
\\
\\# The directory that contains `vcruntime.lib`.
\\# Only needed when targeting MSVC on Windows.
\\msvc_lib_dir=
\\
\\# The directory that contains `kernel32.lib`.
\\# Only needed when targeting MSVC on Windows.
\\kernel32_lib_dir=
\\
\\gcc_dir=
;
const include_dir = b.fmt("{s}/usr/include", .{ndk_sysroot_path});
const sys_include_dir = b.fmt("{s}/usr/include/{s}", .{ ndk_sysroot_path, system_target });
const crt_dir = b.fmt("{s}/usr/lib/{s}/{d}", .{ ndk_sysroot_path, system_target, android_api_version });
const libc_file_contents = b.fmt(libc_file_format, .{
.include_dir = include_dir,
.sys_include_dir = sys_include_dir,
.crt_dir = crt_dir,
});
const filename = b.fmt("android-libc_target-{s}_version-{d}_ndk-{s}.conf", .{ system_target, android_api_version, if (ndk_version.len > 0) ndk_version else "unknown" });
const write_file = b.addWriteFiles();
const android_libc_path = write_file.add(filename, libc_file_contents);
return android_libc_path;
}
seems --libc [file] command line argument isn’t work.