A 2D tile-based sandbox game.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Makefile 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. # Makefile generated by smake.
  2. PROJNAME = swan
  3. PROJTYPE = exe
  4. SRCS = src/Body.cc src/Chunk.cc src/Game.cc src/main.cc src/Player.cc src/WorldPlane.cc
  5. HDRS = src/Body.h src/Chunk.h src/common.h src/Game.h src/Player.h src/Tile.h src/WorldPlane.h
  6. OBJS = $(patsubst src/%,$(BUILD)/obj/%.o,$(SRCS))
  7. DEPS = $(patsubst src/%,$(BUILD)/dep/%.d,$(SRCS))
  8. PUBLICHDRS =
  9. # Defaults
  10. PKGS =
  11. EXTRADEPS =
  12. EXTRAPUBLICDEPS =
  13. CONFIG ?= release
  14. BUILDDIR ?= build
  15. BUILD ?= $(BUILDDIR)/$(CONFIG)
  16. WARNINGS = -Wall -Wextra -Wno-unused-parameter
  17. SMAKEFILE ?= Smakefile
  18. DESTDIR ?=
  19. PREFIX ?= /usr/local
  20. PHONIES = dumpdeps dumppublicdeps dumpprojtype clean cleanall
  21. CONFIGS = release sanitize debug
  22. PKG_CONFIG ?= pkg-config
  23. AR ?= ar
  24. CCOPTS = -Iinclude
  25. CCOPTS_release = -O2 -flto
  26. CCOPTS_debug = -g
  27. CCOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(CCOPTS_debug)
  28. LDOPTS =
  29. LDOPTS_release = -flto
  30. LDOPTS_debug =
  31. LDOPTS_sanitize = -fsanitize=address -fsanitize=undefined $(LDOPTS_debug)
  32. runpfx = @echo $(1) $(2) && $(2)
  33. .PHONY: all
  34. all: $(BUILD)/$(PROJNAME)
  35. -include $(SMAKEFILE)
  36. ifeq ($(filter $(CONFIGS),$(CONFIG)),)
  37. ifeq ($(filter cleanall,$(MAKECMDGOALS)),)
  38. $(error Unknown config '$(CONFIG)'. Supported configs: $(CONFIGS))
  39. endif
  40. endif
  41. ifneq ($(PKGS),)
  42. CCOPTS += $(shell $(PKG_CONFIG) --cflags $(PKGS))
  43. LDOPTS += $(shell $(PKG_CONFIG) --libs $(PKGS))
  44. endif
  45. CFLAGS := $(CCOPTS_$(CONFIG)) $(CCOPTS) $(WARNINGS) $(CFLAGS)
  46. CXXFLAGS := $(CCOPTS_$(CONFIG)) $(CCOPTS) $(WARNINGS) $(CXXFLAGS)
  47. LDFLAGS := $(LDOPTS_$(CONFIG)) $(LDOPTS) $(LDFLAGS)
  48. $(BUILD)/$(PROJNAME): $(OBJS)
  49. @mkdir -p $(@D)
  50. $(call runpfx,'(LD)',$(CC) -o $@ $(OBJS) $(LDFLAGS))
  51. touch $(BUILD)/.built
  52. @echo '(OK)' Created $@.
  53. $(PROJNAME): $(BUILD)/$(PROJNAME)
  54. cp $< $@
  55. @echo '(OK)' Created $@.
  56. $(BUILD)/obj/%.c.o: src/%.c $(EXTRAPUBLICDEPS)
  57. @mkdir -p $(@D)
  58. $(call runpfx,'(CC)',$(CC) -o $@ -c $< $(CFLAGS))
  59. $(BUILD)/obj/%.cc.o: src/%.cc $(EXTRAPUBLICDEPS)
  60. @mkdir -p $(@D)
  61. $(call runpfx,'(CXX)',$(CXX) -o $@ -c $< $(CXXFLAGS))
  62. $(BUILD)/dep/%.c.d: src/%.c $(HDRS)
  63. @mkdir -p $(@D)
  64. $(call runpfx,'(DEP)',$(CC) -o $@ -MM $< -MT $(patsubst src/%,$(BUILD)/obj/%.o,$<) $(CFLAGS))
  65. $(BUILD)/dep/%.cc.d: src/%.cc $(HDRS)
  66. @mkdir -p $(@D)
  67. $(call runpfx,'(DEP)',$(CXX) -o $@ -MM $< -MT $(patsubst src/%,$(BUILD)/obj/%.o,$<) $(CXXFLAGS))
  68. .PHONY: install
  69. install: $(BUILD)/$(PROJNAME)
  70. mkdir -p $(DESTDIR)$(PREFIX)/bin
  71. cp -f $^ $(DESTDIR)$(PREFIX)/bin
  72. chmod 755 $(DESTDIR)$(PREFIX)/bin/$(PROJNAME)
  73. .PHONY: uninstall
  74. uninstall:
  75. rm -f $(DESTDIR)$(PREFIX)/bin/$(PROJNAME)
  76. .PHONY: clean
  77. clean:
  78. rm -rf $(PROJNAME) $(BUILD)
  79. .PHONY: cleanall
  80. cleanall:
  81. rm -rf $(BUILDDIR)
  82. .PHONY: dumpdeps
  83. dumpdeps:
  84. @echo $(addprefix $(PREPEND),$(SRCS) $(HDRS) $(EXTRADEPS))
  85. .PHONY: dumppublicdeps
  86. dumppublicdeps:
  87. @echo $(addprefix $(PREPEND),$(PUBLICHDRS) $(EXTRAPUBLICDEPS))
  88. .PHONY: dumpprojtype
  89. dumpprojtype:
  90. @echo $(PROJTYPE)
  91. ifeq ($(filter $(PHONIES),$(MAKECMDGOALS)),)
  92. -include $(DEPS)
  93. endif