Makefile 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. GCOV ?= gcov
  10. SRC += $(wildcard *.c bd/*.c)
  11. OBJ := $(SRC:.c=.o)
  12. DEP := $(SRC:.c=.d)
  13. ASM := $(SRC:.c=.s)
  14. ifdef DEBUG
  15. override CFLAGS += -O0 -g3
  16. else
  17. override CFLAGS += -Os
  18. endif
  19. ifdef WORD
  20. override CFLAGS += -m$(WORD)
  21. endif
  22. ifdef TRACE
  23. override CFLAGS += -DLFS_YES_TRACE
  24. endif
  25. override CFLAGS += -I.
  26. override CFLAGS += -std=c99 -Wall -pedantic
  27. override CFLAGS += -Wextra -Wshadow -Wjump-misses-init -Wundef
  28. ifdef VERBOSE
  29. override SCRIPTFLAGS += -v
  30. endif
  31. ifdef EXEC
  32. override TESTFLAGS += $(patsubst %,--exec=%,$(EXEC))
  33. endif
  34. ifdef COVERAGE
  35. override TESTFLAGS += --coverage
  36. endif
  37. all: $(TARGET)
  38. asm: $(ASM)
  39. size: $(OBJ)
  40. $(SIZE) -t $^
  41. code:
  42. ./scripts/code.py $(SCRIPTFLAGS)
  43. coverage:
  44. ./scripts/coverage.py $(SCRIPTFLAGS)
  45. test:
  46. ./scripts/test.py $(TESTFLAGS) $(SCRIPTFLAGS)
  47. .SECONDEXPANSION:
  48. test%: tests/test$$(firstword $$(subst \#, ,%)).toml
  49. ./scripts/test.py $@ $(TESTFLAGS) $(SCRIPTFLAGS)
  50. -include $(DEP)
  51. lfs: $(OBJ)
  52. $(CC) $(CFLAGS) $^ $(LFLAGS) -o $@
  53. %.a: $(OBJ)
  54. $(AR) rcs $@ $^
  55. %.o: %.c
  56. $(CC) -c -MMD $(CFLAGS) $< -o $@
  57. %.s: %.c
  58. $(CC) -S $(CFLAGS) $< -o $@
  59. %.gcda.gcov: %.gcda
  60. ( cd $(dir $@) ; $(GCOV) -ri $(notdir $<) )
  61. clean:
  62. rm -f $(TARGET)
  63. rm -f $(OBJ)
  64. rm -f $(DEP)
  65. rm -f $(ASM)
  66. rm -f tests/*.toml.*
  67. rm -f sizes/*
  68. rm -f results/*