summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile54
1 files changed, 44 insertions, 10 deletions
diff --git a/Makefile b/Makefile
index a7baecc..09b0e36 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
CXX := g++
-CXXFLAGS := -Wall -Wextra -std=c++11 -O2 -isystem /usr/local/include -I.
+CXXFLAGS := -Wall -Wextra -std=c++11 -O2 -I.
LIBS := -lfltk -L/usr/local/lib
BIN := game
@@ -8,6 +8,12 @@ object_obj := $(patsubst src/objects/%.cpp,build/objects/%.o,$(object_src))
object_head := $(patsubst src/objects/%.cpp,build/objects/%.h,$(object_src))
object_xlist := $(shell echo $$(for f in $(object_src); do basename $$f | sed 's/\.[^.]*$$//' | sed 's/.*/X(&)/'; done))
+sprite_allfiles := $(wildcard src/sprites/*)
+sprite_fnames := $(filter %.png,$(sprite_allfiles))
+sprite_skipped := $(filter-out %.png,$(sprite_allfiles))
+sprite_obj := $(patsubst src/sprites/%.png,build/sprites/%.o,$(sprite_fnames))
+sprite_externs := $(shell echo $$(for f in $(sprite_obj); do basename $$f | sed 's/\.[^.]*$$//' | sed 's/.*/extern const unsigned char &[];/'; done))
+
base_src := $(wildcard *_base.cpp)
base_src += library.cpp main.cpp
base_obj := $(patsubst %.cpp,build/%.o,$(base_src))
@@ -17,6 +23,9 @@ base_obj := $(patsubst %.cpp,build/%.o,$(base_src))
#keep all intermediate files!
.SECONDARY:
+#we handle our own printing
+.SILENT:
+
all: $(BIN)
clean:
@@ -25,31 +34,56 @@ clean:
remake: clean all
run: all
+ printf "\x1B[1mRUNNING...\x1B[0m\n"
./$(BIN)
-$(BIN): $(base_obj) $(object_obj)
+$(BIN): $(base_obj) $(object_obj) $(sprite_obj)
+ echo Linking
$(CXX) $(CXXFLAGS) $(LIBS) -o $(BIN) $^
-build/main.o: main.cpp build/objects.h
- @mkdir -p $(dir $@)
+build/main.o: main.cpp build/objects.h build/sprites.h
+ echo Building main
+ mkdir -p $(dir $@)
$(CXX) $(CXXFLAGS) -c -o "$@" "$<" "-DOBJECT_CLASSES_XLIST=$(object_xlist)" "-DGAME_NAME=\"$(BIN)\""
-build/objects/%.o: build/objects/%.cpp
- @mkdir -p $(dir $@)
- $(CXX) $(CXXFLAGS) -c -o "$@" $^
+build/objects/%.o: build/objects/%.cpp build/objects.h build/sprites.h
+ echo Building $*
+ mkdir -p $(dir $@)
+ $(CXX) $(CXXFLAGS) -c -o "$@" "$<"
build/objects/%.cpp: src/objects/%.cpp
- @mkdir -p $(dir $@)
+ echo Generating source for $*
+ mkdir -p $(dir $@)
$(CXX) -E object_wrapper.cpp "-D__OBJECT_FNAME__=\"$<\"" "-D__OBJECT_NAME__=$(basename $(notdir $<))" | sed 's/^# [0-9]\+ ".*//' >"$@"
build/objects/%.h: src/objects/%.cpp
- @mkdir -p $(dir $@)
+ echo Generating header for $*
+ mkdir -p $(dir $@)
$(CXX) -E object_header_maker.cpp "-D__OBJECT_NAME__=$(basename $(notdir $<))" "-DEVENT_XLIST=$$($(CXX) -E object_header_extractor.cpp "-D__OBJECT_FNAME__=\"$<\"" | sed 's/__________EVENT_NEWLINE__________/\n/g' | grep -oe '__________EVENT_COUNTER_TAG_[^_]*__________' | sed 's/[^G]*G_\(.*\)__________.*/X(\1)/g' | xargs)" | sed 's/^# [0-9]\+ ".*//' >"$@"
build/objects.h: $(object_head)
+ echo Collecting header files
echo $(object_head) | xargs -n 1 basename | sed 's,.*,#include "objects/&",' >"$@"
build/%.o: %.cpp
- @mkdir -p $(dir $@)
+ echo Compiling $*
+ mkdir -p $(dir $@)
$(CXX) $(CXXFLAGS) -c -o "$@" $^
+
+
+build/sprites/%.o: build/sprites/%.cpp
+ echo Building sprite $*
+ mkdir -p $(dir $@)
+ $(CXX) $(CXXFLAGS) -Wno-unused-const-variable -c -o "$@" "$<"
+
+build/sprites/%.cpp: src/sprites/%.png
+ echo Generating for sprite $*
+ mkdir -p $(dir $@)
+ printf "const unsigned char $*[]={\n%s, 0\n};\nconst unsigned int _$*_len=%d;\n" "$$(xxd -i <"$<")" $$(stat -f '%z' "$<") >"$@"
+
+build/sprites.h:
+ echo Collecting generated sprite files
+ mkdir -p $(dir $@)
+ echo "$(sprite_externs)" >"$@"
+ test -z "$(sprite_skipped)" || printf "\x1B[1mWARNING: skipped files in src/sprites: $(notdir $(sprite_skipped))\x1B[0m\n"