rules.mk 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. .PHONY: format clean all run versionning cflags release bundle
  2. all: $(EXE)
  3. include $(wildcard */rules.mk)
  4. MISC_FILES=$(wildcard bundle_files/*)
  5. RELEASE_DIRECTORY=release/$(PLATFORM)
  6. RELEASE_FILES=$(addprefix $(RELEASE_DIRECTORY)/, $(addsuffix $(DATA_FILE_SUFFIX), $(wildcard data/*)))
  7. RELEASE_MISC_FILES=$(addprefix $(RELEASE_DIRECTORY)/, $(notdir $(MISC_FILES)))
  8. # Object dependency files
  9. -include $(OBJS:%.o=%.d)
  10. $(OUT)/%.o: %.c | $(BUILT_SRCS)
  11. @echo "CC: $@"
  12. @mkdir -p $(dir $@)
  13. @$(CC) $(CFLAGS) -c $< -o $@
  14. %.o: %.c | $(BUILT_SRCS)
  15. @echo "CC: $@"
  16. @$(CC) $(CFLAGS) -c $< -o $@
  17. $(OUT)/%.o: %.cpp | $(BUILT_SRCS)
  18. @echo "CPP: $@"
  19. @mkdir -p $(dir $@)
  20. @$(CPP) $(CPPFLAGS) -c $< -o $@
  21. %.o: %.cpp | $(BUILT_SRCS)
  22. @echo "CPP: $@"
  23. @$(CPP) $(CPPFLAGS) -c $< -o $@
  24. $(ELF): $(OBJS)
  25. @mkdir -p $(dir $@)
  26. @echo "CCLD: $@"
  27. @+$(CC) $(LDFLAGS) $^ -o $(ELF)
  28. clean:
  29. @echo "RM: $(OUT)"
  30. @rm -rf $(OUT)
  31. @echo "RM : $(RELEASE_DIRECTORY)"
  32. @rm -rf $(RELEASE_DIRECTORY)
  33. make_release_dirs:
  34. @mkdir -p "$(RELEASE_DIRECTORY)/data"
  35. # Data files
  36. $(RELEASE_DIRECTORY)/%$(DATA_FILE_SUFFIX) : % | make_release_dirs
  37. @echo "$^ => $@"
  38. @cp -u "$^" "$@"
  39. # Misc bundle files
  40. $(RELEASE_DIRECTORY)/% : bundle_files/% | make_release_dirs
  41. @echo "$^ => $@"
  42. @cp -u "$^" "$@"
  43. # Executable
  44. $(RELEASE_DIRECTORY)/$(notdir $(EXE)): $(EXE)
  45. @echo "$^ => $@"
  46. @cp -u "$^" "$@"
  47. release: $(EXE) $(RELEASE_FILES) $(RELEASE_MISC_FILES) $(RELEASE_DIRECTORY)/$(notdir $(EXE))
  48. bundle: release
  49. @echo "Tar-zipping"
  50. @tar cf "$(RELEASE_DIRECTORY).tar" "$(RELEASE_DIRECTORY)"
  51. @gzip "$(RELEASE_DIRECTORY).tar" -f
  52. @echo "Archive ready at $(RELEASE_DIRECTORY).tar.gz"
  53. format:
  54. @echo "Formatting source using clang-format"
  55. @clang-format -i -style=file $(shell git ls-files -c -o --exclude-standard *.c *.cpp *.h)
  56. cflags:
  57. @echo -n $(CPPFLAGS) $(YCM_EXTRA_CFLAGS)
  58. .FORCE: