| TARGET = lfs.a |
| ifneq ($(wildcard test.c main.c),) |
| override TARGET = lfs |
| endif |
| |
| CC ?= gcc |
| AR ?= ar |
| SIZE ?= size |
| |
| SRC += $(wildcard *.c emubd/*.c) |
| OBJ := $(SRC:.c=.o) |
| DEP := $(SRC:.c=.d) |
| ASM := $(SRC:.c=.s) |
| |
| TEST := $(patsubst tests/%.sh,%,$(wildcard tests/test_*)) |
| |
| SHELL = /bin/bash -o pipefail |
| |
| ifdef DEBUG |
| override CFLAGS += -O0 -g3 |
| else |
| override CFLAGS += -Os |
| endif |
| ifdef WORD |
| override CFLAGS += -m$(WORD) |
| endif |
| ifdef TRACE |
| override CFLAGS += -DLFS_YES_TRACE |
| endif |
| override CFLAGS += -I. |
| override CFLAGS += -std=c99 -Wall -pedantic |
| override CFLAGS += -Wextra -Wshadow -Wjump-misses-init -Wundef |
| # Remove missing-field-initializers because of GCC bug |
| override CFLAGS += -Wno-missing-field-initializers |
| |
| |
| all: $(TARGET) |
| |
| asm: $(ASM) |
| |
| size: $(OBJ) |
| $(SIZE) -t $^ |
| |
| .SUFFIXES: |
| test: \ |
| test_format \ |
| test_dirs \ |
| test_files \ |
| test_seek \ |
| test_truncate \ |
| test_entries \ |
| test_interspersed \ |
| test_alloc \ |
| test_paths \ |
| test_attrs \ |
| test_move \ |
| test_orphan \ |
| test_corrupt |
| @rm test.c |
| test_%: tests/test_%.sh |
| |
| ifdef QUIET |
| @./$< | sed -nu '/^[-=]/p' |
| else |
| ./$< |
| endif |
| |
| -include $(DEP) |
| |
| lfs: $(OBJ) |
| $(CC) $(CFLAGS) $^ $(LFLAGS) -o $@ |
| |
| %.a: $(OBJ) |
| $(AR) rcs $@ $^ |
| |
| %.o: %.c |
| $(CC) -c -MMD $(CFLAGS) $< -o $@ |
| |
| %.s: %.c |
| $(CC) -S $(CFLAGS) $< -o $@ |
| |
| clean: |
| rm -f $(TARGET) |
| rm -f $(OBJ) |
| rm -f $(DEP) |
| rm -f $(ASM) |