Advertisement
adfasdfadsfasdf

Untitled

Apr 13th, 2023
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. CXX = g++
  2. INCLUDES = -Isrc
  3. DEPFLAGS = -MMD -MP
  4. SRCDIR = src
  5. TESTDIR = tests
  6. TMPDIR = tmp
  7. EXE = midnight
  8.  
  9. LDFLAGS := -flto
  10. # recursive wildcard
  11. rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))
  12.  
  13. #windows find, assumes no spaces in dir names
  14. define wfind
  15. $(foreach d,$1,$(wildcard $d**/) $(call wfind,$(wildcard $d**/)))
  16. endef
  17.  
  18. # Detect Windows
  19. ifeq ($(OS), Windows_NT)
  20. MKDIR := mkdir
  21. uname_S := Windows
  22. SUFFIX := .exe
  23. SRC_DIRECTORIES := $(call wfind,$(SRCDIR)/)
  24. SRC_DIRECTORIES += $(call wfind,$(TESTDIR)/)
  25. SRC_DIRECTORIES := $(subst /,\\,$(SRC_DIRECTORIES))
  26. TMP_DIRS := $(addprefix $(TMPDIR)\,$(SRC_DIRECTORIES))
  27. #LDFLAGS := -flto -fuse-ld=lld-link
  28. else
  29. ifeq ($(COMP), MINGW)
  30. MKDIR := mkdir
  31. uname_S := Windows
  32. SUFFIX := .exe
  33. SRC_DIRECTORIES := $(call wfind,$(SRCDIR)/)
  34. SRC_DIRECTORIES += $(call wfind,$(TESTDIR)/)
  35. SRC_DIRECTORIES := $(subst /,\\,$(SRC_DIRECTORIES))
  36. TMP_DIRS := $(addprefix $(TMPDIR)\,$(SRC_DIRECTORIES))
  37. LDFLAGS := -flto
  38. else
  39. MKDIR := mkdir -p
  40. uname_S := $(shell uname -s)
  41. SUFFIX :=
  42. SRC_DIRECTORIES := $(shell find $(SRCDIR) -type d)
  43. SRC_DIRECTORIES += $(shell find $(TESTDIR) -type d)
  44. TMP_DIRS := $(addprefix $(TMPDIR)/,$(SRC_DIRECTORIES))
  45. endif
  46. endif
  47.  
  48. CXXFLAGS := -O3 -std=c++17 -march=native $(INCLUDES) -Wall -Wextra -pedantic -DNDEBUG
  49.  
  50. SRC_FILES := $(call rwildcard,$(SRCDIR)/,*.cpp)
  51.  
  52. ifeq ($(MAKECMDGOALS),tests)
  53. SRC_FILES := $(call rwildcard,$(SRCDIR)/,*.cpp)
  54. SRC_FILES += $(call rwildcard,$(TESTDIR)/,*.cpp)
  55. SRC_FILES := $(filter-out $(SRCDIR)/main.cpp, $(SRC_FILES))
  56. EXE = midnight-tests
  57. endif
  58.  
  59. TARGET = $(addsuffix $(SUFFIX),$(EXE))
  60.  
  61. OBJECTS := $(patsubst %.cpp,$(TMPDIR)/%.o,$(SRC_FILES))
  62. DEPENDS := $(patsubst %.cpp,$(TMPDIR)/%.d,$(SRC_FILES))
  63.  
  64. .PHONY: clean all tests FORCE
  65.  
  66. all: $(EXE)
  67. tests: $(EXE)
  68. $(EXE): $(OBJECTS)
  69. $(CXX) $(CXXFLAGS) -MMD -MP -o $(TARGET) $^ $(LDFLAGS)
  70.  
  71. $(TMPDIR)/%.o: %.cpp | $(TMPDIR)
  72. $(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@ $(LDFLAGS)
  73.  
  74. $(TMPDIR):
  75. $(MKDIR) $(TMP_DIRS)
  76.  
  77. clean:
  78. rm -rf $(TMPDIR)
  79.  
  80. -include $(DEPENDS)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement