aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: 923212d2da4023c19ebd7180bd09505a17bfda61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
S := $(shell uname -s | tr -d ' ')

ifeq ($(OS), FreeBSD)
    CC             := clang
    INSTALL_PREFIX ?= /usr/local/
    LDCONFIG       := true
else
    CC             := gcc
    INSTALL_PREFIX ?= /usr/
    LDCONFIG       := ldconfig
endif

AR      := ar
CFLAGS  := -Wall -fPIC -I. -Isrc
LDFLAGS := -shared
BUILD_DIR ?= build
OBJ_DIR := $(BUILD_DIR)/obj

SRCS := $(wildcard src/*.c)
OBJS := $(patsubst src/%.c,$(OBJ_DIR)/%.o,$(SRCS))

LIB    := $(BUILD_DIR)/libbeaker
HEADER := beaker.h

.PHONY: all clean install uninstall info

all: $(LIB).so $(LIB).a

$(OBJ_DIR):
	@mkdir -p $(OBJ_DIR)

$(LIB).a: $(OBJS)
	@echo "Linking static library $@..."
	$(AR) rcs $@ $^
	@echo "Successfully built $@"

$(LIB).so: $(OBJS)
	@echo "Linking shared library $@..."
	$(CC) $(LDFLAGS) $(OBJS) -o $@ -lm
	@echo "Successfully built $@"

$(OBJ_DIR)/%.o: src/%.c | $(OBJ_DIR)
	@echo "Compiling $<..."
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	@echo "Cleaning up object files and libraries..."
	@rm -rf $(BUILD_DIR)
	@echo "Clean complete."

install: all
	@echo "Installing libraries to $(INSTALL_PREFIX)lib"
	@mkdir -p $(INSTALL_PREFIX)lib
	@cp $(LIB).so $(LIB).a $(INSTALL_PREFIX)lib/
	@$(LDCONFIG) || true
	@echo "Installing $(HEADER) to $(INSTALL_PREFIX)include"
	@mkdir -p $(INSTALL_PREFIX)include
	@cp $(HEADER) $(INSTALL_PREFIX)include
	@echo "Installation complete."

uninstall:
	@echo "Uninstalling from $(INSTALL_PREFIX)..."
	@rm -f $(INSTALL_PREFIX)lib/libbeaker.so
	@rm -f $(INSTALL_PREFIX)lib/libbeaker.a
	@rm -f $(INSTALL_PREFIX)include/$(HEADER)
	@$(LDCONFIG) || true
	@echo "Uninstallation complete."

info:
	@echo "Detected OS:      '$(OS)'"
	@echo "Compiler:         $(CC)"
	@echo "Install Prefix:   $(INSTALL_PREFIX)"
	@echo "Source Files:     $(SRCS)"