aboutsummaryrefslogtreecommitdiffhomepage
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile63
1 files changed, 63 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..4d46ec2
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,63 @@
+TARGET_LIB := libsparklepaw.so
+SRC_DIR := libsparklepaw
+BUILD_DIR := build
+
+PREFIX ?= /usr/local
+LIBDIR ?= $(PREFIX)/lib
+INCLUDEDIR ?= $(PREFIX)/include
+MANDIR ?= $(PREFIX)/share/man
+
+CFLAGS := -Wall -Wextra -flto
+
+### build mode
+
+ifeq ($(mode),debug)
+ CFLAGS += -g -Og -DDEBUG
+ BUILD_DIR := $(BUILD_DIR)/debug
+else
+ CFLAGS += -O3
+ LDFLAGS += -s
+endif
+
+### automatically populated variables
+
+SRCS := $(shell find $(SRC_DIR) -name '*.c')
+OBJS := $(SRCS:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o)
+HEADERS := $(shell find $(SRC_DIR) -name '*.h')
+
+TARGET := $(BUILD_DIR)/$(TARGET_LIB)
+
+### build targets
+
+all: $(TARGET)
+
+$(TARGET): $(OBJS)
+ $(CC) $(CFLAGS) -shared -o $@ $(LDFLAGS) $(OBJS)
+
+$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
+ @mkdir -p $(BUILD_DIR)
+ $(CC) $(CFLAGS) -c $< -o $@
+
+### other targets
+
+clean:
+ $(RM) $(OBJS) $(TARGET)
+
+install: $(TARGET) $(HEADERS)
+ install -m 755 $(TARGET) $(LIBDIR)
+ install -m 755 -d $(INCLUDEDIR)/libsparklepaw/
+ install -m 644 $(HEADERS) $(INCLUDEDIR)/libsparklepaw/
+
+uninstall:
+ $(RM) $(LIBDIR)/$(TARGET_LIB)
+ $(RM) -r $(INCLUDEDIR)/libsparklepaw/
+
+doc:
+ doxygen
+
+clean-doc:
+ $(RM) -r docs-generated/
+
+### end
+
+.PHONY: all clean install uninstall doc clean-doc