Makefile 1.4 KB

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