Commit 6066e7bfd1

Alex Rønne Petersen <alex@alexrp.com>
2024-12-15 11:57:27
std.zig.target: Remove wasm32-freestanding-musl.
This is, at least today, a very broken target: It doesn't actually build either musl or wasi-libc even if you use -lc. It does give you musl headers, but that's it. Those headers are not terribly useful, however, without any implementation code. You can sort of call some math functions because they just so happen to have implementations in compiler-rt. But that's only true for a small subset, and I don't think users should be relying on the ABI surface of a library that is an implementation detail of the compiler. Clearly, a freestanding-capable libc of sorts is a useful thing as evidenced by newlib, picolibc, etc existing. However, calling it "musl" is misleading when it isn't actually musl-compatible, nor can it ever be because the musl API surface is inextricably tied to the Linux kernel. In the discussion on #20690, there was agreement that once we split up the API and ABI components in the target string, the API component should be about compatibility, not whether you literally get a particular implementation of it. Also, we decided that Linux musl and wasi-libc musl shouldn't use the same API tag precisely because they're not actually compatible. (And besides, how would any syscall even be implemented in freestanding? Who or what would we be calling?) So I think we should remove this triple for now. If we decide to reintroduce something like this, especially once #2879 gets going, we should come up with a bespoke name for it rather than using "musl".
1 parent 7d4e8be
Changed files (3)
lib
libc
include
wasm-freestanding-musl
std
lib/libc/include/wasm-freestanding-musl/bits/alltypes.h
@@ -1,385 +0,0 @@
-#define _Addr long
-#define _Int64 long long
-#define _Reg long
-
-#if defined(__NEED_va_list) && !defined(__DEFINED_va_list)
-typedef __builtin_va_list va_list;
-#define __DEFINED_va_list
-#endif
-
-#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list)
-typedef __builtin_va_list __isoc_va_list;
-#define __DEFINED___isoc_va_list
-#endif
-
-
-#ifndef __cplusplus
-#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t)
-typedef int wchar_t;
-#define __DEFINED_wchar_t
-#endif
-
-#endif
-
-#if defined(__NEED_float_t) && !defined(__DEFINED_float_t)
-typedef float float_t;
-#define __DEFINED_float_t
-#endif
-
-#if defined(__NEED_double_t) && !defined(__DEFINED_double_t)
-typedef double double_t;
-#define __DEFINED_double_t
-#endif
-
-
-#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t)
-typedef struct { long long __ll; long double __ld; } max_align_t;
-#define __DEFINED_max_align_t
-#endif
-
-
-#if defined(__NEED_time_t) && !defined(__DEFINED_time_t)
-typedef long time_t;
-#define __DEFINED_time_t
-#endif
-
-#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t)
-typedef long suseconds_t;
-#define __DEFINED_suseconds_t
-#endif
-
-
-#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t)
-typedef struct { union { int __i[9]; volatile int __vi[9]; unsigned __s[9]; } __u; } pthread_attr_t;
-#define __DEFINED_pthread_attr_t
-#endif
-
-#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t)
-typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t;
-#define __DEFINED_pthread_mutex_t
-#endif
-
-#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t)
-typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } mtx_t;
-#define __DEFINED_mtx_t
-#endif
-
-#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t)
-typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } pthread_cond_t;
-#define __DEFINED_pthread_cond_t
-#endif
-
-#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t)
-typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } cnd_t;
-#define __DEFINED_cnd_t
-#endif
-
-#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t)
-typedef struct { union { int __i[8]; volatile int __vi[8]; void *__p[8]; } __u; } pthread_rwlock_t;
-#define __DEFINED_pthread_rwlock_t
-#endif
-
-#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t)
-typedef struct { union { int __i[5]; volatile int __vi[5]; void *__p[5]; } __u; } pthread_barrier_t;
-#define __DEFINED_pthread_barrier_t
-#endif
-
-#if defined(__NEED_size_t) && !defined(__DEFINED_size_t)
-typedef unsigned _Addr size_t;
-#define __DEFINED_size_t
-#endif
-
-#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t)
-typedef unsigned _Addr uintptr_t;
-#define __DEFINED_uintptr_t
-#endif
-
-#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t)
-typedef _Addr ptrdiff_t;
-#define __DEFINED_ptrdiff_t
-#endif
-
-#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t)
-typedef _Addr ssize_t;
-#define __DEFINED_ssize_t
-#endif
-
-#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t)
-typedef _Addr intptr_t;
-#define __DEFINED_intptr_t
-#endif
-
-#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t)
-typedef _Addr regoff_t;
-#define __DEFINED_regoff_t
-#endif
-
-#if defined(__NEED_register_t) && !defined(__DEFINED_register_t)
-typedef _Reg register_t;
-#define __DEFINED_register_t
-#endif
-
-
-#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t)
-typedef signed char     int8_t;
-#define __DEFINED_int8_t
-#endif
-
-#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t)
-typedef signed short    int16_t;
-#define __DEFINED_int16_t
-#endif
-
-#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t)
-typedef signed int      int32_t;
-#define __DEFINED_int32_t
-#endif
-
-#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t)
-typedef signed _Int64   int64_t;
-#define __DEFINED_int64_t
-#endif
-
-#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t)
-typedef signed _Int64   intmax_t;
-#define __DEFINED_intmax_t
-#endif
-
-#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t)
-typedef unsigned char   uint8_t;
-#define __DEFINED_uint8_t
-#endif
-
-#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t)
-typedef unsigned short  uint16_t;
-#define __DEFINED_uint16_t
-#endif
-
-#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t)
-typedef unsigned int    uint32_t;
-#define __DEFINED_uint32_t
-#endif
-
-#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t)
-typedef unsigned _Int64 uint64_t;
-#define __DEFINED_uint64_t
-#endif
-
-#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t)
-typedef unsigned _Int64 u_int64_t;
-#define __DEFINED_u_int64_t
-#endif
-
-#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t)
-typedef unsigned _Int64 uintmax_t;
-#define __DEFINED_uintmax_t
-#endif
-
-
-#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t)
-typedef unsigned mode_t;
-#define __DEFINED_mode_t
-#endif
-
-#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t)
-typedef unsigned _Reg nlink_t;
-#define __DEFINED_nlink_t
-#endif
-
-#if defined(__NEED_off_t) && !defined(__DEFINED_off_t)
-typedef _Int64 off_t;
-#define __DEFINED_off_t
-#endif
-
-#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t)
-typedef unsigned _Int64 ino_t;
-#define __DEFINED_ino_t
-#endif
-
-#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t)
-typedef unsigned _Int64 dev_t;
-#define __DEFINED_dev_t
-#endif
-
-#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t)
-typedef long blksize_t;
-#define __DEFINED_blksize_t
-#endif
-
-#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t)
-typedef _Int64 blkcnt_t;
-#define __DEFINED_blkcnt_t
-#endif
-
-#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t)
-typedef unsigned _Int64 fsblkcnt_t;
-#define __DEFINED_fsblkcnt_t
-#endif
-
-#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t)
-typedef unsigned _Int64 fsfilcnt_t;
-#define __DEFINED_fsfilcnt_t
-#endif
-
-
-#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t)
-typedef unsigned wint_t;
-#define __DEFINED_wint_t
-#endif
-
-#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t)
-typedef unsigned long wctype_t;
-#define __DEFINED_wctype_t
-#endif
-
-
-#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t)
-typedef void * timer_t;
-#define __DEFINED_timer_t
-#endif
-
-#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t)
-typedef int clockid_t;
-#define __DEFINED_clockid_t
-#endif
-
-#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t)
-typedef long clock_t;
-#define __DEFINED_clock_t
-#endif
-
-#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval)
-struct timeval { time_t tv_sec; suseconds_t tv_usec; };
-#define __DEFINED_struct_timeval
-#endif
-
-#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec)
-struct timespec { time_t tv_sec; long tv_nsec; };
-#define __DEFINED_struct_timespec
-#endif
-
-
-#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t)
-typedef int pid_t;
-#define __DEFINED_pid_t
-#endif
-
-#if defined(__NEED_id_t) && !defined(__DEFINED_id_t)
-typedef unsigned id_t;
-#define __DEFINED_id_t
-#endif
-
-#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t)
-typedef unsigned uid_t;
-#define __DEFINED_uid_t
-#endif
-
-#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t)
-typedef unsigned gid_t;
-#define __DEFINED_gid_t
-#endif
-
-#if defined(__NEED_key_t) && !defined(__DEFINED_key_t)
-typedef int key_t;
-#define __DEFINED_key_t
-#endif
-
-#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t)
-typedef unsigned useconds_t;
-#define __DEFINED_useconds_t
-#endif
-
-
-#ifdef __cplusplus
-#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
-typedef unsigned long pthread_t;
-#define __DEFINED_pthread_t
-#endif
-
-#else
-#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t)
-typedef struct __pthread * pthread_t;
-#define __DEFINED_pthread_t
-#endif
-
-#endif
-#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t)
-typedef int pthread_once_t;
-#define __DEFINED_pthread_once_t
-#endif
-
-#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t)
-typedef unsigned pthread_key_t;
-#define __DEFINED_pthread_key_t
-#endif
-
-#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t)
-typedef int pthread_spinlock_t;
-#define __DEFINED_pthread_spinlock_t
-#endif
-
-#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t)
-typedef struct { unsigned __attr; } pthread_mutexattr_t;
-#define __DEFINED_pthread_mutexattr_t
-#endif
-
-#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t)
-typedef struct { unsigned __attr; } pthread_condattr_t;
-#define __DEFINED_pthread_condattr_t
-#endif
-
-#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t)
-typedef struct { unsigned __attr; } pthread_barrierattr_t;
-#define __DEFINED_pthread_barrierattr_t
-#endif
-
-#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t)
-typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t;
-#define __DEFINED_pthread_rwlockattr_t
-#endif
-
-
-#if defined(__NEED_FILE) && !defined(__DEFINED_FILE)
-typedef struct _IO_FILE FILE;
-#define __DEFINED_FILE
-#endif
-
-
-#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t)
-typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t;
-#define __DEFINED_mbstate_t
-#endif
-
-
-#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t)
-typedef struct __locale_struct * locale_t;
-#define __DEFINED_locale_t
-#endif
-
-
-#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t)
-typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t;
-#define __DEFINED_sigset_t
-#endif
-
-
-#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec)
-struct iovec { void *iov_base; size_t iov_len; };
-#define __DEFINED_struct_iovec
-#endif
-
-
-#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t)
-typedef unsigned socklen_t;
-#define __DEFINED_socklen_t
-#endif
-
-#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t)
-typedef unsigned short sa_family_t;
-#define __DEFINED_sa_family_t
-#endif
-
-
-#undef _Addr
-#undef _Int64
-#undef _Reg
lib/libc/include/wasm-freestanding-musl/errno.h
@@ -1,24 +0,0 @@
-#ifndef	_ERRNO_H
-#define _ERRNO_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef WASM_THREAD_MODEL_SINGLE
-extern int errno;
-#else
-#ifdef __cplusplus
-extern thread_local int errno;
-#else
-extern _Thread_local int errno;
-#endif
-#endif
-
-#define errno errno
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
lib/std/zig/target.zig
@@ -70,7 +70,6 @@ pub const available_libcs = [_]ArchOsAbi{
     .{ .arch = .s390x, .os = .linux, .abi = .musl },
     .{ .arch = .sparc, .os = .linux, .abi = .gnu, .glibc_triple = "sparcv9-linux-gnu" },
     .{ .arch = .sparc64, .os = .linux, .abi = .gnu },
-    .{ .arch = .wasm32, .os = .freestanding, .abi = .musl },
     .{ .arch = .wasm32, .os = .wasi, .abi = .musl },
     .{ .arch = .x86, .os = .linux, .abi = .gnu },
     .{ .arch = .x86, .os = .linux, .abi = .musl },