aboutsummaryrefslogtreecommitdiff
path: root/Makefile.am
blob: 1930529c88f3bf255c888c99546de64e3cc67d3c (plain) (blame)
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
EXTRA_DIST = m4/NOTES
ACLOCAL_AMFLAGS = -Im4 --install

# TODO: right now, the source tree and the install tree must share the same structure, which is very
# bad, because for example this causes "src" to be used as a final directory
# TODO: make variable for each subdirectory name, instead of copying it everywhere
# TODO: we shouldn't have everything in a single Makefile.am
if DEBUG
ASSETS_DIR_CPP = $(srcdir)/assets
ASSETS_OBJS_DIR_CPP = $(srcdir)/assets/objs
ASSETS_TEXTURES_DIR_CPP = $(srcdir)/assets/textures
SHADERS_DIR_CPP = $(builddir)
else
ASSETS_DIR_CPP = assets
ASSETS_OBJS_DIR_CPP = assets/objs
ASSETS_TEXTURES_DIR_CPP = assets/textures
SHADERS_DIR_CPP = shaders
endif

enginedir = $(datarootdir)/engine
assetsdir = $(enginedir)/assets
assets_objsdir = $(assetsdir)/objs
assets_texturesdir = $(assetsdir)/textures
shadersdir = $(enginedir)/shaders
assets_objs_DATA = \
	assets/objs/suzanne.obj \
	assets/objs/viking_room.obj
assets_textures_DATA = \
	assets/textures/texture.jpg \
	assets/textures/viking_room.png
EXTRA_DIST += $(assets_objs_DATA) $(assets_textures_DATA)

# assets origin:
# - assets/suzanne.obj
#     taken from Blender
# - assets/texture.jpg
#     comes from here https://pixabay.com/photos/statue-sculpture-figure-1275469/, modified by the
#     author(s) of the vulkan tutorials (see
#     https://docs.vulkan.org/tutorial/latest/06_Texture_mapping/00_Images.html#_loading_an_image)
# - assets/viking_room.obj & assets/textures/viking_room.png 
#     comes from here https://sketchfab.com/3d-models/viking-room-a49f1b8e4f5c4ecf9e1fe7d81915ad38,
#     modified by the author(s) of the vulkan tutorials (see
#     https://docs.vulkan.org/tutorial/latest/08_Loading_models.html#_sample_mesh)

engine_PROGRAMS = engine
shaders_SCRIPTS = shader.spv
noinst_PROGRAMS = shader.spv.rmext
CLEANFILES = shader.spv shader.spv.rmext

engine_SOURCES = \
	src/engine.cpp \
	src/renderer.hpp src/renderer.cpp \
	src/obj_parser.hpp src/obj_parser.cpp \
	src/vulkan_utils.hpp \
	src/path_utils.hpp src/path_utils.cpp \
	src/stb_image.h \
	src/stb_image.cpp \
	src/fb/fb.hpp \
	src/fb/chfb.hpp src/fb/chfb.cpp \
	src/fb/pixfb.hpp src/fb/pixfb.cpp \
	src/math/utils.hpp \
	src/math/vector.hpp \
	src/math/mat4.hpp \
	src/math/quat.hpp \
	src/math/tform.hpp \
	src/o3d/mesh.hpp src/o3d/mesh.cpp \
	src/o3d/obj3d.hpp \
	src/o3d/vertex.hpp \
	src/o3d/deriv_vertex.hpp \
	src/o3d/tri.hpp \
	src/o3d/tri_deriv.hpp \
	src/o3d/polygon.hpp \
	src/o3d/camera.hpp \
	src/o3d/scene.hpp \
	src/ctrl/keyboard.hpp \
	src/ctrl/mouse.hpp \
	src/shaders/shaders.hpp \
	src/shaders/simple_shaders.hpp src/shaders/simple_shaders.cpp

shader_spv_rmext_SOURCES = src/shaders/shader.slang

engine_CPPFLAGS = -std=gnu++23 -Wall -Wextra -I'$(srcdir)/src' \
	-DASSETS_DIR='"$(ASSETS_DIR_CPP)"' \
	-DASSETS_OBJS_DIR='"$(ASSETS_OBJS_DIR_CPP)"' \
	-DASSETS_TEXTURES_DIR='"$(ASSETS_TEXTURES_DIR_CPP)"' \
	-DSHADERS_DIR='"$(SHADERS_DIR_CPP)"' \
	$(GLFW3_CFLAGS) $(VULKAN_CFLAGS)
if !DEBUG
engine_CPPFLAGS += -DNDEBUG
endif
engine_LDFLAGS = -std=gnu++23 -Wall -Wextra
engine_LDADD = $(GLFW3_LIBS) $(VULKAN_LIBS)

if HAVE_NCURSES
engine_CPPFLAGS += $(NCURSES_CFLAGS)
engine_LDADD    += $(NCURSES_LIBS)
endif

src/engine-stb_image.$(OBJEXT): CXXFLAGS += -Wno-unused-but-set-variable

shader_spv_rmext_SLANGFLAGS = -target spirv -profile spirv_1_4 -emit-spirv-directly -fvk-use-entrypoint-name -entry vert_main -entry frag_main

shader.spv.rmext$(EXEEXT): src/shaders/shader.slang
	$(SLANGC) $(shader_spv_rmext_SLANGFLAGS) -o $@ $<

shader.spv: shader.spv.rmext$(EXEEXT)
	cp -f $< $@