smol-gilbraltar/nolibc/GNUmakefile

59 lines
1.6 KiB
Text
Raw Normal View History

2024-12-20 22:45:12 +00:00
ifeq ($(FREESTANDING_CFLAGS),)
$(error FREESTANDING_CFLAGS not set)
endif
all: libnolibc.a test-headers
.PHONY: all test-headers clean
clean:
$(RM) libnolibc.a *.o test-include/*.[co] test-include/sys/*.[co]
CC=cc
CFLAGS=-O2 -std=c99 -Wall -Wno-parentheses -Werror
CFLAGS+=$(FREESTANDING_CFLAGS)
OBJS=assert.o \
ctype.o \
dtoa.o \
errlist.o strerror_r.o \
memchr.o memcmp.o memcpy.o memmove.o memset.o \
strcmp.o strlen.o strnlen.o strtol.o strchr.o strchrnul.o strncpy.o stpncpy.o \
strstr.o strncmp.o puts.o \
stubs.o \
vfprintf.o vsnprintf.o snprintf.o fprintf.o printf.o \
sysconf.o \
mmap.o
SYSOBJS=sysdeps.o
dtoa.o: CFLAGS+=-fno-strict-aliasing
libnolibc.a: $(OBJS) $(SYSOBJS)
$(AR) rcs $@ $(OBJS) $(SYSOBJS)
# The following test ensures that each header file provided by nolibc is both
# self-contained and compile-tested. Note that headers in include/_freestanding
# are not intended to be included directly, thus are exempt from this check.
HEADERS=$(wildcard include/*.h include/sys/*.h)
# For each HEADER we want to test, produce test-include/HEADER.o. Note that
# HEADER will include subdirectories, if matched.
TEST_H_OBJS=$(patsubst %.h,test-%.o,$(HEADERS))
# For each HEADER we want to test, generate a C source file including only
# that HEADER. As above, HEADER may include subdirectories.
test-include/%.c: include/%.h | test-include/sys/
echo "#include \"../$<\"" >$@
.PRECIOUS: test-include/%.c
test-include/:
mkdir -p $@
test-include/sys/: test-include/
mkdir -p $@
test-headers: $(TEST_H_OBJS) | test-include/sys/