aboutsummaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
authorIsaac Freund <ifreund@ifreund.xyz>2021-06-21 22:45:43 +0200
committerIsaac Freund <ifreund@ifreund.xyz>2021-06-25 19:13:43 +0200
commit260c5aed86d662d2e2bd03c06d123bef9455053d (patch)
tree9bbf9bcbce9447ecacb5e92b969d0565fb4cce53 /src/main.zig
parent411f9c60b1cb30aec8706ffac75992ac8cc59cba (diff)
downloadzig-260c5aed86d662d2e2bd03c06d123bef9455053d.tar.gz
zig-260c5aed86d662d2e2bd03c06d123bef9455053d.zip
stage2: add --sysroot link option
This feature is necessary for cross-compiling code that dynamically links system libraries, at least with the current feature set of lld.
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/main.zig b/src/main.zig
index 1cf62c011b..86995c5b9f 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -379,6 +379,7 @@ const usage_build_generic =
\\ -T[script], --script [script] Use a custom linker script
\\ --version-script [path] Provide a version .map file
\\ --dynamic-linker [path] Set the dynamic interpreter path (usually ld.so)
+ \\ --sysroot [path] Set the system root directory (usually /)
\\ --version [ver] Dynamic library semver
\\ -fsoname[=name] (Linux) Override the default SONAME value
\\ -fno-soname (Linux) Disable emitting a SONAME
@@ -604,6 +605,7 @@ fn buildOutputType(
var link_eh_frame_hdr = false;
var link_emit_relocs = false;
var each_lib_rpath: ?bool = null;
+ var sysroot: ?[]const u8 = null;
var libc_paths_file: ?[]const u8 = try optionalStringEnvVar(arena, "ZIG_LIBC");
var machine_code_model: std.builtin.CodeModel = .default;
var runtime_args_start: ?usize = null;
@@ -865,6 +867,10 @@ fn buildOutputType(
if (i + 1 >= args.len) fatal("expected parameter after {s}", .{arg});
i += 1;
target_dynamic_linker = args[i];
+ } else if (mem.eql(u8, arg, "--sysroot")) {
+ if (i + 1 >= args.len) fatal("expected parameter after {s}", .{arg});
+ i += 1;
+ sysroot = args[i];
} else if (mem.eql(u8, arg, "--libc")) {
if (i + 1 >= args.len) fatal("expected parameter after {s}", .{arg});
i += 1;
@@ -1641,7 +1647,9 @@ fn buildOutputType(
want_native_include_dirs = true;
}
- if (cross_target.isNativeOs() and (system_libs.items.len != 0 or want_native_include_dirs)) {
+ if (sysroot == null and cross_target.isNativeOs() and
+ (system_libs.items.len != 0 or want_native_include_dirs))
+ {
const paths = std.zig.system.NativePaths.detect(arena, target_info) catch |err| {
fatal("unable to detect native system paths: {s}", .{@errorName(err)});
};
@@ -1918,6 +1926,7 @@ fn buildOutputType(
.is_native_os = cross_target.isNativeOs(),
.is_native_abi = cross_target.isNativeAbi(),
.dynamic_linker = target_info.dynamic_linker.get(),
+ .sysroot = sysroot,
.output_mode = output_mode,
.root_pkg = root_pkg,
.emit_bin = emit_bin_loc,