Advertisement
adfasdfadsfasdf

Untitled

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