build: wire W5/W6 sources and tests

This commit is contained in:
2026-09-05 22:42:23 -04:00
parent ed996ff4c4
commit d495d3eb89
+178 -11
View File
@@ -15,9 +15,22 @@ AM_CFLAGS = @VLIBC_CFLAGS@
# appended to libvlibc_la_SOURCES WHEN ITS TODO LANDS — the list grows # appended to libvlibc_la_SOURCES WHEN ITS TODO LANDS — the list grows
# incrementally and never references a directory that does not exist yet: # incrementally and never references a directory that does not exist yet:
# #
# W1 (wired now): src/internal, src/start, src/errno, # Wired so far (W1-W3 + W5/W6 slices, each wired when its todo landed):
# src/setjmp/x86_64, src/string, crt/ (crt1.o) # src/internal, src/start, src/errno,
# todo 7 src/malloc todo 39-42 src/math todo 50 src/multibyte # src/setjmp/x86_64, src/string, crt/ (crt1.o),
# src/malloc (todo 7), src/ctype (todo 9,51),
# src/stdlib (todo 11-14, incl. the 13 env slice),
# src/unistd (todo 19), src/process (todo 20,23),
# src/fcntl (todo 21), src/stat (todo 22),
# src/dirent (todo 24), src/select (todo 25),
# src/time (todo 26; todo 27 sys/time is a
# follow-up — gettimeofday/settimeofday/
# getitimer/setitimer/utimes.c + sys/time.h
# landed after this wiring), src/stdio (todo
# 15-18 FILE core + popen; vfprintf.c/
# vfprintf_float.c still to wire with the
# printf test)
# todo 39-42 src/math todo 50 src/multibyte
# todo 11-14 src/stdlib todo 43 src/complex todo 53-54 src/regex # todo 11-14 src/stdlib todo 43 src/complex todo 53-54 src/regex
# todo 15-18 src/stdio todo 9,51 src/ctype todo 57-58 src/network # todo 15-18 src/stdio todo 9,51 src/ctype todo 57-58 src/network
# todo 19,38 src/unistd todo 55 src/search todo 59 src/mq # todo 19,38 src/unistd todo 55 src/search todo 59 src/mq
@@ -41,6 +54,14 @@ AM_CFLAGS = @VLIBC_CFLAGS@
# standalone crt1.o below (the sole crt owner; todo 64 reuses, never rebuilds). # standalone crt1.o below (the sole crt owner; todo 64 reuses, never rebuilds).
# Level-independent L1 core (wired today + the pre-plan string slice). # Level-independent L1 core (wired today + the pre-plan string slice).
# W5/W6 additions follow the established split rule: whole-content-L2 TUs
# (lockf, mknod, readdir_r/scandir/alphasort, ppoll, strptime/timer) go to
# VLIBC_LEVEL2_SRCS; L1 bodies with L2 sections self-gated inside the .c
# (fork.c vfork, groups.c setgroups, session.c tail, wait.c wait3/wait4,
# time ctime/mktime/nanosleep/strftime/tzset L2 tails, stdio.c L2 tail,
# unistd lseek64/dup3/pipe2/truncate) stay in CORE. task-19's unistd dir is
# CORE throughout (self-gated L2 sections, no whole-file gate). T27's
# sys/time slice is NOT yet wired (uncommitted at wiring time).
VLIBC_CORE_SRCS = \ VLIBC_CORE_SRCS = \
src/vlibc.c \ src/vlibc.c \
src/internal/assert_fail.c \ src/internal/assert_fail.c \
@@ -85,7 +106,69 @@ VLIBC_CORE_SRCS = \
src/stdlib/inttypes.c \ src/stdlib/inttypes.c \
src/stdlib/env.c \ src/stdlib/env.c \
src/stdlib/multibyte.c \ src/stdlib/multibyte.c \
src/stdlib/mkstemp.c src/stdlib/mkstemp.c \
src/stdio/stdio.c \
src/stdio/fmemopen.c \
src/stdio/getline.c \
src/stdio/locking.c \
src/stdio/popen.c \
src/stdio/vfscanf.c \
src/unistd/access.c \
src/unistd/close.c \
src/unistd/dup.c \
src/unistd/fsync.c \
src/unistd/lseek.c \
src/unistd/open.c \
src/unistd/pipe.c \
src/unistd/pread.c \
src/unistd/rw.c \
src/unistd/sync.c \
src/unistd/truncate.c \
src/process/atfork.c \
src/process/execl.c \
src/process/execle.c \
src/process/execlp.c \
src/process/execv.c \
src/process/execve.c \
src/process/execvp.c \
src/process/fork.c \
src/process/groups.c \
src/process/pid.c \
src/process/session.c \
src/process/system.c \
src/process/uid.c \
src/process/wait.c \
src/fcntl/creat.c \
src/fcntl/fcntl.c \
src/fcntl/posix_fadvise.c \
src/fcntl/posix_fallocate.c \
src/stat/chmod.c \
src/stat/chown.c \
src/stat/fstatat.c \
src/stat/mkdir.c \
src/stat/mkfifo.c \
src/stat/umask.c \
src/stat/utimensat.c \
src/dirent/closedir.c \
src/dirent/dirfd.c \
src/dirent/fdopendir.c \
src/dirent/opendir.c \
src/dirent/readdir.c \
src/dirent/rewinddir.c \
src/dirent/seekdir.c \
src/dirent/telldir.c \
src/select/poll.c \
src/select/pselect.c \
src/select/select.c \
src/time/time.c \
src/time/clock.c \
src/time/timespec_get.c \
src/time/sleep.c \
src/time/nanosleep.c \
src/time/mktime.c \
src/time/ctime.c \
src/time/tzset.c \
src/time/strftime.c
# Profile-gated sources, EXISTING gates preserved (strlcpy/strlcat stay L2 # Profile-gated sources, EXISTING gates preserved (strlcpy/strlcat stay L2
# BSD, strcasestr stays L3 GNU — NOT promoted). Task 8/9 additions: stpcpy.c # BSD, strcasestr stays L3 GNU — NOT promoted). Task 8/9 additions: stpcpy.c
@@ -100,11 +183,20 @@ VLIBC_CORE_SRCS = \
# and self-gate at level 1. Likewise rand.c (its L2 rand_r/drand48 section) # and self-gate at level 1. Likewise rand.c (its L2 rand_r/drand48 section)
# and the strtox/strtod/inttypes/div/qsort C files (their L2 gates live in # and the strtox/strtod/inttypes/div/qsort C files (their L2 gates live in
# include/stdlib.h / include/inttypes.h declarations) stay in VLIBC_CORE_SRCS. # include/stdlib.h / include/inttypes.h declarations) stay in VLIBC_CORE_SRCS.
# W5/W6 whole-file-L2 joins (verified by reading each .c — the #if
# VLIBC_LEVEL_GE(2) wraps the whole body after the includes): lockf.c (XSI),
# mknod.c (XSI), readdir_r.c/scandir.c/alphasort.c (XSI dirent), ppoll.c
# (Linux), strptime.c/timer.c (POSIX timers), plus the earlier strings slice.
VLIBC_LEVEL2_SRCS = src/string/strlcpy.c src/string/strlcat.c \ VLIBC_LEVEL2_SRCS = src/string/strlcpy.c src/string/strlcat.c \
src/string/stpcpy.c src/string/memccpy.c \ src/string/stpcpy.c src/string/memccpy.c \
src/ctype/isascii.c src/ctype/toascii.c \ src/ctype/isascii.c src/ctype/toascii.c \
src/string/strings_impl.c \ src/string/strings_impl.c \
src/stdlib/pty.c src/stdlib/getsubopt.c src/stdlib/pty.c src/stdlib/getsubopt.c \
src/fcntl/lockf.c \
src/stat/mknod.c \
src/dirent/readdir_r.c src/dirent/scandir.c src/dirent/alphasort.c \
src/select/ppoll.c \
src/time/strptime.c src/time/timer.c
VLIBC_LEVEL3_SRCS = src/string/strcasestr.c VLIBC_LEVEL3_SRCS = src/string/strcasestr.c
vlibc_lib_LTLIBRARIES = libvlibc.la vlibc_lib_LTLIBRARIES = libvlibc.la
@@ -149,7 +241,16 @@ vlibc_include_HEADERS = \
include/tgmath.h \ include/tgmath.h \
include/threads.h \ include/threads.h \
include/uchar.h \ include/uchar.h \
include/sys/types.h include/dirent.h \
include/fcntl.h \
include/poll.h \
include/stdio.h \
include/time.h \
include/unistd.h \
include/sys/select.h \
include/sys/stat.h \
include/sys/types.h \
include/sys/wait.h
# Install location depends on the install method (see configure.ac). # Install location depends on the install method (see configure.ac).
if INSTALL_OVERWRITE if INSTALL_OVERWRITE
@@ -278,7 +379,9 @@ VLIBC_TEST_CFLAGS = -DVLIBC_LEVEL=$(VLIBC_TEST_LEVEL) -fno-stack-protector \
check_PROGRAMS = test_syscall test_strerror test_setjmp test_headers \ check_PROGRAMS = test_syscall test_strerror test_setjmp test_headers \
test_startup test_malloc test_string test_ctype test_strings \ test_startup test_malloc test_string test_ctype test_strings \
test_strtol test_qsort test_inttypes test_env test_strtol test_qsort test_inttypes test_env \
test_process test_fcntl test_stat test_wait test_dirent \
test_poll test_time test_scanf test_getline
test_syscall_SOURCES = tests/syscall_test.c test_syscall_SOURCES = tests/syscall_test.c
test_syscall_CFLAGS = $(VLIBC_TEST_CFLAGS) test_syscall_CFLAGS = $(VLIBC_TEST_CFLAGS)
@@ -358,15 +461,73 @@ test_env_DEPENDENCIES = crt1.o libvlibc-check.a
test_env_LINK = $(VLIBC_TEST_LINK) test_env_LINK = $(VLIBC_TEST_LINK)
test_env_LDADD = $(VLIBC_TEST_LDADD) test_env_LDADD = $(VLIBC_TEST_LDADD)
test_process_SOURCES = tests/test_process.c
test_process_CFLAGS = $(VLIBC_TEST_CFLAGS)
test_process_DEPENDENCIES = crt1.o libvlibc-check.a
test_process_LINK = $(VLIBC_TEST_LINK)
test_process_LDADD = $(VLIBC_TEST_LDADD)
test_fcntl_SOURCES = tests/test_fcntl.c
test_fcntl_CFLAGS = $(VLIBC_TEST_CFLAGS)
test_fcntl_DEPENDENCIES = crt1.o libvlibc-check.a
test_fcntl_LINK = $(VLIBC_TEST_LINK)
test_fcntl_LDADD = $(VLIBC_TEST_LDADD)
test_stat_SOURCES = tests/test_stat.c
test_stat_CFLAGS = $(VLIBC_TEST_CFLAGS)
test_stat_DEPENDENCIES = crt1.o libvlibc-check.a
test_stat_LINK = $(VLIBC_TEST_LINK)
test_stat_LDADD = $(VLIBC_TEST_LDADD)
test_wait_SOURCES = tests/test_wait.c
test_wait_CFLAGS = $(VLIBC_TEST_CFLAGS)
test_wait_DEPENDENCIES = crt1.o libvlibc-check.a
test_wait_LINK = $(VLIBC_TEST_LINK)
test_wait_LDADD = $(VLIBC_TEST_LDADD)
test_dirent_SOURCES = tests/test_dirent.c
test_dirent_CFLAGS = $(VLIBC_TEST_CFLAGS)
test_dirent_DEPENDENCIES = crt1.o libvlibc-check.a
test_dirent_LINK = $(VLIBC_TEST_LINK)
test_dirent_LDADD = $(VLIBC_TEST_LDADD)
test_poll_SOURCES = tests/test_poll.c
test_poll_CFLAGS = $(VLIBC_TEST_CFLAGS)
test_poll_DEPENDENCIES = crt1.o libvlibc-check.a
test_poll_LINK = $(VLIBC_TEST_LINK)
test_poll_LDADD = $(VLIBC_TEST_LDADD)
test_time_SOURCES = tests/test_time.c
test_time_CFLAGS = $(VLIBC_TEST_CFLAGS)
test_time_DEPENDENCIES = crt1.o libvlibc-check.a
test_time_LINK = $(VLIBC_TEST_LINK)
test_time_LDADD = $(VLIBC_TEST_LDADD)
test_scanf_SOURCES = tests/test_scanf.c
test_scanf_CFLAGS = $(VLIBC_TEST_CFLAGS)
test_scanf_DEPENDENCIES = crt1.o libvlibc-check.a
test_scanf_LINK = $(VLIBC_TEST_LINK)
test_scanf_LDADD = $(VLIBC_TEST_LDADD)
test_getline_SOURCES = tests/test_getline.c
test_getline_CFLAGS = $(VLIBC_TEST_CFLAGS)
test_getline_DEPENDENCIES = crt1.o libvlibc-check.a
test_getline_LINK = $(VLIBC_TEST_LINK)
test_getline_LDADD = $(VLIBC_TEST_LDADD)
# test_startup's default mode exits 42 by design, so it is NOT a bare TESTS # test_startup's default mode exits 42 by design, so it is NOT a bare TESTS
# entry; tests/startup_modes.sh runs its full mode matrix and the -f failure # entry; tests/startup_modes.sh runs its full mode matrix and the -f failure
# scenarios of the other binaries. test_malloc/test_string/test_ctype/ # scenarios of the other binaries. test_malloc/test_string/test_ctype/
# test_strings/test_strtol/test_qsort/test_inttypes/test_env default to the # test_strings/test_strtol/test_qsort/test_inttypes/test_env and the W5/W6
# happy mode (exit 0 on all-pass) and are bare TESTS entries; their -f/-p # wave tests (test_process/test_fcntl/test_stat/test_wait/test_dirent/
# modes stay runnable by hand. # test_poll/test_time/test_scanf/test_getline) default to the happy mode
# (exit 0 on all-pass) and are bare TESTS entries; their -f/-p modes stay
# runnable by hand.
TESTS = test_syscall test_strerror test_setjmp test_headers \ TESTS = test_syscall test_strerror test_setjmp test_headers \
test_malloc test_string test_ctype test_strings \ test_malloc test_string test_ctype test_strings \
test_strtol test_qsort test_inttypes test_env \ test_strtol test_qsort test_inttypes test_env \
test_process test_fcntl test_stat test_wait test_dirent \
test_poll test_time test_scanf test_getline \
tests/startup_modes.sh tests/startup_modes.sh
CLEANFILES = crt1.o libvlibc-check.a $(VLIBC_CHECK_OBJECTS) CLEANFILES = crt1.o libvlibc-check.a $(VLIBC_CHECK_OBJECTS)
@@ -387,4 +548,10 @@ EXTRA_DIST = \
src/internal/syscall.h \ src/internal/syscall.h \
src/internal/types.h \ src/internal/types.h \
src/start/start.h \ src/start/start.h \
src/start/tcb.h src/start/tcb.h \
src/dirent/dirent_impl.h \
src/process/atfork_impl.h \
src/stat/stat_impl.h \
src/stdio/stdio_impl.h \
src/time/time_impl.h \
src/unistd/unistd_impl.h