-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
92 lines (73 loc) · 2.38 KB
/
Makefile
File metadata and controls
92 lines (73 loc) · 2.38 KB
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
85
86
87
88
89
90
91
92
TARGET = raytracer
CXX = g++
LDFLAGS = -lSDL2 \
-lGL \
-lGLEW \
-LExternal/OpenImageDenoise/lib \
-lOpenImageDenoise \
-ldl \
-lm \
-lpthread \
-lSDL2main \
-lconfig++ \
-lsfml-graphics \
-lsfml-window \
-lsfml-system \
-Wl,-rpath,'$$ORIGIN/External/OpenImageDenoise/lib'
INCLUDES = -I. \
-IRaytracer \
-IExternal \
-IExternal/ImGui \
-IExternal/GL \
-IExternal/OpenImageDenoise/include
CXXFLAGS = -std=gnu++20 -DRAY_DEBUG
DFLAGS =
WARNING_FLAGS = -Wall -Wextra
FLAGS = $(LDFLAGS) $(INCLUDES) $(CXXFLAGS) $(DFLAGS) -rdynamic
PLUGIN_FLAGS = -fPIC -fno-gnu-unique
SOURCES = $(shell find Raytracer -type f -iname "*.cpp" \
-not -path "Raytracer/Plugins/*") \
$(shell find Raytracer -type f -iname "*.c" \
-not -path "Raytracer/Plugins/*") \
$(shell find External -type f -iname "*.cpp") \
$(shell find External -type f -iname "*.c")
OBJECTS = $(patsubst %.cpp,%.o,$(filter %.cpp,$(SOURCES))) \
$(patsubst %.c,%.o,$(filter %.c,$(SOURCES)))
PLUGIN_DIRS = $(shell find Raytracer/Plugins -mindepth 1 \
-maxdepth 1 -type d)
PLUGIN_NAMES = $(notdir $(PLUGIN_DIRS))
PLUGIN_TARGETS = $(patsubst %,%.rplugin,$(PLUGIN_NAMES))
SCENE_NAME ?=
all: $(TARGET) plugins
%.o: %.cpp
$(CXX) -c $< -o $@ $(FLAGS) $(if $(filter External/%,$<),,$(WARNING_FLAGS))
%.o: %.c
$(CXX) -c $< -o $@ $(FLAGS) $(if $(filter External/%,$<),,$(WARNING_FLAGS))
$(TARGET): $(OBJECTS)
$(CXX) -o $(TARGET) $(OBJECTS) $(FLAGS)
%.rplugin:
mkdir -p Plugins
@$(eval PLUGIN_DIR := Raytracer/Plugins/$(basename $@))
@$(eval PLUGIN_SOURCES := \
$(shell find $(PLUGIN_DIR) -type f -iname "*.cpp" -o -iname "*.c"))
@$(eval PLUGIN_OBJECTS := \
$(patsubst %.cpp,%.o,$(filter %.cpp,$(PLUGIN_SOURCES))) \
$(patsubst %.c,%.o,$(filter %.c,$(PLUGIN_SOURCES))))
@for src in $(PLUGIN_SOURCES); do \
$(CXX) $(PLUGIN_FLAGS) -c $$src -o $${src%.*}.o $(FLAGS); \
done
$(CXX) -shared -o Plugins/$@ $(PLUGIN_OBJECTS) $(FLAGS)
plugins: $(PLUGIN_TARGETS)
clean:
find -type f -iname "*.o" -delete
find -type f -iname "*.d" -delete
fclean: clean
rm -rf $(TARGET)
rm -rf Plugins/
re: fclean all
run:
LD_LIBRARY_PATH=External/OpenImageDenoise/lib/:$LD_LIBRARY_PATH \
./raytracer $(SCENE_NAME)
run-ajax: SCENE_NAME += -s Assets/ajax.scene
run-ajax: run
.PHONY: clean fclean re