-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMakefile
61 lines (48 loc) · 1.32 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
CC = g++
INCLUDE = src
OBJ = build
SRC = src
SRCS = $(SRC)/main.cc
SRCS += $(wildcard $(SRC)/*/*.cc)
SRCS += $(wildcard $(SRC)/*/*/*.cc)
DEPDIR := $(OBJ)/deps
DEPFILES := $(patsubst $(SRC)/%.cc,$(DEPDIR)/%.d,$(SRCS))
OBJS = $(patsubst $(SRC)/%.cc,$(OBJ)/%.o,$(SRCS))
DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.d
EXE = raytrace
CFLAGS = -ggdb3 -I$(INCLUDE) -std=c++17
LDLIBS = -lm -lpng
MODE = "Debug"
.PHONY: all run clean release debug
all: release
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
OPENMP += -fopenmp
endif
ifeq ($(UNAME_S),Darwin)
OPENMP += -Xpreprocessor -fopenmp
LDLIBS += -lomp
endif
$(DEPFILES):
@mkdir -p "$(@D)"
$(EXE): $(OBJS) | $(BIN)
@echo "($(MODE)) Building final executable $@"
@$(CC) $(CFLAGS) $^ -o $@ $(LDLIBS)
$(OBJ)/%.o : $(SRC)/%.cc $(DEPDIR)/%.d | $(DEPDIR)
@echo "($(MODE)) Compiling $@"
@mkdir -p "$(@D)"
@$(CC) $(DEPFLAGS) $(CFLAGS) -c $< -o $@
$(OBJ):
@mkdir -p $@
$(DEPDIR):
@mkdir -p $@
# No compiler optimizations enabled, use default flags.
debug: $(EXE)
# Optimize in release mode
release: MODE = "Release"
release: CFLAGS += -O3 -ffast-math $(OPENMP) -ftree-vectorize -msse2 -mfpmath=sse -flto -march=native
release: LDLIBS += $(OPENMP)
release: $(EXE)
clean:
rm -rf $(OBJ) $(EXE)
include $(wildcard $(DEPFILES))