Advertisement
adfasdfadsfasdf

Untitled

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