-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
84 lines (69 loc) · 2.53 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
SOURCEDIR:=./src
DOCSDIR:=./docs
REPORTDIR:=./report
OUTPUTDIR:=./build
OBJECTDIR:=$(OUTPUTDIR)/obj
INCLUDEDIRS:=./include ./include/cuda-samples/Common
LIBDIR:=./lib
# brh
GLADSOURCEDIR:=./glad/src
GLADLIBDIR:=./glad/include
GLADOBJECTDIR:=$(OBJECTDIR)/glad
# no-implicit b/c some weird stuff in stb_image
WARNINGS:=all extra no-implicit-fallthrough
# A little hacky but what can we dooo
ifdef OPTIMIZE
override DEBUGFLAGS:=-O3 $(DEBUGFLAGS)
override NVDEBUGFLAGS:=--dopt=on --use_fast_math --extra-device-vectorization $(NVDEBUGFLAGS)
else
override DEBUGFLAGS:=-g3 -O0 $(DEBUGFLAGS)
override NVDEBUGFLAGS:=--debug --device-debug --profile $(NVDEBUGFLAGS)
endif
FFLAGS:=no-omit-frame-pointer track-macro-expansion=0
STANDARD:=c++20
ARCH:=sm_86
NVCC=nvcc
# would need to be changed for windows or something ig
FFLAGS+=sanitize=leak,undefined
EXTENSION:=
SOURCES:=$(wildcard $(SOURCEDIR)/*.cu)
DEFAULTTARGETS:=$(patsubst $(SOURCEDIR)/%.cu, $(OUTPUTDIR)/%$(EXTENSION), $(SOURCES))
LIBSOURCES:=$(wildcard $(LIBDIR)/*.cpp)
LIBHEADERS:=$(foreach dir, $(INCLUDEDIRS), $(wildcard $(dir)/*.hpp)) $(foreach dir, $(INCLUDEDIRS), $(wildcard $(dir)/*.cuh))
OBJECTS:=$(patsubst $(LIBDIR)/%.cpp, $(OBJECTDIR)/%.o, $(LIBSOURCES))
# kinda repetitve...
GLADSOURCES:=$(wildcard $(GLADSOURCEDIR)/*.c)
GLADOBJECTS:=$(patsubst $(GLADSOURCEDIR)/%.c, $(GLADOBJECTDIR)/%.o, $(GLADSOURCES))
LDFLAGS+=-lglfw -lGL -lX11 -lpthread -lXrandr -lXi -ldl
BASEFLAGS:=$(INCLUDEDIRS:%=-I%) -I$(GLADLIBDIR) $(WARNINGS:%=-W%) $(FFLAGS:%=-f%)
CCFLAGS+=$(BASEFLAGS) $(DEBUGFLAGS)
CXXFLAGS+=$(CCFLAGS) -std=$(STANDARD)
NVCCFLAGS+=--forward-unknown-to-host-compiler $(NVDEBUGFLAGS) -diag-suppress 20012 -diag-suppress 550 $(BASEFLAGS) -std=$(STANDARD) -arch=$(ARCH)
.PHONY: all clean
.SECONDARY: $(GLADOBJECTS)
.DELETE_ON_ERROR:
ifndef VERBOSE
.SILENT:
endif
# https://stackoverflow.com/a/74742720
define print_step
$(eval $@_MAINREQ = $(1))
$(eval $@_TARGET = $(2))
printf "=== %s -> %s ===\n" '${$@_MAINREQ}' '${$@_TARGET}'
endef
$(OBJECTDIR)/%.o: $(LIBDIR)/%.cpp $(LIBHEADERS)
mkdir -pv $(OBJECTDIR)
$(call print_step,$<,$@)
$(CXX) $(CXXFLAGS) -c $< -o $@
$(GLADOBJECTDIR)/%.o: $(GLADSOURCEDIR)/%.c
mkdir -pv $(GLADOBJECTDIR)
$(call print_step,$<,$@)
$(CC) $(CCFLAGS) -Wno-pedantic -c $< -o $@
all: $(DEFAULTTARGETS)
$(OUTPUTDIR)/%$(EXTENSION): $(SOURCEDIR)/%.cu $(OBJECTS) $(GLADOBJECTS) $(LIBHEADERS)
mkdir -pv $(OUTPUTDIR)
$(call print_step,$<,$@)
$(NVCC) $(NVCCFLAGS) $(OBJECTS) $(GLADOBJECTS) $< -o $@ $(LDFLAGS)
# nukes are simpler than surgeries:
clean:
rm -rfv $(OUTPUTDIR) $(GLADOBJECTDIR)