mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 14:23:09 +00:00
This lays the groundwork for #2879. This library will be built and linked when a static libc is going to be linked into the compilation. Currently, that means musl, wasi-libc, and MinGW-w64. As a demonstration, this commit removes the musl C code for a few string functions and implements them in libzigc. This means that those libzigc functions are now load-bearing for musl and wasi-libc. Note that if a function has an implementation in compiler-rt already, libzigc should not implement it. Instead, as we recently did for memcpy/memmove, we should delete the libc copy and rely on the compiler-rt implementation. I repurposed the existing "universal libc" code to do this. That code hadn't seen development beyond basic string functions in years, and was only usable-ish on freestanding. I think that if we want to seriously pursue the idea of Zig providing a freestanding libc, we should do so only after defining clear goals (and non-goals) for it. See also #22240 for a similar case.
34 lines
931 B
Zig
34 lines
931 B
Zig
//! This is Zig's multi-target implementation of libc.
|
|
//!
|
|
//! When `builtin.link_libc` is true, we need to export all the functions and
|
|
//! provide a libc API compatible with the target (e.g. musl, wasi-libc, ...).
|
|
|
|
const builtin = @import("builtin");
|
|
const std = @import("std");
|
|
|
|
// Avoid dragging in the runtime safety mechanisms into this .o file, unless
|
|
// we're trying to test zigc.
|
|
pub const panic = if (builtin.is_test)
|
|
std.debug.FullPanic(std.debug.defaultPanic)
|
|
else
|
|
std.debug.no_panic;
|
|
|
|
comptime {
|
|
if (builtin.target.isMuslLibC() or builtin.target.isWasiLibC()) {
|
|
// Files specific to musl and wasi-libc.
|
|
_ = @import("c/string.zig");
|
|
}
|
|
|
|
if (builtin.target.isMuslLibC()) {
|
|
// Files specific to musl.
|
|
}
|
|
|
|
if (builtin.target.isWasiLibC()) {
|
|
// Files specific to wasi-libc.
|
|
}
|
|
|
|
if (builtin.target.isMinGW()) {
|
|
// Files specific to MinGW-w64.
|
|
}
|
|
}
|