123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- # Binaries that should generate the same output every time
- EXPECT_BINS=\
- alloca \
- args \
- arpainet \
- assert \
- constructor \
- ctype \
- destructor \
- dirent/scandir \
- error \
- fcntl/create \
- fcntl/fcntl \
- fnmatch \
- libgen \
- locale \
- math \
- netdb/netdb \
- netdb/getaddrinfo \
- regex \
- select \
- setjmp \
- signal \
- stdio/all \
- stdio/buffer \
- stdio/fgets \
- stdio/fputs \
- stdio/fread \
- stdio/freopen \
- stdio/fseek \
- stdio/fwrite \
- stdio/getc_unget \
- stdio/mutex \
- stdio/popen \
- stdio/printf \
- stdio/rename \
- stdio/scanf \
- stdio/setvbuf \
- stdio/sprintf \
- stdlib/a64l \
- stdlib/atof \
- stdlib/atoi \
- stdlib/div \
- stdlib/env \
- stdlib/mkostemps \
- stdlib/rand \
- stdlib/strtod \
- stdlib/strtol \
- stdlib/strtoul \
- stdlib/system \
- string/mem \
- string/strcat \
- string/strchr \
- string/strcpy \
- string/strcspn \
- string/strncmp \
- string/strpbrk \
- string/strrchr \
- string/strspn \
- string/strstr \
- string/strtok \
- string/strtok_r \
- strings \
- time/asctime \
- time/gmtime \
- time/localtime \
- time/macros \
- time/mktime \
- time/strftime \
- time/time \
- unistd/access \
- unistd/brk \
- unistd/dup \
- unistd/exec \
- unistd/fchdir \
- unistd/fsync \
- unistd/ftruncate \
- unistd/getopt \
- unistd/getopt_long \
- unistd/isatty \
- unistd/pipe \
- unistd/rmdir \
- unistd/sleep \
- unistd/swab \
- unistd/write \
- waitpid \
- wchar/mbrtowc \
- wchar/mbsrtowcs \
- wchar/putwchar \
- wchar/wcrtomb \
- wchar/wcscspn \
- wchar/wcsrchr
- # Binaries that may generate varied output
- BINS=\
- $(EXPECT_BINS) \
- dirent/main \
- pwd \
- stdlib/alloc \
- stdlib/bsearch \
- stdlib/mktemp \
- stdlib/realpath \
- sys_utsname/uname \
- time/gettimeofday \
- unistd/chdir \
- unistd/getcwd \
- unistd/gethostname \
- unistd/getid \
- unistd/link \
- unistd/pathconf \
- unistd/setid \
- unistd/stat \
- unistd/sysconf
- # resource/getrusage
- # time/times
- .PHONY: all $(BINS) clean run expected verify
- all: $(BINS)
- $(BINS): %: bins/%
- clean:
- rm -rf bins gen *.out
- run: | ../sysroot all
- for bin in $(BINS); \
- do \
- echo "# $${bin} #"; \
- "bins/$${bin}" test args || exit $$?; \
- done
- expected: | ../sysroot $(EXPECT_BINS)
- rm -rf expected
- mkdir -p expected
- for bin in $(EXPECT_BINS); \
- do \
- echo "# $${bin} #"; \
- mkdir -p expected/`dirname $${bin}`; \
- "bins/$${bin}" test args > "expected/$${bin}.stdout" 2> "expected/$${bin}.stderr" || exit $$?; \
- done
- verify: | ../sysroot $(EXPECT_BINS)
- rm -rf gen
- mkdir -p gen
- for bin in $(EXPECT_BINS); \
- do \
- echo "# $${bin} #"; \
- mkdir -p gen/`dirname $${bin}`; \
- "bins/$${bin}" test args > "gen/$${bin}.stdout" 2> "gen/$${bin}.stderr" || exit $$?; \
- diff -u "gen/$${bin}.stdout" "expected/$${bin}.stdout" || exit $$?; \
- diff -u "gen/$${bin}.stderr" "expected/$${bin}.stderr" || exit $$?; \
- done
- CFLAGS=\
- -std=c11 \
- -fno-builtin \
- -fno-stack-protector \
- -static \
- -Wall \
- -pedantic \
- -g \
- -nostdinc \
- -nostdlib \
- -isystem ../sysroot/include \
- -I .
- HEADLIBS=\
- ../sysroot/lib/crt0.o \
- ../sysroot/lib/crti.o
- TAILLIBS=\
- ../sysroot/lib/libc.a \
- ../sysroot/lib/crtn.o
- ../sysroot:
- make -C .. sysroot
- bins/%: %.c ../sysroot
- mkdir -p "$$(dirname "$@")"
- $(CC) $(CFLAGS) $(HEADLIBS) "$<" $(TAILLIBS) -o "$@"
|