-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Open
Labels
enhancementSolving this issue will likely involve adding new logic or components to the codebase.Solving this issue will likely involve adding new logic or components to the codebase.proposalThis issue suggests modifications. If it also has the "accepted" label then it is planned.This issue suggests modifications. If it also has the "accepted" label then it is planned.zig build systemstd.Build, the build runner, `zig build` subcommand, package managementstd.Build, the build runner, `zig build` subcommand, package management
Milestone
Description
Right now, the --libc [file]
command line argument isn't really well exposed in std.Build.Step.Compile
:
zig/lib/std/Build/Step/Compile.zig
Line 87 in 4558996
libc_file: ?LazyPath = null, |
This implementation doesn't really give us the options to pass down ad-hoc compiled libcs like Foundation libc or newlib inside build.zig.
The fields available in a libc.txt
file are these:
# The directory that contains `stdlib.h`.
# On POSIX-like systems, include directories be found with: `cc -E -Wp,-v -xc /dev/null`
include_dir=/nix/store/i58yz1rxjxpha40l17hgg7cz62jck9q3-glibc-2.38-77-dev/include
# 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=/nix/store/i58yz1rxjxpha40l17hgg7cz62jck9q3-glibc-2.38-77-dev/include
# The directory that contains `crt1.o` or `crt2.o`.
# On POSIX, can be found with `cc -print-file-name=crt1.o`.
# Not needed when targeting MacOS.
crt_dir=/nix/store/j0by58xwyc66f884x0q8rpzvgpwvjmf2-glibc-2.38-77/lib
# 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=
# The directory that contains `crtbeginS.o` and `crtendS.o`
# Only needed when targeting Haiku.
gcc_dir=
These options could be exposed inside a struct std.Build.LibC
:
pub const LibC = struct {
/// The directory that contains `stdlib.h`.
/// On POSIX-like systems, include directories be found with: `cc -E -Wp,-v -xc /dev/null`
include_dirs: []const LazyPath,
/// A list of additional object files or static libraries that might be linked with the final executable.
/// These objects are required when using custom libc files.
link_objects: []const LazyPath = &.{},
/// 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_dirs: []const LazyPath = &.{},
/// The directory that contains `crt1.o` or `crt2.o`.
/// On POSIX, can be found with `cc -print-file-name=crt1.o`.
/// Not needed when targeting MacOS.
crt_dir: ?LazyPath = null,
/// The directory that contains `vcruntime.lib`.
/// Only needed when targeting MSVC on Windows.
msvc_lib_dir: ?LazyPath = null,
/// The directory that contains `kernel32.lib`.
/// Only needed when targeting MSVC on Windows.
kernel32_lib_dir: ?LazyPath = null,
/// The directory that contains `crtbeginS.o` and `crtendS.o`
/// Only needed when targeting Haiku.
gcc_dir: ?LazyPath = null,
};
which could be used like this then:
- libc_file: ?LazyPath = null,
+ libc: ?std.Build.LibC = null,
Pre-defined libc:
pub fn build(b: *std.Build) void {
// Emulate "--libc custom.txt":
const libc = b.parseLibCFile(p.path("custom.txt"));
const exe = b.addExecutable(.{
.libc = libc,
…
});
}
Custom libc:
pub fn build(b: *std.Build) void {
const foundation_libc = foundation_mod.artifact("foundation");
const libc = std.Build.LibC {
.include_dirs = &.{
foundation_libc.getEmittedIncludeTree(),
},
.link_objects = &.{
foundation_libc.getEmittedBin(),
},
};
const exe = b.addExecutable(.{
.libc = libc,
…
});
}
pfgithub, InKryption, kassane, haydenridd, travisstaloch and 8 more
Metadata
Metadata
Assignees
Labels
enhancementSolving this issue will likely involve adding new logic or components to the codebase.Solving this issue will likely involve adding new logic or components to the codebase.proposalThis issue suggests modifications. If it also has the "accepted" label then it is planned.This issue suggests modifications. If it also has the "accepted" label then it is planned.zig build systemstd.Build, the build runner, `zig build` subcommand, package managementstd.Build, the build runner, `zig build` subcommand, package management