summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile103
1 files changed, 68 insertions, 35 deletions
diff --git a/Makefile b/Makefile
index 0da6a41..9a82d8f 100644
--- a/Makefile
+++ b/Makefile
@@ -17,6 +17,14 @@ endef
define cxx-dbg-command
$(CXX) -std=c++23 -c -o $@ -DDEBUG -g -O0 $(CXXFLAGS) $(INCS) $<
endef
+define cc-encode-binary-command
+$(1): $(2)
+ xxd -i $$< | sed -e 's/^unsigned /const unsigned /' > $$@
+endef
+define cc-pre-compile-header-command
+$(1): $(2)
+ $(CC) -std=c2x -O3 -c $$< -o $$@
+endef
FLG_PKE = -Isub/imgui -Isub/stb -Isub/cgltf -Isub/bullet3/src
FLG_EDT = $(FLG_PKE) -Isrc -I/home/pikum/build/msdfgen -I/home/pikum/build/msdf-atlas-gen
@@ -24,6 +32,26 @@ FLG_MPL = $(FLG_PKE) -Isrc
FLG_RUN = $(FLG_PKE) -Isrc
FLG_TST = $(FLG_PKE) -Isrc
+FILES_BIN = \
+ assets/fonts/font-mannequin.png \
+ assets/fonts/font-mannequin.glyph \
+
+FILES_BIN_SAFE = $(subst -,_,$(subst .,_,$(FILES_BIN)))
+FILES_BIN_H = $(FILES_BIN_SAFE:%=%.h)
+FILES_BIN_GCH = $(FILES_BIN_SAFE:%=%.gch)
+
+# I don't like foreach but this works
+$(foreach f,$(FILES_BIN), \
+ $(eval \
+ $(call cc-encode-binary-command,$(subst -,_,$(subst .,_,$f)).h,$(f)) \
+ ) \
+)
+$(foreach f,$(FILES_BIN_SAFE), \
+ $(eval \
+ $(call cc-pre-compile-header-command,$(f).gch,$(f).h) \
+ ) \
+)
+
DIR_OBJ=obj
DIR_BIN=bin
DIR_DBG=dbg
@@ -48,6 +76,9 @@ default: options $(DIR_BIN)/pke-editor $(DIR_BIN)/libpke-example.a $(DIR_BIN)/pk
default-dbg: options $(DIR_DBG)/pke-editor $(DIR_DBG)/libpke-example.a $(DIR_DBG)/pke-runtime ;
.PHONY: prepare
+prepare: config.h
+prepare: config.mk
+prepare: $(FILES_BIN_GCH)
prepare:
mkdir -p $(DIR_BIN) $(DIR_DBG) $(DIR_OBJ) $(DIR_OBJ)/shaders $(DIR_DBG)/bullet3 $(DIR_BIN)/bullet3
mkdir -p $(DIR_BIN)/bullet3
@@ -65,63 +96,64 @@ options: prepare .WAIT
config.h:
cp config.def.h $@
-%.h: ;
-
-%.hpp: ;
-
-$(DIR_OBJ)/%.o : config.h config.mk
-$(DIR_OBJ)/%.so : config.h config.mk
-
-$(DIR_OBJ)/%.o : sub/imgui/%.cpp
+$(DIR_OBJ)/%.o : sub/imgui/%.cpp | prepare
$(cxx-bin-command) -Isub/imgui
-$(DIR_OBJ)/%.so : sub/imgui/%.cpp
+$(DIR_OBJ)/%.so : sub/imgui/%.cpp | prepare
$(cxx-dbg-command) -Isub/imgui
-$(DIR_OBJ)/%.o : sub/imgui/backends/%.cpp
+$(DIR_OBJ)/%.o : sub/imgui/backends/%.cpp | prepare
$(cxx-bin-command) -Isub/imgui
-$(DIR_OBJ)/%.so : sub/imgui/backends/%.cpp
+$(DIR_OBJ)/%.so : sub/imgui/backends/%.cpp | prepare
$(cxx-dbg-command) -Isub/imgui
-$(DIR_OBJ)/%.o : sub/imgui/misc/cpp/%.cpp
+$(DIR_OBJ)/%.o : sub/imgui/misc/cpp/%.cpp | prepare
$(cxx-bin-command) -Isub/imgui
-$(DIR_OBJ)/%.so : sub/imgui/misc/cpp/%.cpp
+$(DIR_OBJ)/%.so : sub/imgui/misc/cpp/%.cpp | prepare
$(cxx-dbg-command) -Isub/imgui
-$(DIR_OBJ)/shaders/%.vert.spv: assets/shaders/%.vert
+$(DIR_OBJ)/shaders/%.vert.spv: assets/shaders/%.vert | prepare
$(GLSLC) $^ -o $@
-$(DIR_OBJ)/shaders/%.frag.spv: assets/shaders/%.frag
+$(DIR_OBJ)/shaders/%.frag.spv: assets/shaders/%.frag | prepare
$(GLSLC) $^ -o $@
-$(DIR_OBJ)/%.o : src/%.c
+$(DIR_OBJ)/%.o : src/%.c | prepare
+ $(cc-bin-command) $(FLG_PKE)
+$(DIR_OBJ)/%.so : src/%.c | prepare
+ $(cc-dbg-command) $(FLG_PKE)
+$(DIR_OBJ)/%.o : embed/%.c | prepare
$(cc-bin-command) $(FLG_PKE)
-$(DIR_OBJ)/%.so : src/%.c
+$(DIR_OBJ)/%.so : embed/%.c | prepare
$(cc-dbg-command) $(FLG_PKE)
-$(DIR_OBJ)/%.o : src/vendor/tinyfiledialogs/%.c
+$(DIR_OBJ)/%.o : src/vendor/tinyfiledialogs/%.c | prepare
$(cc-bin-command) $(FLG_PKE)
-$(DIR_OBJ)/%.so : src/vendor/tinyfiledialogs/%.c
+$(DIR_OBJ)/%.so : src/vendor/tinyfiledialogs/%.c | prepare
$(cc-dbg-command) $(FLG_PKE)
-$(DIR_OBJ)/%.o : tests/%.c
+$(DIR_OBJ)/%.o : tests/%.c | prepare
$(cc-bin-command) $(FLG_TST)
-$(DIR_OBJ)/%.so : tests/%.c
+$(DIR_OBJ)/%.so : tests/%.c | prepare
$(cc-dbg-command) $(FLG_TST)
-$(DIR_OBJ)/%.o : src/%.cpp
+$(DIR_OBJ)/%.o : src/%.cpp | prepare
+ $(cxx-bin-command) $(FLG_PKE)
+$(DIR_OBJ)/%.so : src/%.cpp | prepare
+ $(cxx-dbg-command) $(FLG_PKE)
+$(DIR_OBJ)/%.o : embed/%.cpp | prepare
$(cxx-bin-command) $(FLG_PKE)
-$(DIR_OBJ)/%.so : src/%.cpp
+$(DIR_OBJ)/%.so : embed/%.cpp | prepare
$(cxx-dbg-command) $(FLG_PKE)
-$(DIR_OBJ)/%.o : editor/%.cpp
+$(DIR_OBJ)/%.o : editor/%.cpp | prepare
$(cxx-bin-command) $(FLG_EDT)
-$(DIR_OBJ)/%.so : editor/%.cpp
+$(DIR_OBJ)/%.so : editor/%.cpp | prepare
$(cxx-dbg-command) $(FLG_EDT)
-$(DIR_OBJ)/%.o : example/%.cpp
+$(DIR_OBJ)/%.o : example/%.cpp | prepare
$(cxx-bin-command) $(FLG_MPL)
-$(DIR_OBJ)/%.so : example/%.cpp
+$(DIR_OBJ)/%.so : example/%.cpp | prepare
$(cxx-dbg-command) $(FLG_MPL)
-$(DIR_OBJ)/%.o : runtime/%.cpp
+$(DIR_OBJ)/%.o : runtime/%.cpp | prepare
$(cxx-bin-command) $(FLG_RUN)
-$(DIR_OBJ)/%.so : runtime/%.cpp
+$(DIR_OBJ)/%.so : runtime/%.cpp | prepare
$(cxx-dbg-command) $(FLG_RUN)
-$(DIR_OBJ)/%.o : tests/%.cpp
+$(DIR_OBJ)/%.o : tests/%.cpp | prepare
$(cxx-bin-command) $(FLG_TST)
-$(DIR_OBJ)/%.so : tests/%.cpp
+$(DIR_OBJ)/%.so : tests/%.cpp | prepare
$(cxx-dbg-command) $(FLG_TST)
$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui.o
@@ -168,6 +200,7 @@ $(DIR_BIN)/libpke.a: $(DIR_OBJ)/asset-manager.o
$(DIR_BIN)/libpke.a: $(DIR_OBJ)/camera.o
$(DIR_BIN)/libpke.a: $(DIR_OBJ)/dynamic-array.o
$(DIR_BIN)/libpke.a: $(DIR_OBJ)/ecs.o
+$(DIR_BIN)/libpke.a: $(DIR_OBJ)/embedded-fonts.o
$(DIR_BIN)/libpke.a: $(DIR_OBJ)/entities.o
$(DIR_BIN)/libpke.a: $(DIR_OBJ)/event.o
$(DIR_BIN)/libpke.a: $(DIR_OBJ)/font.o
@@ -207,6 +240,7 @@ $(DIR_DBG)/libpke.a: $(DIR_OBJ)/asset-manager.so
$(DIR_DBG)/libpke.a: $(DIR_OBJ)/camera.so
$(DIR_DBG)/libpke.a: $(DIR_OBJ)/dynamic-array.so
$(DIR_DBG)/libpke.a: $(DIR_OBJ)/ecs.so
+$(DIR_DBG)/libpke.a: $(DIR_OBJ)/embedded-fonts.so
$(DIR_DBG)/libpke.a: $(DIR_OBJ)/entities.so
$(DIR_DBG)/libpke.a: $(DIR_OBJ)/event.so
$(DIR_DBG)/libpke.a: $(DIR_OBJ)/font.so
@@ -304,14 +338,13 @@ $(DIR_DBG)/pke-test: $(DIR_OBJ)/pke-test.so
.PHONY: print
print:
- @echo $(OUT_OBJ)
- @echo $(MAINS_OBJ)
- @echo $(MAINS_SOBJ)
+ @echo $(FILES_BIN_H)
+ @echo $(FILES_BIN_GCH)
.PHONY: clean
clean:
rm -rf .cache
- rm -f *.o *.so *.plist config.h
+ rm -f *.o *.so *.plist config.h $(FILES_BIN_GCH)
rm -rf $(DIR_BIN) $(DIR_OBJ) $(DIR_DBG)
.PHONY: dist install uninstall