Makefile 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. TARGET = lfs.a
  2. ifneq ($(wildcard test.c main.c),)
  3. override TARGET = lfs
  4. endif
  5. CC ?= gcc
  6. AR ?= ar
  7. SIZE ?= size
  8. NM ?= nm
  9. SRC += $(wildcard *.c bd/*.c)
  10. OBJ := $(SRC:.c=.o)
  11. DEP := $(SRC:.c=.d)
  12. ASM := $(SRC:.c=.s)
  13. ifdef DEBUG
  14. override CFLAGS += -O0 -g3
  15. else
  16. override CFLAGS += -Os
  17. endif
  18. ifdef WORD
  19. override CFLAGS += -m$(WORD)
  20. endif
  21. ifdef TRACE
  22. override CFLAGS += -DLFS_YES_TRACE
  23. endif
  24. override CFLAGS += -I.
  25. override CFLAGS += -std=c99 -Wall -pedantic
  26. override CFLAGS += -Wextra -Wshadow -Wjump-misses-init -Wundef
  27. ifdef VERBOSE
  28. override SCRIPTFLAGS += -v
  29. endif
  30. all: $(TARGET)
  31. asm: $(ASM)
  32. size: $(OBJ)
  33. $(SIZE) -t $^
  34. code:
  35. ./scripts/code.py $(SCRIPTFLAGS)
  36. test:
  37. ./scripts/test.py $(EXEC:%=--exec=%) $(SCRIPTFLAGS)
  38. .SECONDEXPANSION:
  39. test%: tests/test$$(firstword $$(subst \#, ,%)).toml
  40. ./scripts/test.py $@ $(EXEC:%=--exec=%) $(SCRIPTFLAGS)
  41. -include $(DEP)
  42. lfs: $(OBJ)
  43. $(CC) $(CFLAGS) $^ $(LFLAGS) -o $@
  44. %.a: $(OBJ)
  45. $(AR) rcs $@ $^
  46. %.o: %.c
  47. $(CC) -c -MMD $(CFLAGS) $< -o $@
  48. %.s: %.c
  49. $(CC) -S $(CFLAGS) $< -o $@
  50. clean:
  51. rm -f $(TARGET)
  52. rm -f $(OBJ)
  53. rm -f $(DEP)
  54. rm -f $(ASM)
  55. rm -f tests/*.toml.*
  56. rm -f sizes/*