aboutsummaryrefslogtreecommitdiff
path: root/Makefile.am
diff options
context:
space:
mode:
authorvimene <vincent.menegaux@gmail.com>2026-02-05 10:31:47 +0100
committervimene <vincent.menegaux@gmail.com>2026-02-05 10:31:47 +0100
commitccf086c39f734a000aa3a2fac034f0620021fbdf (patch)
treec49547742909adb671b1e5a43cd042c02509b4b6 /Makefile.am
parentcbf7d23623b5bb2d2092cb6c86bc965138b4ea75 (diff)
downloadengine-ccf086c39f734a000aa3a2fac034f0620021fbdf.tar.gz
added back windows cross-compilation
Makefile.am is too ugly, but I don't have a better solution right now. - fused Makefile.am and src/Makefile.am - adding back windows cross-compilation - improved README.md a lot - added configure option to enable debug, which greatly simplifies development when writing shaders - removed dependency on LunarG's Vulkan SDK by having dependency only on Vulkan headers, library and slangc - removed print C++ header because I have an old MinGW which doesn't support it. It will be restored in the future - make every assets path relative to be able to build anywhere and run elsewhere - moved stb_image.h inside source directory instead of making it a dependency, which is more aligned with stb philosophy - moved assets inside source code to make it easy to compile and run the engine - improved configure.ac by checking Vulkan headers version directly in the configure script instead of within C code, which allows us to also do theses checks when cross-compiling
Diffstat (limited to 'Makefile.am')
-rw-r--r--Makefile.am92
1 files changed, 85 insertions, 7 deletions
diff --git a/Makefile.am b/Makefile.am
index 3297551..67779d6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,14 +1,27 @@
EXTRA_DIST = m4/NOTES
-SUBDIRS = src
ACLOCAL_AMFLAGS = -Im4 --install
-assetsdir = $(datarootdir)/assets
-assets_DATA = ../assets/suzanne.obj ../assets/viking_room.obj
-EXTRA_DIST += $(assets_DATA)
+# 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)/src/shaders
+else
+ASSETS_DIR_CPP = assets
+ASSETS_OBJS_DIR_CPP = assets/objs
+ASSETS_TEXTURES_DIR_CPP = assets/textures
+SHADERS_DIR_CPP = src/shaders
+endif
-texturesdir = $(assetsdir)/textures
-textures_DATA = ../assets/textures/texture.jpg ../assets/textures/viking_room.png
-EXTRA_DIST += $(textures_DATA)
+enginedir = $(datarootdir)/engine
+nobase_engine_DATA = \
+ assets/objs/suzanne.obj assets/textures/texture.jpg \
+ assets/objs/viking_room.obj assets/textures/viking_room.png
+EXTRA_DIST += $(engine_DATA)
# assets origin:
# - assets/suzanne.obj
@@ -21,3 +34,68 @@ EXTRA_DIST += $(textures_DATA)
# 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)
+
+nobase_engine_PROGRAMS = engine
+nobase_dist_engine_SCRIPTS = src/shaders/shader.spv
+noinst_PROGRAMS = src/shaders/shader.spv.rmext
+AM_INSTALLCHECK_STD_OPTIONS_EXEMPT = src/shaders/shader.spv
+CLEANFILES = src/shaders/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
+
+src_shaders_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
+
+src_shaders_shader_spv_rmext_SLANGFLAGS = -target spirv -profile spirv_1_4 -emit-spirv-directly -fvk-use-entrypoint-name -entry vert_main -entry frag_main
+
+src/shaders/shader.spv.rmext$(EXEEXT): src/shaders/shader.slang
+ $(SLANGC) $(src_shaders_shader_spv_rmext_SLANGFLAGS) -o $@ $<
+
+src/shaders/shader.spv: src/shaders/shader.spv.rmext$(EXEEXT)
+ cp -f $< $@