master
   1const std = @import("std");
   2const mem = std.mem;
   3const path = std.fs.path;
   4
   5const Allocator = std.mem.Allocator;
   6const Compilation = @import("../Compilation.zig");
   7const build_options = @import("build_options");
   8
   9pub const CrtFile = enum {
  10    crt1_reactor_o,
  11    crt1_command_o,
  12    libc_a,
  13};
  14
  15pub fn execModelCrtFile(wasi_exec_model: std.builtin.WasiExecModel) CrtFile {
  16    return switch (wasi_exec_model) {
  17        .reactor => CrtFile.crt1_reactor_o,
  18        .command => CrtFile.crt1_command_o,
  19    };
  20}
  21
  22pub fn execModelCrtFileFullName(wasi_exec_model: std.builtin.WasiExecModel) []const u8 {
  23    return switch (execModelCrtFile(wasi_exec_model)) {
  24        .crt1_reactor_o => "crt1-reactor.o",
  25        .crt1_command_o => "crt1-command.o",
  26        else => unreachable,
  27    };
  28}
  29
  30/// TODO replace anyerror with explicit error set, recording user-friendly errors with
  31/// lockAndSetMiscFailure and returning error.AlreadyReported. see libcxx.zig for example.
  32pub fn buildCrtFile(comp: *Compilation, crt_file: CrtFile, prog_node: std.Progress.Node) anyerror!void {
  33    if (!build_options.have_llvm) {
  34        return error.ZigCompilerNotBuiltWithLLVMExtensions;
  35    }
  36
  37    const gpa = comp.gpa;
  38    var arena_allocator = std.heap.ArenaAllocator.init(gpa);
  39    defer arena_allocator.deinit();
  40    const arena = arena_allocator.allocator();
  41
  42    switch (crt_file) {
  43        .crt1_reactor_o => {
  44            var args = std.array_list.Managed([]const u8).init(arena);
  45            try addCCArgs(comp, arena, &args, .{});
  46            try addLibcBottomHalfIncludes(comp, arena, &args);
  47
  48            var files = [_]Compilation.CSourceFile{
  49                .{
  50                    .src_path = try comp.dirs.zig_lib.join(arena, &.{
  51                        "libc", try sanitize(arena, crt1_reactor_src_file),
  52                    }),
  53                    .extra_flags = args.items,
  54                    .owner = undefined,
  55                },
  56            };
  57
  58            return comp.build_crt_file("crt1-reactor", .Obj, .@"wasi crt1-reactor.o", prog_node, &files, .{});
  59        },
  60        .crt1_command_o => {
  61            var args = std.array_list.Managed([]const u8).init(arena);
  62            try addCCArgs(comp, arena, &args, .{});
  63            try addLibcBottomHalfIncludes(comp, arena, &args);
  64
  65            var files = [_]Compilation.CSourceFile{
  66                .{
  67                    .src_path = try comp.dirs.zig_lib.join(arena, &.{
  68                        "libc", try sanitize(arena, crt1_command_src_file),
  69                    }),
  70                    .extra_flags = args.items,
  71                    .owner = undefined,
  72                },
  73            };
  74
  75            return comp.build_crt_file("crt1-command", .Obj, .@"wasi crt1-command.o", prog_node, &files, .{});
  76        },
  77        .libc_a => {
  78            var libc_sources = std.array_list.Managed(Compilation.CSourceFile).init(arena);
  79
  80            {
  81                // Compile emmalloc.
  82                var args = std.array_list.Managed([]const u8).init(arena);
  83                try addCCArgs(comp, arena, &args, .{ .want_O3 = true, .no_strict_aliasing = true });
  84
  85                for (emmalloc_src_files) |file_path| {
  86                    try libc_sources.append(.{
  87                        .src_path = try comp.dirs.zig_lib.join(arena, &.{
  88                            "libc", try sanitize(arena, file_path),
  89                        }),
  90                        .extra_flags = args.items,
  91                        .owner = undefined,
  92                    });
  93                }
  94            }
  95
  96            {
  97                // Compile libc-bottom-half.
  98                var args = std.array_list.Managed([]const u8).init(arena);
  99                try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
 100                try addLibcBottomHalfIncludes(comp, arena, &args);
 101
 102                for (libc_bottom_half_src_files) |file_path| {
 103                    try libc_sources.append(.{
 104                        .src_path = try comp.dirs.zig_lib.join(arena, &.{
 105                            "libc", try sanitize(arena, file_path),
 106                        }),
 107                        .extra_flags = args.items,
 108                        .owner = undefined,
 109                    });
 110                }
 111            }
 112
 113            {
 114                // Compile libc-top-half.
 115                var args = std.array_list.Managed([]const u8).init(arena);
 116                try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
 117                try addLibcTopHalfIncludes(comp, arena, &args);
 118
 119                for (libc_top_half_src_files) |file_path| {
 120                    try libc_sources.append(.{
 121                        .src_path = try comp.dirs.zig_lib.join(arena, &.{
 122                            "libc", try sanitize(arena, file_path),
 123                        }),
 124                        .extra_flags = args.items,
 125                        .owner = undefined,
 126                    });
 127                }
 128            }
 129
 130            {
 131                // Compile musl-fts.
 132                var args = std.array_list.Managed([]const u8).init(arena);
 133                try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
 134                try args.appendSlice(&[_][]const u8{
 135                    "-I",
 136                    try comp.dirs.zig_lib.join(arena, &.{
 137                        "libc",
 138                        "wasi",
 139                        "fts",
 140                    }),
 141                });
 142
 143                for (fts_src_files) |file_path| {
 144                    try libc_sources.append(.{
 145                        .src_path = try comp.dirs.zig_lib.join(arena, &.{
 146                            "libc", try sanitize(arena, file_path),
 147                        }),
 148                        .extra_flags = args.items,
 149                        .owner = undefined,
 150                    });
 151                }
 152            }
 153
 154            if (comp.getTarget().cpu.has(.wasm, .exception_handling)) {
 155                // Compile libsetjmp.
 156                var args = std.array_list.Managed([]const u8).init(arena);
 157                try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
 158                try addLibcTopHalfIncludes(comp, arena, &args);
 159
 160                for (setjmp_src_files) |file_path| {
 161                    try libc_sources.append(.{
 162                        .src_path = try comp.dirs.zig_lib.join(arena, &.{
 163                            "libc", try sanitize(arena, file_path),
 164                        }),
 165                        .extra_flags = args.items,
 166                        .owner = undefined,
 167                    });
 168                }
 169            }
 170
 171            {
 172                // Compile libdl.
 173                var args = std.array_list.Managed([]const u8).init(arena);
 174                try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
 175                try addLibcTopHalfIncludes(comp, arena, &args);
 176
 177                for (emulated_dl_src_files) |file_path| {
 178                    try libc_sources.append(.{
 179                        .src_path = try comp.dirs.zig_lib.join(arena, &.{
 180                            "libc", try sanitize(arena, file_path),
 181                        }),
 182                        .extra_flags = args.items,
 183                        .owner = undefined,
 184                    });
 185                }
 186            }
 187
 188            {
 189                // Compile libwasi-emulated-process-clocks.
 190                var args = std.array_list.Managed([]const u8).init(arena);
 191                try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
 192
 193                for (emulated_process_clocks_src_files) |file_path| {
 194                    try libc_sources.append(.{
 195                        .src_path = try comp.dirs.zig_lib.join(arena, &.{
 196                            "libc", try sanitize(arena, file_path),
 197                        }),
 198                        .extra_flags = args.items,
 199                        .owner = undefined,
 200                    });
 201                }
 202            }
 203
 204            {
 205                // Compile libwasi-emulated-getpid.
 206                var args = std.array_list.Managed([]const u8).init(arena);
 207                try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
 208
 209                for (emulated_getpid_src_files) |file_path| {
 210                    try libc_sources.append(.{
 211                        .src_path = try comp.dirs.zig_lib.join(arena, &.{
 212                            "libc", try sanitize(arena, file_path),
 213                        }),
 214                        .extra_flags = args.items,
 215                        .owner = undefined,
 216                    });
 217                }
 218            }
 219
 220            {
 221                // Compile libwasi-emulated-mman.
 222                var args = std.array_list.Managed([]const u8).init(arena);
 223                try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
 224
 225                for (emulated_mman_src_files) |file_path| {
 226                    try libc_sources.append(.{
 227                        .src_path = try comp.dirs.zig_lib.join(arena, &.{
 228                            "libc", try sanitize(arena, file_path),
 229                        }),
 230                        .extra_flags = args.items,
 231                        .owner = undefined,
 232                    });
 233                }
 234            }
 235
 236            {
 237                // Compile libwasi-emulated-signal.
 238                var bottom_args = std.array_list.Managed([]const u8).init(arena);
 239                try addCCArgs(comp, arena, &bottom_args, .{ .want_O3 = true });
 240
 241                for (emulated_signal_bottom_half_src_files) |file_path| {
 242                    try libc_sources.append(.{
 243                        .src_path = try comp.dirs.zig_lib.join(arena, &.{
 244                            "libc", try sanitize(arena, file_path),
 245                        }),
 246                        .extra_flags = bottom_args.items,
 247                        .owner = undefined,
 248                    });
 249                }
 250
 251                var top_args = std.array_list.Managed([]const u8).init(arena);
 252                try addCCArgs(comp, arena, &top_args, .{ .want_O3 = true });
 253                try addLibcTopHalfIncludes(comp, arena, &top_args);
 254                try top_args.append("-D_WASI_EMULATED_SIGNAL");
 255
 256                for (emulated_signal_top_half_src_files) |file_path| {
 257                    try libc_sources.append(.{
 258                        .src_path = try comp.dirs.zig_lib.join(arena, &.{
 259                            "libc", try sanitize(arena, file_path),
 260                        }),
 261                        .extra_flags = top_args.items,
 262                        .owner = undefined,
 263                    });
 264                }
 265            }
 266
 267            try comp.build_crt_file("c", .Lib, .@"wasi libc.a", prog_node, libc_sources.items, .{});
 268        },
 269    }
 270}
 271
 272fn sanitize(arena: Allocator, file_path: []const u8) ![]const u8 {
 273    // TODO do this at comptime on the comptime data rather than at runtime
 274    // probably best to wait until self-hosted is done and our comptime execution
 275    // is faster and uses less memory.
 276    const out_path = if (path.sep != '/') blk: {
 277        const mutable_file_path = try arena.dupe(u8, file_path);
 278        for (mutable_file_path) |*c| {
 279            if (c.* == '/') {
 280                c.* = path.sep;
 281            }
 282        }
 283        break :blk mutable_file_path;
 284    } else file_path;
 285    return out_path;
 286}
 287
 288const CCOptions = struct {
 289    want_O3: bool = false,
 290    no_strict_aliasing: bool = false,
 291};
 292
 293fn addCCArgs(
 294    comp: *Compilation,
 295    arena: Allocator,
 296    args: *std.array_list.Managed([]const u8),
 297    options: CCOptions,
 298) error{OutOfMemory}!void {
 299    const target = comp.getTarget();
 300    const arch_name = std.zig.target.muslArchNameHeaders(target.cpu.arch);
 301    const os_name = @tagName(target.os.tag);
 302    const triple = try std.fmt.allocPrint(arena, "{s}-{s}-musl", .{ arch_name, os_name });
 303    const o_arg = if (options.want_O3) "-O3" else "-Os";
 304
 305    try args.appendSlice(&[_][]const u8{
 306        "-std=gnu17",
 307        "-fno-trapping-math",
 308        "-w", // ignore all warnings
 309
 310        o_arg,
 311
 312        "-mthread-model",
 313        "single",
 314
 315        "-I",
 316        try comp.dirs.zig_lib.join(arena, &.{
 317            "libc",
 318            "wasi",
 319            "libc-bottom-half",
 320            "cloudlibc",
 321            "src",
 322        }),
 323
 324        "-isystem",
 325        try comp.dirs.zig_lib.join(arena, &.{ "libc", "include", triple }),
 326        "-isystem",
 327        try comp.dirs.zig_lib.join(arena, &.{ "libc", "include", "generic-musl" }),
 328
 329        "-DBULK_MEMORY_THRESHOLD=32",
 330    });
 331
 332    if (options.no_strict_aliasing) {
 333        try args.appendSlice(&[_][]const u8{"-fno-strict-aliasing"});
 334    }
 335}
 336
 337fn addLibcBottomHalfIncludes(
 338    comp: *Compilation,
 339    arena: Allocator,
 340    args: *std.array_list.Managed([]const u8),
 341) error{OutOfMemory}!void {
 342    try args.appendSlice(&[_][]const u8{
 343        "-I",
 344        try comp.dirs.zig_lib.join(arena, &.{
 345            "libc",
 346            "wasi",
 347            "libc-bottom-half",
 348            "headers",
 349            "private",
 350        }),
 351
 352        "-I",
 353        try comp.dirs.zig_lib.join(arena, &.{
 354            "libc",
 355            "wasi",
 356            "libc-bottom-half",
 357            "cloudlibc",
 358            "src",
 359            "include",
 360        }),
 361
 362        "-I",
 363        try comp.dirs.zig_lib.join(arena, &.{
 364            "libc",
 365            "wasi",
 366            "libc-bottom-half",
 367            "cloudlibc",
 368            "src",
 369        }),
 370
 371        "-I",
 372        try comp.dirs.zig_lib.join(arena, &.{
 373            "libc",
 374            "wasi",
 375            "libc-top-half",
 376            "musl",
 377            "src",
 378            "include",
 379        }),
 380        "-I",
 381        try comp.dirs.zig_lib.join(arena, &.{
 382            "libc",
 383            "musl",
 384            "src",
 385            "include",
 386        }),
 387        "-I",
 388
 389        try comp.dirs.zig_lib.join(arena, &.{
 390            "libc",
 391            "wasi",
 392            "libc-top-half",
 393            "musl",
 394            "src",
 395            "internal",
 396        }),
 397        "-I",
 398        try comp.dirs.zig_lib.join(arena, &.{
 399            "libc",
 400            "musl",
 401            "src",
 402            "internal",
 403        }),
 404    });
 405}
 406
 407fn addLibcTopHalfIncludes(
 408    comp: *Compilation,
 409    arena: Allocator,
 410    args: *std.array_list.Managed([]const u8),
 411) error{OutOfMemory}!void {
 412    try args.appendSlice(&[_][]const u8{
 413        "-I",
 414        try comp.dirs.zig_lib.join(arena, &.{
 415            "libc",
 416            "wasi",
 417            "libc-top-half",
 418            "musl",
 419            "src",
 420            "include",
 421        }),
 422        "-I",
 423        try comp.dirs.zig_lib.join(arena, &.{
 424            "libc",
 425            "musl",
 426            "src",
 427            "include",
 428        }),
 429
 430        "-I",
 431        try comp.dirs.zig_lib.join(arena, &.{
 432            "libc",
 433            "wasi",
 434            "libc-top-half",
 435            "musl",
 436            "src",
 437            "internal",
 438        }),
 439        "-I",
 440        try comp.dirs.zig_lib.join(arena, &.{
 441            "libc",
 442            "musl",
 443            "src",
 444            "internal",
 445        }),
 446
 447        "-I",
 448        try comp.dirs.zig_lib.join(arena, &.{
 449            "libc",
 450            "wasi",
 451            "libc-top-half",
 452            "musl",
 453            "arch",
 454            "wasm32",
 455        }),
 456        "-I",
 457        try comp.dirs.zig_lib.join(arena, &.{
 458            "libc",
 459            "musl",
 460            "arch",
 461            "generic",
 462        }),
 463
 464        "-I",
 465        try comp.dirs.zig_lib.join(arena, &.{
 466            "libc",
 467            "wasi",
 468            "libc-top-half",
 469            "headers",
 470            "private",
 471        }),
 472    });
 473}
 474
 475const emmalloc_src_files = [_][]const u8{
 476    "wasi/emmalloc/emmalloc.c",
 477};
 478
 479const libc_bottom_half_src_files = [_][]const u8{
 480    "wasi/libc-bottom-half/cloudlibc/src/libc/dirent/closedir.c",
 481    "wasi/libc-bottom-half/cloudlibc/src/libc/dirent/dirfd.c",
 482    "wasi/libc-bottom-half/cloudlibc/src/libc/dirent/fdclosedir.c",
 483    "wasi/libc-bottom-half/cloudlibc/src/libc/dirent/fdopendir.c",
 484    "wasi/libc-bottom-half/cloudlibc/src/libc/dirent/opendirat.c",
 485    "wasi/libc-bottom-half/cloudlibc/src/libc/dirent/readdir.c",
 486    "wasi/libc-bottom-half/cloudlibc/src/libc/dirent/rewinddir.c",
 487    "wasi/libc-bottom-half/cloudlibc/src/libc/dirent/scandirat.c",
 488    "wasi/libc-bottom-half/cloudlibc/src/libc/dirent/seekdir.c",
 489    "wasi/libc-bottom-half/cloudlibc/src/libc/dirent/telldir.c",
 490    "wasi/libc-bottom-half/cloudlibc/src/libc/errno/errno.c",
 491    "wasi/libc-bottom-half/cloudlibc/src/libc/fcntl/fcntl.c",
 492    "wasi/libc-bottom-half/cloudlibc/src/libc/fcntl/openat.c",
 493    "wasi/libc-bottom-half/cloudlibc/src/libc/fcntl/posix_fadvise.c",
 494    "wasi/libc-bottom-half/cloudlibc/src/libc/fcntl/posix_fallocate.c",
 495    "wasi/libc-bottom-half/cloudlibc/src/libc/poll/poll.c",
 496    "wasi/libc-bottom-half/cloudlibc/src/libc/sched/sched_yield.c",
 497    "wasi/libc-bottom-half/cloudlibc/src/libc/stdio/renameat.c",
 498    "wasi/libc-bottom-half/cloudlibc/src/libc/stdlib/_Exit.c",
 499    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/ioctl/ioctl.c",
 500    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/select/pselect.c",
 501    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/select/select.c",
 502    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/socket/getsockopt.c",
 503    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/socket/recv.c",
 504    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/socket/send.c",
 505    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/socket/shutdown.c",
 506    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/stat/fstatat.c",
 507    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/stat/fstat.c",
 508    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/stat/futimens.c",
 509    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/stat/mkdirat.c",
 510    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/stat/utimensat.c",
 511    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/time/gettimeofday.c",
 512    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/uio/preadv.c",
 513    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/uio/pwritev.c",
 514    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/uio/readv.c",
 515    "wasi/libc-bottom-half/cloudlibc/src/libc/sys/uio/writev.c",
 516    "wasi/libc-bottom-half/cloudlibc/src/libc/time/clock_getres.c",
 517    "wasi/libc-bottom-half/cloudlibc/src/libc/time/clock_gettime.c",
 518    "wasi/libc-bottom-half/cloudlibc/src/libc/time/CLOCK_MONOTONIC.c",
 519    "wasi/libc-bottom-half/cloudlibc/src/libc/time/clock_nanosleep.c",
 520    "wasi/libc-bottom-half/cloudlibc/src/libc/time/CLOCK_REALTIME.c",
 521    "wasi/libc-bottom-half/cloudlibc/src/libc/time/nanosleep.c",
 522    "wasi/libc-bottom-half/cloudlibc/src/libc/time/time.c",
 523    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/faccessat.c",
 524    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/fdatasync.c",
 525    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/fsync.c",
 526    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/ftruncate.c",
 527    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/linkat.c",
 528    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/lseek.c",
 529    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/pread.c",
 530    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/pwrite.c",
 531    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/read.c",
 532    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/readlinkat.c",
 533    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/sleep.c",
 534    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/symlinkat.c",
 535    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/unlinkat.c",
 536    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/usleep.c",
 537    "wasi/libc-bottom-half/cloudlibc/src/libc/unistd/write.c",
 538    "wasi/libc-bottom-half/sources/abort.c",
 539    "wasi/libc-bottom-half/sources/accept-wasip1.c",
 540    "wasi/libc-bottom-half/sources/at_fdcwd.c",
 541    "wasi/libc-bottom-half/sources/chdir.c",
 542    "wasi/libc-bottom-half/sources/complex-builtins.c",
 543    "wasi/libc-bottom-half/sources/environ.c",
 544    "wasi/libc-bottom-half/sources/errno.c",
 545    "wasi/libc-bottom-half/sources/__errno_location.c",
 546    "wasi/libc-bottom-half/sources/getcwd.c",
 547    "wasi/libc-bottom-half/sources/getentropy.c",
 548    "wasi/libc-bottom-half/sources/isatty.c",
 549    "wasi/libc-bottom-half/sources/__main_void.c",
 550    "wasi/libc-bottom-half/sources/math/fmin-fmax.c",
 551    "wasi/libc-bottom-half/sources/math/math-builtins.c",
 552    "wasi/libc-bottom-half/sources/posix.c",
 553    "wasi/libc-bottom-half/sources/preopens.c",
 554    "wasi/libc-bottom-half/sources/reallocarray.c",
 555    "wasi/libc-bottom-half/sources/sbrk.c",
 556    "wasi/libc-bottom-half/sources/truncate.c",
 557    "wasi/libc-bottom-half/sources/__wasilibc_dt.c",
 558    "wasi/libc-bottom-half/sources/__wasilibc_environ.c",
 559    "wasi/libc-bottom-half/sources/__wasilibc_fd_renumber.c",
 560    "wasi/libc-bottom-half/sources/__wasilibc_initialize_environ.c",
 561    "wasi/libc-bottom-half/sources/__wasilibc_random.c",
 562    "wasi/libc-bottom-half/sources/__wasilibc_real.c",
 563    "wasi/libc-bottom-half/sources/__wasilibc_rmdirat.c",
 564    "wasi/libc-bottom-half/sources/__wasilibc_tell.c",
 565    "wasi/libc-bottom-half/sources/__wasilibc_unlinkat.c",
 566};
 567
 568const libc_top_half_src_files = [_][]const u8{
 569    "musl/src/complex/cabs.c",
 570    "musl/src/complex/cabsf.c",
 571    "musl/src/complex/cabsl.c",
 572    "musl/src/complex/cacos.c",
 573    "musl/src/complex/cacosf.c",
 574    "musl/src/complex/cacosh.c",
 575    "musl/src/complex/cacoshf.c",
 576    "musl/src/complex/cacoshl.c",
 577    "musl/src/complex/cacosl.c",
 578    "musl/src/complex/carg.c",
 579    "musl/src/complex/cargf.c",
 580    "musl/src/complex/cargl.c",
 581    "musl/src/complex/casin.c",
 582    "musl/src/complex/casinf.c",
 583    "musl/src/complex/casinh.c",
 584    "musl/src/complex/casinhf.c",
 585    "musl/src/complex/casinhl.c",
 586    "musl/src/complex/casinl.c",
 587    "musl/src/complex/catan.c",
 588    "musl/src/complex/catanf.c",
 589    "musl/src/complex/catanh.c",
 590    "musl/src/complex/catanhf.c",
 591    "musl/src/complex/catanhl.c",
 592    "musl/src/complex/catanl.c",
 593    "musl/src/complex/ccos.c",
 594    "musl/src/complex/ccosf.c",
 595    "musl/src/complex/ccosh.c",
 596    "musl/src/complex/ccoshf.c",
 597    "musl/src/complex/ccoshl.c",
 598    "musl/src/complex/ccosl.c",
 599    "musl/src/complex/__cexp.c",
 600    "musl/src/complex/cexp.c",
 601    "musl/src/complex/__cexpf.c",
 602    "musl/src/complex/cexpf.c",
 603    "musl/src/complex/cexpl.c",
 604    "musl/src/complex/clog.c",
 605    "musl/src/complex/clogf.c",
 606    "musl/src/complex/clogl.c",
 607    "musl/src/complex/conj.c",
 608    "musl/src/complex/conjf.c",
 609    "musl/src/complex/conjl.c",
 610    "musl/src/complex/cpow.c",
 611    "musl/src/complex/cpowf.c",
 612    "musl/src/complex/cpowl.c",
 613    "musl/src/complex/cproj.c",
 614    "musl/src/complex/cprojf.c",
 615    "musl/src/complex/cprojl.c",
 616    "musl/src/complex/csin.c",
 617    "musl/src/complex/csinf.c",
 618    "musl/src/complex/csinh.c",
 619    "musl/src/complex/csinhf.c",
 620    "musl/src/complex/csinhl.c",
 621    "musl/src/complex/csinl.c",
 622    "musl/src/complex/csqrt.c",
 623    "musl/src/complex/csqrtf.c",
 624    "musl/src/complex/csqrtl.c",
 625    "musl/src/complex/ctan.c",
 626    "musl/src/complex/ctanf.c",
 627    "musl/src/complex/ctanh.c",
 628    "musl/src/complex/ctanhf.c",
 629    "musl/src/complex/ctanhl.c",
 630    "musl/src/complex/ctanl.c",
 631    "musl/src/conf/confstr.c",
 632    "musl/src/conf/legacy.c",
 633    "musl/src/conf/pathconf.c",
 634    "musl/src/crypt/crypt_blowfish.c",
 635    "musl/src/crypt/crypt.c",
 636    "musl/src/crypt/crypt_des.c",
 637    "musl/src/crypt/crypt_md5.c",
 638    "musl/src/crypt/crypt_r.c",
 639    "musl/src/crypt/crypt_sha256.c",
 640    "musl/src/crypt/crypt_sha512.c",
 641    "musl/src/crypt/encrypt.c",
 642    "musl/src/ctype/__ctype_b_loc.c",
 643    "musl/src/ctype/__ctype_get_mb_cur_max.c",
 644    "musl/src/ctype/__ctype_tolower_loc.c",
 645    "musl/src/ctype/__ctype_toupper_loc.c",
 646    "musl/src/ctype/isalnum.c",
 647    "musl/src/ctype/isalpha.c",
 648    "musl/src/ctype/isascii.c",
 649    "musl/src/ctype/isblank.c",
 650    "musl/src/ctype/iscntrl.c",
 651    "musl/src/ctype/isdigit.c",
 652    "musl/src/ctype/isgraph.c",
 653    "musl/src/ctype/islower.c",
 654    "musl/src/ctype/isprint.c",
 655    "musl/src/ctype/ispunct.c",
 656    "musl/src/ctype/isspace.c",
 657    "musl/src/ctype/isupper.c",
 658    "musl/src/ctype/iswalnum.c",
 659    "musl/src/ctype/iswalpha.c",
 660    "musl/src/ctype/iswblank.c",
 661    "musl/src/ctype/iswcntrl.c",
 662    "musl/src/ctype/iswctype.c",
 663    "musl/src/ctype/iswdigit.c",
 664    "musl/src/ctype/iswgraph.c",
 665    "musl/src/ctype/iswlower.c",
 666    "musl/src/ctype/iswprint.c",
 667    "musl/src/ctype/iswpunct.c",
 668    "musl/src/ctype/iswspace.c",
 669    "musl/src/ctype/iswupper.c",
 670    "musl/src/ctype/iswxdigit.c",
 671    "musl/src/ctype/isxdigit.c",
 672    "musl/src/ctype/toascii.c",
 673    "musl/src/ctype/tolower.c",
 674    "musl/src/ctype/toupper.c",
 675    "musl/src/ctype/towctrans.c",
 676    "musl/src/ctype/wcswidth.c",
 677    "musl/src/ctype/wctrans.c",
 678    "musl/src/ctype/wcwidth.c",
 679    "musl/src/env/setenv.c",
 680    "musl/src/exit/assert.c",
 681    "musl/src/exit/quick_exit.c",
 682    "musl/src/fenv/fegetexceptflag.c",
 683    "musl/src/fenv/feholdexcept.c",
 684    "musl/src/fenv/fenv.c",
 685    "musl/src/fenv/fesetexceptflag.c",
 686    "musl/src/fenv/fesetround.c",
 687    "musl/src/fenv/feupdateenv.c",
 688    "musl/src/legacy/getpagesize.c",
 689    "musl/src/locale/c_locale.c",
 690    "musl/src/locale/duplocale.c",
 691    "musl/src/locale/freelocale.c",
 692    "musl/src/locale/iconv.c",
 693    "musl/src/locale/iconv_close.c",
 694    "musl/src/locale/langinfo.c",
 695    "musl/src/locale/__lctrans.c",
 696    "musl/src/locale/localeconv.c",
 697    "musl/src/locale/__mo_lookup.c",
 698    "musl/src/locale/pleval.c",
 699    "musl/src/locale/setlocale.c",
 700    "musl/src/locale/strcoll.c",
 701    "musl/src/locale/strfmon.c",
 702    "musl/src/locale/strtod_l.c",
 703    "musl/src/locale/strxfrm.c",
 704    "musl/src/locale/wcscoll.c",
 705    "musl/src/locale/wcsxfrm.c",
 706    "musl/src/math/acos.c",
 707    "musl/src/math/acosf.c",
 708    "musl/src/math/acosh.c",
 709    "musl/src/math/acoshf.c",
 710    "musl/src/math/acoshl.c",
 711    "musl/src/math/acosl.c",
 712    "musl/src/math/asin.c",
 713    "musl/src/math/asinf.c",
 714    "musl/src/math/asinh.c",
 715    "musl/src/math/asinhf.c",
 716    "musl/src/math/asinhl.c",
 717    "musl/src/math/asinl.c",
 718    "musl/src/math/atan2.c",
 719    "musl/src/math/atan2f.c",
 720    "musl/src/math/atan2l.c",
 721    "musl/src/math/atan.c",
 722    "musl/src/math/atanf.c",
 723    "musl/src/math/atanh.c",
 724    "musl/src/math/atanhf.c",
 725    "musl/src/math/atanhl.c",
 726    "musl/src/math/atanl.c",
 727    "musl/src/math/cbrt.c",
 728    "musl/src/math/cbrtf.c",
 729    "musl/src/math/cbrtl.c",
 730    "musl/src/math/copysignl.c",
 731    "musl/src/math/__cos.c",
 732    "musl/src/math/__cosdf.c",
 733    "musl/src/math/coshl.c",
 734    "musl/src/math/__cosl.c",
 735    "musl/src/math/cosl.c",
 736    "musl/src/math/erf.c",
 737    "musl/src/math/erff.c",
 738    "musl/src/math/erfl.c",
 739    "musl/src/math/exp10.c",
 740    "musl/src/math/exp10f.c",
 741    "musl/src/math/exp10l.c",
 742    "musl/src/math/exp2.c",
 743    "musl/src/math/exp2f.c",
 744    "musl/src/math/exp2f_data.c",
 745    "musl/src/math/exp2l.c",
 746    "musl/src/math/exp.c",
 747    "musl/src/math/exp_data.c",
 748    "musl/src/math/expf.c",
 749    "musl/src/math/expl.c",
 750    "musl/src/math/expm1.c",
 751    "musl/src/math/expm1f.c",
 752    "musl/src/math/expm1l.c",
 753    "musl/src/math/fdim.c",
 754    "musl/src/math/fdimf.c",
 755    "musl/src/math/fdiml.c",
 756    "musl/src/math/finite.c",
 757    "musl/src/math/finitef.c",
 758    "musl/src/math/fma.c",
 759    "musl/src/math/fmaf.c",
 760    "musl/src/math/fmaxl.c",
 761    "musl/src/math/fminl.c",
 762    "musl/src/math/fmod.c",
 763    "musl/src/math/fmodf.c",
 764    "musl/src/math/fmodl.c",
 765    "musl/src/math/frexp.c",
 766    "musl/src/math/frexpf.c",
 767    "musl/src/math/frexpl.c",
 768    "musl/src/math/hypot.c",
 769    "musl/src/math/hypotf.c",
 770    "musl/src/math/hypotl.c",
 771    "musl/src/math/ilogb.c",
 772    "musl/src/math/ilogbf.c",
 773    "musl/src/math/ilogbl.c",
 774    "musl/src/math/__invtrigl.c",
 775    "musl/src/math/j0.c",
 776    "musl/src/math/j0f.c",
 777    "musl/src/math/j1.c",
 778    "musl/src/math/j1f.c",
 779    "musl/src/math/jn.c",
 780    "musl/src/math/jnf.c",
 781    "musl/src/math/ldexp.c",
 782    "musl/src/math/ldexpf.c",
 783    "musl/src/math/ldexpl.c",
 784    "musl/src/math/lgamma.c",
 785    "musl/src/math/lgammaf.c",
 786    "musl/src/math/lgammaf_r.c",
 787    "musl/src/math/lgammal.c",
 788    "musl/src/math/lgamma_r.c",
 789    "musl/src/math/llrint.c",
 790    "musl/src/math/llrintf.c",
 791    "musl/src/math/llrintl.c",
 792    "musl/src/math/llround.c",
 793    "musl/src/math/llroundf.c",
 794    "musl/src/math/llroundl.c",
 795    "musl/src/math/log10.c",
 796    "musl/src/math/log10f.c",
 797    "musl/src/math/log10l.c",
 798    "musl/src/math/log1p.c",
 799    "musl/src/math/log1pf.c",
 800    "musl/src/math/log1pl.c",
 801    "musl/src/math/log2.c",
 802    "musl/src/math/log2_data.c",
 803    "musl/src/math/log2f.c",
 804    "musl/src/math/log2f_data.c",
 805    "musl/src/math/log2l.c",
 806    "musl/src/math/logb.c",
 807    "musl/src/math/logbf.c",
 808    "musl/src/math/logbl.c",
 809    "musl/src/math/log.c",
 810    "musl/src/math/log_data.c",
 811    "musl/src/math/logf.c",
 812    "musl/src/math/logf_data.c",
 813    "musl/src/math/logl.c",
 814    "musl/src/math/lrint.c",
 815    "musl/src/math/lrintf.c",
 816    "musl/src/math/lrintl.c",
 817    "musl/src/math/lround.c",
 818    "musl/src/math/lroundf.c",
 819    "musl/src/math/lroundl.c",
 820    "musl/src/math/__math_divzero.c",
 821    "musl/src/math/__math_divzerof.c",
 822    "musl/src/math/__math_invalid.c",
 823    "musl/src/math/__math_invalidf.c",
 824    "musl/src/math/__math_invalidl.c",
 825    "musl/src/math/__math_oflow.c",
 826    "musl/src/math/__math_oflowf.c",
 827    "musl/src/math/__math_uflow.c",
 828    "musl/src/math/__math_uflowf.c",
 829    "musl/src/math/__math_xflow.c",
 830    "musl/src/math/__math_xflowf.c",
 831    "musl/src/math/modf.c",
 832    "musl/src/math/modff.c",
 833    "musl/src/math/modfl.c",
 834    "musl/src/math/nan.c",
 835    "musl/src/math/nanf.c",
 836    "musl/src/math/nanl.c",
 837    "musl/src/math/nearbyintl.c",
 838    "musl/src/math/nextafter.c",
 839    "musl/src/math/nextafterf.c",
 840    "musl/src/math/nextafterl.c",
 841    "musl/src/math/nexttoward.c",
 842    "musl/src/math/nexttowardf.c",
 843    "musl/src/math/nexttowardl.c",
 844    "musl/src/math/__polevll.c",
 845    "musl/src/math/pow.c",
 846    "musl/src/math/pow_data.c",
 847    "musl/src/math/powf.c",
 848    "musl/src/math/powf_data.c",
 849    "musl/src/math/remainder.c",
 850    "musl/src/math/remainderf.c",
 851    "musl/src/math/remainderl.c",
 852    "musl/src/math/__rem_pio2_large.c",
 853    "musl/src/math/remquo.c",
 854    "musl/src/math/remquof.c",
 855    "musl/src/math/remquol.c",
 856    "musl/src/math/rintl.c",
 857    "musl/src/math/round.c",
 858    "musl/src/math/roundf.c",
 859    "musl/src/math/roundl.c",
 860    "musl/src/math/scalb.c",
 861    "musl/src/math/scalbf.c",
 862    "musl/src/math/scalbln.c",
 863    "musl/src/math/scalblnf.c",
 864    "musl/src/math/scalblnl.c",
 865    "musl/src/math/scalbn.c",
 866    "musl/src/math/scalbnf.c",
 867    "musl/src/math/scalbnl.c",
 868    "musl/src/math/signgam.c",
 869    "musl/src/math/significand.c",
 870    "musl/src/math/significandf.c",
 871    "musl/src/math/__sin.c",
 872    "musl/src/math/sincosl.c",
 873    "musl/src/math/__sindf.c",
 874    "musl/src/math/sinhl.c",
 875    "musl/src/math/__sinl.c",
 876    "musl/src/math/sinl.c",
 877    "musl/src/math/sqrt_data.c",
 878    "musl/src/math/sqrtl.c",
 879    "musl/src/math/__tan.c",
 880    "musl/src/math/__tandf.c",
 881    "musl/src/math/tanh.c",
 882    "musl/src/math/tanhf.c",
 883    "musl/src/math/tanhl.c",
 884    "musl/src/math/__tanl.c",
 885    "musl/src/math/tanl.c",
 886    "musl/src/math/tgamma.c",
 887    "musl/src/math/tgammaf.c",
 888    "musl/src/math/tgammal.c",
 889    "musl/src/misc/a64l.c",
 890    "musl/src/misc/basename.c",
 891    "musl/src/misc/dirname.c",
 892    "musl/src/misc/ffs.c",
 893    "musl/src/misc/ffsl.c",
 894    "musl/src/misc/ffsll.c",
 895    "musl/src/misc/getdomainname.c",
 896    "musl/src/misc/gethostid.c",
 897    "musl/src/misc/getopt.c",
 898    "musl/src/misc/getopt_long.c",
 899    "musl/src/misc/getsubopt.c",
 900    "musl/src/misc/realpath.c",
 901    "musl/src/multibyte/btowc.c",
 902    "musl/src/multibyte/c16rtomb.c",
 903    "musl/src/multibyte/c32rtomb.c",
 904    "musl/src/multibyte/internal.c",
 905    "musl/src/multibyte/mblen.c",
 906    "musl/src/multibyte/mbrlen.c",
 907    "musl/src/multibyte/mbrtoc16.c",
 908    "musl/src/multibyte/mbrtoc32.c",
 909    "musl/src/multibyte/mbrtowc.c",
 910    "musl/src/multibyte/mbsinit.c",
 911    "musl/src/multibyte/mbsnrtowcs.c",
 912    "musl/src/multibyte/mbsrtowcs.c",
 913    "musl/src/multibyte/mbstowcs.c",
 914    "musl/src/multibyte/mbtowc.c",
 915    "musl/src/multibyte/wcrtomb.c",
 916    "musl/src/multibyte/wcsnrtombs.c",
 917    "musl/src/multibyte/wcsrtombs.c",
 918    "musl/src/multibyte/wcstombs.c",
 919    "musl/src/multibyte/wctob.c",
 920    "musl/src/multibyte/wctomb.c",
 921    "musl/src/network/htonl.c",
 922    "musl/src/network/htons.c",
 923    "musl/src/network/in6addr_any.c",
 924    "musl/src/network/in6addr_loopback.c",
 925    "musl/src/network/inet_aton.c",
 926    "musl/src/network/inet_ntop.c",
 927    "musl/src/network/inet_pton.c",
 928    "musl/src/network/ntohl.c",
 929    "musl/src/network/ntohs.c",
 930    "musl/src/prng/drand48.c",
 931    "musl/src/prng/lcong48.c",
 932    "musl/src/prng/lrand48.c",
 933    "musl/src/prng/mrand48.c",
 934    "musl/src/prng/__rand48_step.c",
 935    "musl/src/prng/rand.c",
 936    "musl/src/prng/rand_r.c",
 937    "musl/src/prng/__seed48.c",
 938    "musl/src/prng/seed48.c",
 939    "musl/src/prng/srand48.c",
 940    "musl/src/regex/fnmatch.c",
 941    "musl/src/regex/regerror.c",
 942    "musl/src/search/hsearch.c",
 943    "musl/src/search/insque.c",
 944    "musl/src/search/lsearch.c",
 945    "musl/src/search/tdelete.c",
 946    "musl/src/search/tdestroy.c",
 947    "musl/src/search/tfind.c",
 948    "musl/src/search/tsearch.c",
 949    "musl/src/search/twalk.c",
 950    "musl/src/stdio/asprintf.c",
 951    "musl/src/stdio/clearerr.c",
 952    "musl/src/stdio/dprintf.c",
 953    "musl/src/stdio/ext2.c",
 954    "musl/src/stdio/ext.c",
 955    "musl/src/stdio/fclose.c",
 956    "musl/src/stdio/__fclose_ca.c",
 957    "musl/src/stdio/feof.c",
 958    "musl/src/stdio/ferror.c",
 959    "musl/src/stdio/fflush.c",
 960    "musl/src/stdio/fgetln.c",
 961    "musl/src/stdio/fgets.c",
 962    "musl/src/stdio/fgetwc.c",
 963    "musl/src/stdio/fgetws.c",
 964    "musl/src/stdio/fileno.c",
 965    "musl/src/stdio/__fmodeflags.c",
 966    "musl/src/stdio/fopencookie.c",
 967    "musl/src/stdio/fprintf.c",
 968    "musl/src/stdio/fputs.c",
 969    "musl/src/stdio/fputwc.c",
 970    "musl/src/stdio/fputws.c",
 971    "musl/src/stdio/fread.c",
 972    "musl/src/stdio/fscanf.c",
 973    "musl/src/stdio/fwide.c",
 974    "musl/src/stdio/fwprintf.c",
 975    "musl/src/stdio/fwrite.c",
 976    "musl/src/stdio/fwscanf.c",
 977    "musl/src/stdio/getchar_unlocked.c",
 978    "musl/src/stdio/getc_unlocked.c",
 979    "musl/src/stdio/getdelim.c",
 980    "musl/src/stdio/getline.c",
 981    "musl/src/stdio/getw.c",
 982    "musl/src/stdio/getwc.c",
 983    "musl/src/stdio/getwchar.c",
 984    "musl/src/stdio/ofl_add.c",
 985    "musl/src/stdio/__overflow.c",
 986    "musl/src/stdio/perror.c",
 987    "musl/src/stdio/putchar_unlocked.c",
 988    "musl/src/stdio/putc_unlocked.c",
 989    "musl/src/stdio/puts.c",
 990    "musl/src/stdio/putw.c",
 991    "musl/src/stdio/putwc.c",
 992    "musl/src/stdio/putwchar.c",
 993    "musl/src/stdio/rewind.c",
 994    "musl/src/stdio/scanf.c",
 995    "musl/src/stdio/setbuf.c",
 996    "musl/src/stdio/setbuffer.c",
 997    "musl/src/stdio/setlinebuf.c",
 998    "musl/src/stdio/setvbuf.c",
 999    "musl/src/stdio/snprintf.c",
1000    "musl/src/stdio/sprintf.c",
1001    "musl/src/stdio/sscanf.c",
1002    "musl/src/stdio/__stdio_exit.c",
1003    "musl/src/stdio/swprintf.c",
1004    "musl/src/stdio/swscanf.c",
1005    "musl/src/stdio/__toread.c",
1006    "musl/src/stdio/__towrite.c",
1007    "musl/src/stdio/__uflow.c",
1008    "musl/src/stdio/ungetc.c",
1009    "musl/src/stdio/ungetwc.c",
1010    "musl/src/stdio/vasprintf.c",
1011    "musl/src/stdio/vfwscanf.c",
1012    "musl/src/stdio/vprintf.c",
1013    "musl/src/stdio/vscanf.c",
1014    "musl/src/stdio/vsprintf.c",
1015    "musl/src/stdio/vwprintf.c",
1016    "musl/src/stdio/vwscanf.c",
1017    "musl/src/stdio/wprintf.c",
1018    "musl/src/stdio/wscanf.c",
1019    "musl/src/stdlib/atof.c",
1020    "musl/src/stdlib/atoi.c",
1021    "musl/src/stdlib/atol.c",
1022    "musl/src/stdlib/atoll.c",
1023    "musl/src/stdlib/bsearch.c",
1024    "musl/src/stdlib/div.c",
1025    "musl/src/stdlib/ecvt.c",
1026    "musl/src/stdlib/fcvt.c",
1027    "musl/src/stdlib/gcvt.c",
1028    "musl/src/stdlib/imaxdiv.c",
1029    "musl/src/stdlib/ldiv.c",
1030    "musl/src/stdlib/lldiv.c",
1031    "musl/src/stdlib/qsort.c",
1032    "musl/src/stdlib/qsort_nr.c",
1033    "musl/src/stdlib/strtol.c",
1034    "musl/src/string/bcmp.c",
1035    "musl/src/string/bcopy.c",
1036    "musl/src/string/explicit_bzero.c",
1037    "musl/src/string/index.c",
1038    "musl/src/string/memccpy.c",
1039    "musl/src/string/memmem.c",
1040    "musl/src/string/mempcpy.c",
1041    "musl/src/string/rindex.c",
1042    "musl/src/string/stpcpy.c",
1043    "musl/src/string/stpncpy.c",
1044    "musl/src/string/strcasestr.c",
1045    "musl/src/string/strcat.c",
1046    "musl/src/string/strchr.c",
1047    "musl/src/string/strcpy.c",
1048    "musl/src/string/strcspn.c",
1049    "musl/src/string/strdup.c",
1050    "musl/src/string/strerror_r.c",
1051    "musl/src/string/strlcat.c",
1052    "musl/src/string/strlcpy.c",
1053    "musl/src/string/strncat.c",
1054    "musl/src/string/strncpy.c",
1055    "musl/src/string/strndup.c",
1056    "musl/src/string/strnlen.c",
1057    "musl/src/string/strpbrk.c",
1058    "musl/src/string/strrchr.c",
1059    "musl/src/string/strsep.c",
1060    "musl/src/string/strspn.c",
1061    "musl/src/string/strstr.c",
1062    "musl/src/string/strtok.c",
1063    "musl/src/string/strtok_r.c",
1064    "musl/src/string/strverscmp.c",
1065    "musl/src/string/swab.c",
1066    "musl/src/string/wcpcpy.c",
1067    "musl/src/string/wcpncpy.c",
1068    "musl/src/string/wcscasecmp.c",
1069    "musl/src/string/wcscasecmp_l.c",
1070    "musl/src/string/wcscat.c",
1071    "musl/src/string/wcschr.c",
1072    "musl/src/string/wcscmp.c",
1073    "musl/src/string/wcscpy.c",
1074    "musl/src/string/wcscspn.c",
1075    "musl/src/string/wcsdup.c",
1076    "musl/src/string/wcslen.c",
1077    "musl/src/string/wcsncasecmp.c",
1078    "musl/src/string/wcsncasecmp_l.c",
1079    "musl/src/string/wcsncat.c",
1080    "musl/src/string/wcsncmp.c",
1081    "musl/src/string/wcsncpy.c",
1082    "musl/src/string/wcsnlen.c",
1083    "musl/src/string/wcspbrk.c",
1084    "musl/src/string/wcsrchr.c",
1085    "musl/src/string/wcsspn.c",
1086    "musl/src/string/wcsstr.c",
1087    "musl/src/string/wcstok.c",
1088    "musl/src/string/wcswcs.c",
1089    "musl/src/string/wmemchr.c",
1090    "musl/src/string/wmemcmp.c",
1091    "musl/src/string/wmemcpy.c",
1092    "musl/src/string/wmemmove.c",
1093    "musl/src/string/wmemset.c",
1094    "musl/src/thread/default_attr.c",
1095    "musl/src/thread/pthread_attr_destroy.c",
1096    "musl/src/thread/pthread_attr_init.c",
1097    "musl/src/thread/pthread_attr_setdetachstate.c",
1098    "musl/src/thread/pthread_attr_setstack.c",
1099    "musl/src/thread/pthread_attr_setstacksize.c",
1100    "musl/src/thread/pthread_barrierattr_destroy.c",
1101    "musl/src/thread/pthread_barrierattr_init.c",
1102    "musl/src/thread/pthread_barrierattr_setpshared.c",
1103    "musl/src/thread/pthread_cleanup_push.c",
1104    "musl/src/thread/pthread_condattr_destroy.c",
1105    "musl/src/thread/pthread_condattr_init.c",
1106    "musl/src/thread/pthread_condattr_setpshared.c",
1107    "musl/src/thread/pthread_equal.c",
1108    "musl/src/thread/pthread_getspecific.c",
1109    "musl/src/thread/pthread_mutexattr_destroy.c",
1110    "musl/src/thread/pthread_mutexattr_init.c",
1111    "musl/src/thread/pthread_mutexattr_setpshared.c",
1112    "musl/src/thread/pthread_mutexattr_settype.c",
1113    "musl/src/thread/pthread_mutex_init.c",
1114    "musl/src/thread/pthread_rwlockattr_destroy.c",
1115    "musl/src/thread/pthread_rwlockattr_init.c",
1116    "musl/src/thread/pthread_rwlockattr_setpshared.c",
1117    "musl/src/thread/pthread_rwlock_destroy.c",
1118    "musl/src/thread/pthread_rwlock_init.c",
1119    "musl/src/thread/pthread_setcancelstate.c",
1120    "musl/src/thread/pthread_setcanceltype.c",
1121    "musl/src/thread/pthread_setspecific.c",
1122    "musl/src/thread/pthread_spin_destroy.c",
1123    "musl/src/thread/pthread_spin_init.c",
1124    "musl/src/thread/pthread_testcancel.c",
1125    "musl/src/thread/thrd_sleep.c",
1126    "musl/src/time/asctime.c",
1127    "musl/src/time/asctime_r.c",
1128    "musl/src/time/ctime.c",
1129    "musl/src/time/ctime_r.c",
1130    "musl/src/time/difftime.c",
1131    "musl/src/time/ftime.c",
1132    "musl/src/time/__month_to_secs.c",
1133    "musl/src/time/strptime.c",
1134    "musl/src/time/timespec_get.c",
1135    "musl/src/time/__year_to_secs.c",
1136    "musl/src/unistd/posix_close.c",
1137
1138    "wasi/libc-top-half/musl/src/conf/fpathconf.c",
1139    "wasi/libc-top-half/musl/src/conf/sysconf.c",
1140    "wasi/libc-top-half/musl/src/dirent/alphasort.c",
1141    "wasi/libc-top-half/musl/src/dirent/versionsort.c",
1142    "wasi/libc-top-half/musl/src/env/clearenv.c",
1143    "wasi/libc-top-half/musl/src/env/getenv.c",
1144    "wasi/libc-top-half/musl/src/env/putenv.c",
1145    "wasi/libc-top-half/musl/src/env/__stack_chk_fail.c",
1146    "wasi/libc-top-half/musl/src/env/unsetenv.c",
1147    "wasi/libc-top-half/musl/src/errno/strerror.c",
1148    "wasi/libc-top-half/musl/src/exit/atexit.c",
1149    "wasi/libc-top-half/musl/src/exit/at_quick_exit.c",
1150    "wasi/libc-top-half/musl/src/exit/exit.c",
1151    "wasi/libc-top-half/musl/src/fcntl/creat.c",
1152    "wasi/libc-top-half/musl/src/internal/defsysinfo.c",
1153    "wasi/libc-top-half/musl/src/internal/floatscan.c",
1154    "wasi/libc-top-half/musl/src/internal/intscan.c",
1155    "wasi/libc-top-half/musl/src/internal/libc.c",
1156    "wasi/libc-top-half/musl/src/internal/shgetc.c",
1157    "wasi/libc-top-half/musl/src/locale/catclose.c",
1158    "wasi/libc-top-half/musl/src/locale/catgets.c",
1159    "wasi/libc-top-half/musl/src/locale/catopen.c",
1160    "wasi/libc-top-half/musl/src/locale/locale_map.c",
1161    "wasi/libc-top-half/musl/src/locale/newlocale.c",
1162    "wasi/libc-top-half/musl/src/locale/uselocale.c",
1163    "wasi/libc-top-half/musl/src/math/cosh.c",
1164    "wasi/libc-top-half/musl/src/math/coshf.c",
1165    "wasi/libc-top-half/musl/src/math/__expo2.c",
1166    "wasi/libc-top-half/musl/src/math/__expo2f.c",
1167    "wasi/libc-top-half/musl/src/math/fmal.c",
1168    "wasi/libc-top-half/musl/src/math/powl.c",
1169    "wasi/libc-top-half/musl/src/math/__rem_pio2.c",
1170    "wasi/libc-top-half/musl/src/math/__rem_pio2f.c",
1171    "wasi/libc-top-half/musl/src/math/__rem_pio2l.c",
1172    "wasi/libc-top-half/musl/src/math/sinh.c",
1173    "wasi/libc-top-half/musl/src/math/sinhf.c",
1174    "wasi/libc-top-half/musl/src/misc/fmtmsg.c",
1175    "wasi/libc-top-half/musl/src/misc/nftw.c",
1176    "wasi/libc-top-half/musl/src/misc/uname.c",
1177    "wasi/libc-top-half/musl/src/prng/random.c",
1178    "wasi/libc-top-half/musl/src/regex/glob.c",
1179    "wasi/libc-top-half/musl/src/regex/regcomp.c",
1180    "wasi/libc-top-half/musl/src/regex/regexec.c",
1181    "wasi/libc-top-half/musl/src/regex/tre-mem.c",
1182    "wasi/libc-top-half/musl/src/stat/futimesat.c",
1183    "wasi/libc-top-half/musl/src/stdio/__fdopen.c",
1184    "wasi/libc-top-half/musl/src/stdio/fgetc.c",
1185    "wasi/libc-top-half/musl/src/stdio/fgetpos.c",
1186    "wasi/libc-top-half/musl/src/stdio/fmemopen.c",
1187    "wasi/libc-top-half/musl/src/stdio/fopen.c",
1188    "wasi/libc-top-half/musl/src/stdio/__fopen_rb_ca.c",
1189    "wasi/libc-top-half/musl/src/stdio/fputc.c",
1190    "wasi/libc-top-half/musl/src/stdio/freopen.c",
1191    "wasi/libc-top-half/musl/src/stdio/fseek.c",
1192    "wasi/libc-top-half/musl/src/stdio/fsetpos.c",
1193    "wasi/libc-top-half/musl/src/stdio/ftell.c",
1194    "wasi/libc-top-half/musl/src/stdio/getc.c",
1195    "wasi/libc-top-half/musl/src/stdio/getchar.c",
1196    "wasi/libc-top-half/musl/src/stdio/ofl.c",
1197    "wasi/libc-top-half/musl/src/stdio/open_memstream.c",
1198    "wasi/libc-top-half/musl/src/stdio/open_wmemstream.c",
1199    "wasi/libc-top-half/musl/src/stdio/printf.c",
1200    "wasi/libc-top-half/musl/src/stdio/putc.c",
1201    "wasi/libc-top-half/musl/src/stdio/putchar.c",
1202    "wasi/libc-top-half/musl/src/stdio/stderr.c",
1203    "wasi/libc-top-half/musl/src/stdio/stdin.c",
1204    "wasi/libc-top-half/musl/src/stdio/__stdio_close.c",
1205    "wasi/libc-top-half/musl/src/stdio/__stdio_read.c",
1206    "wasi/libc-top-half/musl/src/stdio/__stdio_seek.c",
1207    "wasi/libc-top-half/musl/src/stdio/__stdio_write.c",
1208    "wasi/libc-top-half/musl/src/stdio/stdout.c",
1209    "wasi/libc-top-half/musl/src/stdio/__stdout_write.c",
1210    "wasi/libc-top-half/musl/src/stdio/vdprintf.c",
1211    "wasi/libc-top-half/musl/src/stdio/vfprintf.c",
1212    "wasi/libc-top-half/musl/src/stdio/vfscanf.c",
1213    "wasi/libc-top-half/musl/src/stdio/vfwprintf.c",
1214    "wasi/libc-top-half/musl/src/stdio/vsnprintf.c",
1215    "wasi/libc-top-half/musl/src/stdio/vsscanf.c",
1216    "wasi/libc-top-half/musl/src/stdio/vswprintf.c",
1217    "wasi/libc-top-half/musl/src/stdio/vswscanf.c",
1218    "wasi/libc-top-half/musl/src/stdlib/strtod.c",
1219    "wasi/libc-top-half/musl/src/stdlib/wcstod.c",
1220    "wasi/libc-top-half/musl/src/stdlib/wcstol.c",
1221    "wasi/libc-top-half/musl/src/string/memchr.c",
1222    "wasi/libc-top-half/musl/src/string/memrchr.c",
1223    "wasi/libc-top-half/musl/src/string/strchrnul.c",
1224    "wasi/libc-top-half/musl/src/thread/pthread_attr_get.c",
1225    "wasi/libc-top-half/musl/src/thread/pthread_attr_setguardsize.c",
1226    "wasi/libc-top-half/musl/src/thread/pthread_attr_setschedparam.c",
1227    "wasi/libc-top-half/musl/src/thread/pthread_cancel.c",
1228    "wasi/libc-top-half/musl/src/thread/pthread_condattr_setclock.c",
1229    "wasi/libc-top-half/musl/src/thread/pthread_key_create.c",
1230    "wasi/libc-top-half/musl/src/thread/pthread_mutexattr_setprotocol.c",
1231    "wasi/libc-top-half/musl/src/thread/pthread_mutexattr_setrobust.c",
1232    "wasi/libc-top-half/musl/src/thread/pthread_mutex_destroy.c",
1233    "wasi/libc-top-half/musl/src/thread/pthread_self.c",
1234    "wasi/libc-top-half/musl/src/time/getdate.c",
1235    "wasi/libc-top-half/musl/src/time/gmtime.c",
1236    "wasi/libc-top-half/musl/src/time/gmtime_r.c",
1237    "wasi/libc-top-half/musl/src/time/localtime.c",
1238    "wasi/libc-top-half/musl/src/time/localtime_r.c",
1239    "wasi/libc-top-half/musl/src/time/mktime.c",
1240    "wasi/libc-top-half/musl/src/time/__secs_to_tm.c",
1241    "wasi/libc-top-half/musl/src/time/strftime.c",
1242    "wasi/libc-top-half/musl/src/time/timegm.c",
1243    "wasi/libc-top-half/musl/src/time/__tm_to_secs.c",
1244    "wasi/libc-top-half/musl/src/time/__tz.c",
1245    "wasi/libc-top-half/musl/src/time/wcsftime.c",
1246
1247    "wasi/libc-top-half/sources/arc4random.c",
1248
1249    "wasi/thread-stub/pthread_barrier_destroy.c",
1250    "wasi/thread-stub/pthread_barrier_init.c",
1251    "wasi/thread-stub/pthread_barrier_wait.c",
1252    "wasi/thread-stub/pthread_cond_broadcast.c",
1253    "wasi/thread-stub/pthread_cond_destroy.c",
1254    "wasi/thread-stub/pthread_cond_init.c",
1255    "wasi/thread-stub/pthread_cond_signal.c",
1256    "wasi/thread-stub/pthread_cond_timedwait.c",
1257    "wasi/thread-stub/pthread_cond_wait.c",
1258    "wasi/thread-stub/pthread_create.c",
1259    "wasi/thread-stub/pthread_detach.c",
1260    "wasi/thread-stub/pthread_getattr_np.c",
1261    "wasi/thread-stub/pthread_join.c",
1262    "wasi/thread-stub/pthread_mutex_consistent.c",
1263    "wasi/thread-stub/pthread_mutex_getprioceiling.c",
1264    "wasi/thread-stub/pthread_mutex_lock.c",
1265    "wasi/thread-stub/pthread_mutex_timedlock.c",
1266    "wasi/thread-stub/pthread_mutex_trylock.c",
1267    "wasi/thread-stub/pthread_mutex_unlock.c",
1268    "wasi/thread-stub/pthread_once.c",
1269    "wasi/thread-stub/pthread_rwlock_rdlock.c",
1270    "wasi/thread-stub/pthread_rwlock_timedrdlock.c",
1271    "wasi/thread-stub/pthread_rwlock_timedwrlock.c",
1272    "wasi/thread-stub/pthread_rwlock_tryrdlock.c",
1273    "wasi/thread-stub/pthread_rwlock_trywrlock.c",
1274    "wasi/thread-stub/pthread_rwlock_unlock.c",
1275    "wasi/thread-stub/pthread_rwlock_wrlock.c",
1276    "wasi/thread-stub/pthread_spin_lock.c",
1277    "wasi/thread-stub/pthread_spin_trylock.c",
1278    "wasi/thread-stub/pthread_spin_unlock.c",
1279};
1280
1281const crt1_command_src_file = "wasi/libc-bottom-half/crt/crt1-command.c";
1282const crt1_reactor_src_file = "wasi/libc-bottom-half/crt/crt1-reactor.c";
1283
1284const fts_src_files = &[_][]const u8{
1285    "wasi/fts/musl-fts/fts.c",
1286};
1287
1288const setjmp_src_files = &[_][]const u8{
1289    "wasi/libc-top-half/musl/src/setjmp/wasm32/rt.c",
1290};
1291
1292const emulated_dl_src_files = &[_][]const u8{
1293    "wasi/libc-top-half/musl/src/misc/dl.c",
1294};
1295
1296const emulated_process_clocks_src_files = &[_][]const u8{
1297    "wasi/libc-bottom-half/clocks/clock.c",
1298    "wasi/libc-bottom-half/clocks/getrusage.c",
1299    "wasi/libc-bottom-half/clocks/times.c",
1300};
1301
1302const emulated_getpid_src_files = &[_][]const u8{
1303    "wasi/libc-bottom-half/getpid/getpid.c",
1304};
1305
1306const emulated_mman_src_files = &[_][]const u8{
1307    "wasi/libc-bottom-half/mman/mman.c",
1308};
1309
1310const emulated_signal_bottom_half_src_files = &[_][]const u8{
1311    "wasi/libc-bottom-half/signal/signal.c",
1312};
1313
1314const emulated_signal_top_half_src_files = &[_][]const u8{
1315    "musl/src/signal/psignal.c",
1316    "musl/src/string/strsignal.c",
1317};