85 lines
2.1 KiB
Makefile
85 lines
2.1 KiB
Makefile
CC ?= cc
|
|
UNAME_S := $(shell uname -s)
|
|
|
|
AR := ar
|
|
CFLAGS := -Wall -fPIC -I. -Isrc
|
|
BUILD_DIR ?= build
|
|
OBJ_DIR := $(BUILD_DIR)/obj
|
|
|
|
ifeq ($(UNAME_S),Darwin)
|
|
INSTALL_PREFIX ?= /usr/local/
|
|
SHARED_EXT := dylib
|
|
LDCONFIG := true
|
|
LDFLAGS := -dynamiclib -lpthread -Wl,-install_name,$(INSTALL_PREFIX)lib/libbeaker.$(SHARED_EXT)
|
|
else
|
|
INSTALL_PREFIX ?= /usr/
|
|
SHARED_EXT := so
|
|
LDCONFIG := ldconfig
|
|
LDFLAGS := -shared -lpthread
|
|
endif
|
|
|
|
SRCS := $(wildcard src/*.c)
|
|
OBJS := $(patsubst src/%.c,$(OBJ_DIR)/%.o,$(SRCS))
|
|
|
|
LIB_BASE := $(BUILD_DIR)/libbeaker
|
|
STATIC_LIB := $(LIB_BASE).a
|
|
SHARED_LIB := $(LIB_BASE).$(SHARED_EXT)
|
|
HEADER := beaker.h
|
|
|
|
.PHONY: all clean install uninstall info
|
|
|
|
all: $(SHARED_LIB) $(STATIC_LIB)
|
|
|
|
$(OBJ_DIR):
|
|
@mkdir -p $(OBJ_DIR)
|
|
|
|
$(STATIC_LIB): $(OBJS)
|
|
@echo "Linking static library $@..."
|
|
$(AR) rcs $@ $^
|
|
@echo "Successfully built $@"
|
|
|
|
$(SHARED_LIB): $(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
|
|
ifeq ($(UNAME_S),Darwin)
|
|
@rm -f $(INSTALL_PREFIX)lib/libbeaker.so
|
|
endif
|
|
@cp $(SHARED_LIB) $(STATIC_LIB) $(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.$(SHARED_EXT)
|
|
@rm -f $(INSTALL_PREFIX)lib/libbeaker.a
|
|
ifeq ($(UNAME_S),Darwin)
|
|
@rm -f $(INSTALL_PREFIX)lib/libbeaker.so
|
|
endif
|
|
@rm -f $(INSTALL_PREFIX)include/$(HEADER)
|
|
@$(LDCONFIG) || true
|
|
@echo "Uninstallation complete."
|
|
|
|
info:
|
|
@echo "Detected OS: '$(UNAME_S)'"
|
|
@echo "Compiler: $(CC)"
|
|
@echo "Install Prefix: $(INSTALL_PREFIX)"
|
|
@echo "Shared Library: $(SHARED_LIB)"
|
|
@echo "Source Files: $(SRCS)"
|