Skip to content
Snippets Groups Projects
Makefile 2.56 KiB
Newer Older
# Binaries that should generate the same output every time
EXPECT_BINS=\
	args \
	arpainet \
	assert \
	ctype \
	error \
	fcntl/create \
	fcntl/fcntl \
	fnmatch \
	locale \
	math \
	select \
	setjmp \
	signal \
	stdio/all \
	stdio/setvbuf \
	stdio/freopen \
	stdio/fwrite \
	stdio/getc_unget \
	stdio/printf \
	stdio/rename \
	stdio/scanf \
	stdio/sprintf \
	stdlib/a64l \
	stdlib/atof \
	stdlib/atoi \
	stdlib/env \
	stdlib/mkostemps \
	stdlib/rand \
	stdlib/strtod \
	stdlib/strtol \
	stdlib/strtoul \
	stdlib/system \
	string/mem \
	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/mktime \
	time/strftime \
	time/time \
	unistd/access \
	unistd/brk \
	unistd/dup \
	unistd/exec \
	unistd/fchdir \
	unistd/fsync \
	unistd/ftruncate \
	unistd/getopt \
	unistd/isatty \
	unistd/pipe \
	unistd/rmdir \
	unistd/sleep \
	unistd/write \
	waitpid \
	wchar/mbrtowc \
	wchar/mbsrtowcs \
	wchar/putwchar \
	wchar/wcrtomb
# Binaries that may generate varied output
BINS=\
	$(EXPECT_BINS) \
	dirent \
	pwd \
	resource/getrusage \
	stdlib/alloc \
	stdlib/bsearch \
	stdlib/mktemp \
	time/gettimeofday \
	time/times \
	unistd/chdir \
	unistd/getcwd \
	unistd/gethostname \
	unistd/getid \
	unistd/link \
	unistd/setid \
	unistd/stat

.PHONY: all $(BINS) clean run expected verify
all: $(BINS)
Jeremy Soller's avatar
Jeremy Soller committed
clean:
	rm -rf bins gen *.out
run: $(BINS)
Paul Sajna's avatar
Paul Sajna committed
	do \
		echo "# $${bin} #"; \
		"bins/$${bin}" test args || exit $$?; \
expected: $(EXPECT_BINS)
	rm -rf expected
Jeremy Soller's avatar
Jeremy Soller committed
	mkdir -p expected
	do \
		echo "# $${bin} #"; \
Alex Lyon's avatar
Alex Lyon committed
		mkdir -p expected/`dirname $${bin}`; \
		"bins/$${bin}" test args > "expected/$${bin}.stdout" 2> "expected/$${bin}.stderr" || exit $$?; \
verify: $(EXPECT_BINS)
	rm -rf gen
	mkdir -p gen
	do \
		echo "# $${bin} #"; \
Alex Lyon's avatar
Alex Lyon committed
		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 $$?; \
Jeremy Soller's avatar
Jeremy Soller committed

Jeremy Soller's avatar
Jeremy Soller committed
CFLAGS=\
	-fno-builtin \
	-fno-stack-protector \
	-Wall \
	-g \
Jeremy Soller's avatar
Jeremy Soller committed
	-nostdinc \
	-nostdlib \
	-isystem ../sysroot/include
Jeremy Soller's avatar
Jeremy Soller committed

HEADLIBS=\
	../sysroot/lib/crt0.o
Jeremy Soller's avatar
Jeremy Soller committed

Jeremy Soller's avatar
Jeremy Soller committed
TAILLIBS=\
	../sysroot/lib/libc.a \
	../sysroot/lib/libm.a
Jeremy Soller's avatar
Jeremy Soller committed

../sysroot:
	make -C .. sysroot

bins/%: %.c ../sysroot
	mkdir -p "$$(dirname "$@")"
	$(CC) $(CFLAGS) $(HEADLIBS) "$<" $(TAILLIBS) -o "$@"