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)"