Skip to content

Commit be6a81d

Browse files
committed
Merge pull request #13699 from mikdusan/bsd
give BSDs some attention
1 parent 5572a83 commit be6a81d

File tree

15 files changed

+159
-61
lines changed

15 files changed

+159
-61
lines changed

build.zig

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -593,24 +593,38 @@ fn addCmakeCfgOptionsToExe(
593593

594594
// System -lc++ must be used because in this code path we are attempting to link
595595
// against system-provided LLVM, Clang, LLD.
596-
if (exe.target.getOsTag() == .linux) {
597-
// First we try to link against gcc libstdc++. If that doesn't work, we fall
598-
// back to -lc++ and cross our fingers.
599-
addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), "", need_cpp_includes) catch |err| switch (err) {
600-
error.RequiredLibraryNotFound => {
601-
exe.linkSystemLibrary("c++");
602-
},
603-
else => |e| return e,
604-
};
605-
exe.linkSystemLibrary("unwind");
606-
} else if (exe.target.isFreeBSD()) {
607-
try addCxxKnownPath(b, cfg, exe, b.fmt("libc++.{s}", .{lib_suffix}), null, need_cpp_includes);
608-
exe.linkSystemLibrary("pthread");
609-
} else if (exe.target.getOsTag() == .openbsd) {
610-
try addCxxKnownPath(b, cfg, exe, b.fmt("libc++.{s}", .{lib_suffix}), null, need_cpp_includes);
611-
try addCxxKnownPath(b, cfg, exe, b.fmt("libc++abi.{s}", .{lib_suffix}), null, need_cpp_includes);
612-
} else if (exe.target.isDarwin()) {
613-
exe.linkSystemLibrary("c++");
596+
switch (exe.target.getOsTag()) {
597+
.linux => {
598+
// First we try to link against gcc libstdc++. If that doesn't work, we fall
599+
// back to -lc++ and cross our fingers.
600+
addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), "", need_cpp_includes) catch |err| switch (err) {
601+
error.RequiredLibraryNotFound => {
602+
exe.linkSystemLibrary("c++");
603+
},
604+
else => |e| return e,
605+
};
606+
exe.linkSystemLibrary("unwind");
607+
},
608+
.ios, .macos, .watchos, .tvos => {
609+
exe.linkSystemLibrary("c++");
610+
},
611+
.freebsd => {
612+
try addCxxKnownPath(b, cfg, exe, b.fmt("libc++.{s}", .{lib_suffix}), null, need_cpp_includes);
613+
try addCxxKnownPath(b, cfg, exe, b.fmt("libgcc_eh.{s}", .{lib_suffix}), null, need_cpp_includes);
614+
},
615+
.openbsd => {
616+
try addCxxKnownPath(b, cfg, exe, b.fmt("libc++.{s}", .{lib_suffix}), null, need_cpp_includes);
617+
try addCxxKnownPath(b, cfg, exe, b.fmt("libc++abi.{s}", .{lib_suffix}), null, need_cpp_includes);
618+
},
619+
.netbsd => {
620+
try addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), null, need_cpp_includes);
621+
try addCxxKnownPath(b, cfg, exe, b.fmt("libgcc_eh.{s}", .{lib_suffix}), null, need_cpp_includes);
622+
},
623+
.dragonfly => {
624+
try addCxxKnownPath(b, cfg, exe, b.fmt("libstdc++.{s}", .{lib_suffix}), null, need_cpp_includes);
625+
try addCxxKnownPath(b, cfg, exe, b.fmt("libgcc_eh.{s}", .{lib_suffix}), null, need_cpp_includes);
626+
},
627+
else => {},
614628
}
615629
}
616630

lib/libcxx/include/__config

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148
# endif
149149
// Feature macros for disabling pre ABI v1 features. All of these options
150150
// are deprecated.
151-
# if defined(__FreeBSD__)
151+
# if defined(__FreeBSD__) || defined(__DragonFly__)
152152
# define _LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR
153153
# endif
154154
# endif
@@ -726,11 +726,11 @@ _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_END_NAMESPACE_STD
726726
# endif // _LIBCPP_CXX03_LANG
727727

728728
# if defined(__APPLE__) || defined(__FreeBSD__) || defined(_LIBCPP_MSVCRT_LIKE) || defined(__sun__) || \
729-
defined(__NetBSD__)
729+
defined(__NetBSD__) || defined(__DragonFly__)
730730
# define _LIBCPP_LOCALE__L_EXTENSIONS 1
731731
# endif
732732

733-
# ifdef __FreeBSD__
733+
# if defined(__FreeBSD__) || defined(__DragonFly__)
734734
# define _DECLARE_C99_LDBL_MATH 1
735735
# endif
736736

@@ -750,11 +750,11 @@ _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_END_NAMESPACE_STD
750750
# define _LIBCPP_HAS_NO_ALIGNED_ALLOCATION
751751
# endif
752752

753-
# if defined(__APPLE__) || defined(__FreeBSD__)
753+
# if defined(__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__)
754754
# define _LIBCPP_HAS_DEFAULTRUNELOCALE
755755
# endif
756756

757-
# if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__)
757+
# if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__) || defined(__DragonFly__)
758758
# define _LIBCPP_WCTYPE_IS_MASK
759759
# endif
760760

@@ -901,6 +901,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_END_NAMESPACE_STD
901901

902902
# if defined(__FreeBSD__) || \
903903
defined(__wasi__) || \
904+
defined(__DragonFly__) || \
904905
defined(__NetBSD__) || \
905906
defined(__OpenBSD__) || \
906907
defined(__NuttX__) || \

lib/libcxx/include/__locale

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
# include <__support/newlib/xlocale.h>
3434
#elif defined(__OpenBSD__)
3535
# include <__support/openbsd/xlocale.h>
36-
#elif (defined(__APPLE__) || defined(__FreeBSD__))
36+
#elif (defined(__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__))
3737
# include <xlocale.h>
3838
#elif defined(__Fuchsia__)
3939
# include <__support/fuchsia/xlocale.h>
@@ -453,10 +453,10 @@ public:
453453
static const mask __regex_word = 0x4000; // 0x8000 and 0x0100 and 0x00ff are used
454454
# define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_PRINT
455455
# define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_ALPHA
456-
#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__EMSCRIPTEN__) || defined(__NetBSD__)
456+
#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__EMSCRIPTEN__) || defined(__NetBSD__) || defined(__DragonFly__)
457457
# ifdef __APPLE__
458458
typedef __uint32_t mask;
459-
# elif defined(__FreeBSD__)
459+
# elif defined(__FreeBSD__) || defined(__DragonFly__)
460460
typedef unsigned long mask;
461461
# elif defined(__EMSCRIPTEN__) || defined(__NetBSD__)
462462
typedef unsigned short mask;

lib/libcxx/include/locale

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ _LIBCPP_PUSH_MACROS
239239

240240
_LIBCPP_BEGIN_NAMESPACE_STD
241241

242-
#if defined(__APPLE__) || defined(__FreeBSD__)
242+
#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__)
243243
# define _LIBCPP_GET_C_LOCALE 0
244244
#elif defined(__NetBSD__)
245245
# define _LIBCPP_GET_C_LOCALE LC_C_LOCALE

lib/libcxx/src/locale.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1190,7 +1190,7 @@ ctype<char>::classic_table() noexcept
11901190
const ctype<char>::mask*
11911191
ctype<char>::classic_table() noexcept
11921192
{
1193-
#if defined(__APPLE__) || defined(__FreeBSD__)
1193+
#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__)
11941194
return _DefaultRuneLocale.__runetype;
11951195
#elif defined(__NetBSD__)
11961196
return _C_ctype_tab_ + 1;

lib/std/c/dragonfly.zig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub extern "c" fn getdents(fd: c_int, buf_ptr: [*]u8, nbytes: usize) usize;
1212
pub extern "c" fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) c_int;
1313
pub extern "c" fn getrandom(buf_ptr: [*]u8, buf_len: usize, flags: c_uint) isize;
1414
pub extern "c" fn pipe2(fds: *[2]fd_t, flags: u32) c_int;
15+
pub extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void;
1516

1617
pub const dl_iterate_phdr_callback = std.meta.FnPtr(fn (info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int);
1718
pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*anyopaque) c_int;
@@ -419,6 +420,7 @@ pub const F = struct {
419420
pub const DUP2FD = 10;
420421
pub const DUPFD_CLOEXEC = 17;
421422
pub const DUP2FD_CLOEXEC = 18;
423+
pub const GETPATH = 19;
422424
};
423425

424426
pub const FD_CLOEXEC = 1;

lib/std/c/freebsd.zig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,15 @@ pub extern "c" fn pthread_getthreadid_np() c_int;
1515
pub extern "c" fn pthread_set_name_np(thread: std.c.pthread_t, name: [*:0]const u8) void;
1616
pub extern "c" fn pthread_get_name_np(thread: std.c.pthread_t, name: [*:0]u8, len: usize) void;
1717
pub extern "c" fn pipe2(fds: *[2]fd_t, flags: u32) c_int;
18+
pub extern "c" fn arc4random_buf(buf: [*]u8, len: usize) void;
1819

1920
pub extern "c" fn posix_memalign(memptr: *?*anyopaque, alignment: usize, size: usize) c_int;
2021
pub extern "c" fn malloc_usable_size(?*const anyopaque) usize;
2122

2223
pub extern "c" fn getpid() pid_t;
2324

25+
pub extern "c" fn kinfo_getfile(pid: pid_t, cntp: *c_int) ?[*]kinfo_file;
26+
2427
pub const sf_hdtr = extern struct {
2528
headers: [*]const iovec_const,
2629
hdr_cnt: c_int,

lib/std/c/netbsd.zig

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,7 @@ pub const KERN = struct {
537537
};
538538

539539
pub const PATH_MAX = 1024;
540+
pub const NAME_MAX = 255;
540541
pub const IOV_MAX = KERN.IOV_MAX;
541542

542543
pub const STDIN_FILENO = 0;
@@ -689,13 +690,17 @@ pub const F = struct {
689690
pub const SETFD = 2;
690691
pub const GETFL = 3;
691692
pub const SETFL = 4;
692-
693693
pub const GETOWN = 5;
694694
pub const SETOWN = 6;
695-
696695
pub const GETLK = 7;
697696
pub const SETLK = 8;
698697
pub const SETLKW = 9;
698+
pub const CLOSEM = 10;
699+
pub const MAXFD = 11;
700+
pub const DUPFD_CLOEXEC = 12;
701+
pub const GETNOSIGPIPE = 13;
702+
pub const SETNOSIGPIPE = 14;
703+
pub const GETPATH = 15;
699704

700705
pub const RDLCK = 1;
701706
pub const WRLCK = 3;

lib/std/c/openbsd.zig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,7 @@ pub const AI = struct {
417417
};
418418

419419
pub const PATH_MAX = 1024;
420+
pub const NAME_MAX = 255;
420421
pub const IOV_MAX = 1024;
421422

422423
pub const STDIN_FILENO = 0;

lib/std/fs.zig

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub const Watch = @import("fs/watch.zig").Watch;
3434
/// fit into a UTF-8 encoded array of this length.
3535
/// The byte count includes room for a null sentinel byte.
3636
pub const MAX_PATH_BYTES = switch (builtin.os.tag) {
37-
.linux, .macos, .ios, .freebsd, .netbsd, .dragonfly, .openbsd, .haiku, .solaris => os.PATH_MAX,
37+
.linux, .macos, .ios, .freebsd, .openbsd, .netbsd, .dragonfly, .haiku, .solaris => os.PATH_MAX,
3838
// Each UTF-16LE character may be expanded to 3 UTF-8 bytes.
3939
// If it would require 4 UTF-8 bytes, then there would be a surrogate
4040
// pair in the UTF-16LE, and we (over)account 3 bytes for it that way.
@@ -54,10 +54,10 @@ pub const MAX_PATH_BYTES = switch (builtin.os.tag) {
5454
/// (depending on the platform) this assumption may not hold for every configuration.
5555
/// The byte count does not include a null sentinel byte.
5656
pub const MAX_NAME_BYTES = switch (builtin.os.tag) {
57-
.linux, .macos, .ios, .freebsd, .dragonfly => os.NAME_MAX,
57+
.linux, .macos, .ios, .freebsd, .openbsd, .netbsd, .dragonfly => os.NAME_MAX,
5858
// Haiku's NAME_MAX includes the null terminator, so subtract one.
5959
.haiku => os.NAME_MAX - 1,
60-
.netbsd, .openbsd, .solaris => os.MAXNAMLEN,
60+
.solaris => os.system.MAXNAMLEN,
6161
// Each UTF-16LE character may be expanded to 3 UTF-8 bytes.
6262
// If it would require 4 UTF-8 bytes, then there would be a surrogate
6363
// pair in the UTF-16LE, and we (over)account 3 bytes for it that way.

0 commit comments

Comments
 (0)