Advertisement
adfasdfadsfasdf

Untitled

Apr 13th, 2023
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 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. SRC_DIRECTORIES := $(subst \ , ,$(SRC_DIRECTORIES))
  27. TMP_DIRS := $(addprefix $(TMPDIR)\,$(SRC_DIRECTORIES))
  28. LDFLAGS := -flto -fuse-ld=lld-link
  29. else
  30. ifeq ($(COMP), MINGW)
  31. MKDIR := mkdir
  32. uname_S := Windows
  33. SUFFIX := .exe
  34. SRC_DIRECTORIES := $(call wfind,$(SRCDIR)/)
  35. SRC_DIRECTORIES += $(call wfind,$(TESTDIR)/)
  36. SRC_DIRECTORIES := $(subst /,\,$(SRC_DIRECTORIES))
  37. SRC_DIRECTORIES := $(subst \ , ,$(SRC_DIRECTORIES))
  38. TMP_DIRS := $(addprefix $(TMPDIR)\,$(SRC_DIRECTORIES))
  39. LDFLAGS := -flto
  40. else
  41. MKDIR := mkdir -p
  42. LDFLAGS := -pthread
  43. uname_S := $(shell uname -s)
  44. SUFFIX :=
  45. SRC_DIRECTORIES := $(shell find $(SRCDIR) -type d)
  46. SRC_DIRECTORIES += $(shell find $(TESTDIR) -type d)
  47. TMP_DIRS := $(addprefix $(TMPDIR)/,$(SRC_DIRECTORIES))
  48. endif
  49. endif
  50.  
  51. CXXFLAGS := -O3 -std=c++17 -march=native $(INCLUDES) -Wall -Wextra -pedantic -DNDEBUG
  52.  
  53. SRC_FILES := $(call rwildcard,$(SRCDIR)/,*.cpp)
  54.  
  55. ifeq ($(MAKECMDGOALS),tests)
  56. SRC_FILES := $(call rwildcard,$(SRCDIR)/,*.cpp)
  57. SRC_FILES += $(call rwildcard,$(TESTDIR)/,*.cpp)
  58. SRC_FILES := $(filter-out $(SRCDIR)/main.cpp, $(SRC_FILES))
  59. EXE = midnight-tests
  60. endif
  61.  
  62. TARGET = $(addsuffix $(SUFFIX),$(EXE))
  63.  
  64. OBJECTS := $(patsubst %.cpp,$(TMPDIR)/%.o,$(SRC_FILES))
  65. DEPENDS := $(patsubst %.cpp,$(TMPDIR)/%.d,$(SRC_FILES))
  66.  
  67. .PHONY: clean all tests FORCE
  68.  
  69. all: $(EXE)
  70. tests: $(EXE)
  71. $(EXE): $(OBJECTS)
  72. $(CXX) $(CXXFLAGS) -MMD -MP -o $(TARGET) $^ $(LDFLAGS)
  73.  
  74. $(TMPDIR)/%.o: %.cpp | $(TMPDIR)
  75. $(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@ $(LDFLAGS)
  76.  
  77. $(TMPDIR):
  78. $(MKDIR) $(TMP_DIRS)
  79.  
  80. clean:
  81. rm -rf $(TMPDIR)
  82.  
  83. -include $(DEPENDS)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement