aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile98
1 files changed, 98 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..9c2cc47
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,98 @@
+MAKEFLAGS += --no-builtin-rules
+
+# This variable can be overwritten to show executed commands
+Q ?= @
+
+# Default output path. This is used when output (writable) directory is different
+# than project directory. You shouldn't be setting it by hand, but it is used in
+# external Makefiles.
+O ?= .
+
+# Load configuration
+-include $(O)/.config.mk
+
+.PHONY: all
+all: $(O)/turris-lcd
+
+ifeq ($(DEBUG),yes)
+CFLAGS += -ggdb -DDEBUG
+endif
+CFLAGS += -Wall
+CFLAGS += -Iliblcd -include $(O)/build/config.h
+
+# Apply CPREFIX
+CXX:=$(CPREFIX)$(CXX)
+
+### Source files list ###########################
+SRC = turris-lcd.cpp
+### End of source files list ####################
+
+CSRC = $(patsubst %,src/%,$(filter %.cpp,$(SRC)))
+
+OBJ = $(patsubst src/%.cpp,$(O)/build/%.o,$(CSRC))
+DEP = $(patsubst src/%.cpp,$(O)/build/%.d,$(CSRC))
+
+.PHONY: help
+help:
+ @echo "General extendable macro language make targets:"
+ @echo " turris-lcd - Build geml executable"
+ @echo " help - Prints this text help."
+ @echo " clean - Cleans builded files"
+ @echo " prune - Same as clean but also removes configuration."
+ @echo "Some enviroment variables to be defined:"
+ @echo " Q - Define emty to show executed commands"
+
+# Cleaning
+.PHONY: clean
+clean::
+ @echo " CLEAN build"
+ $(Q)$(RM) -r $(O)/build
+ $(Q)$(RM) $(O)/.config.mk
+ @echo " CLEAN turris-lcd"
+ $(Q)$(RM) $(O)/turris-lcd
+.PHONY: prune
+prune:: clean
+ @echo " CLEAN configuration"
+ $(Q)$(RM) $(O)/.config $(O)/.config.mk
+ @echo " CLEAN liblcd"
+ $(Q)$(MAKE) -C liblcd clean
+
+## Building targets ##
+ifeq (,$(filter clean prune help \
+ ,$(MAKECMDGOALS))) # Ignore build targets if goal is not building
+
+ifeq ($(DEBUG),yes)
+-include $(DEP) # If developing, use dependencies from source files
+.PHONY: dependency dep
+dependency dep:: $(DEP)
+$(DEP): $(O)/build/%.d: src/%.cpp
+ @mkdir -p "$(@D)"
+ @echo " DEP $@"
+ $(Q)$(CXX) -MM -MG -MT '$*.o $@' $(CFLAGS) $< -MF $@
+endif # DEBUG
+
+$(O)/turris-lcd: $(OBJ) liblcd/libliquidcrystali2c.a
+ @echo " LD $@"
+ $(Q)$(CXX) $(LDFLAGS) $^ -o $@
+
+$(OBJ): $(O)/build/%.o: src/%.cpp $(O)/build/config.h
+ @mkdir -p "$(@D)"
+ @echo " CXX $@"
+ $(Q)$(CXX) -c $(CFLAGS) $< -o $@
+
+$(O)/build/config.h: $(O)/.config
+ @mkdir -p "$(@D)"
+ @echo " CONF $@"
+ $(Q)$(O)/configure --op-h > $@
+
+liblcd/libliquidcrystali2c.a:
+ $(Q)$(MAKE) -C liblcd static
+endif
+
+## Configuation files ##
+$(O)/.config:
+ $(error Please run configure script first)
+
+$(O)/.config.mk: $(O)/.config
+ @echo " CONF $@"
+ $(Q)$(O)/configure --op-makefile > $@