2019-10-09 18:06:43 +02:00
|
|
|
# Makefile for cbd
|
|
|
|
|
|
|
|
TOP := $(shell pwd)
|
|
|
|
|
|
|
|
# Tunables
|
|
|
|
VERSION := 1.0
|
|
|
|
WITH_DEBUG ?= true
|
|
|
|
|
|
|
|
# Default rule
|
|
|
|
.PHONY: all
|
|
|
|
all: all-targets
|
|
|
|
|
|
|
|
# Turn off default suffix rules
|
|
|
|
.SUFFIXES:
|
|
|
|
|
|
|
|
# Turn off RCS/SCCS rules
|
|
|
|
%: RCS/%,v
|
|
|
|
%: RCS/%
|
|
|
|
%: %,v
|
|
|
|
%: s.%
|
|
|
|
%: SCCS/s.%
|
|
|
|
|
|
|
|
# Always delete target when a rule fails
|
|
|
|
.DELETE_ON_ERROR:
|
|
|
|
|
|
|
|
# Kernel stuff
|
|
|
|
KVER ?= $(shell uname -r)
|
|
|
|
KDIR ?= /lib/modules/$(KVER)/build
|
|
|
|
|
|
|
|
# Build tools
|
|
|
|
CPP := $(CROSS_COMPILE)cpp
|
|
|
|
CC := $(CROSS_COMPILE)gcc
|
|
|
|
AR := $(CROSS_COMPILE)ar
|
|
|
|
LD := $(CROSS_COMPILE)gcc
|
|
|
|
STRIP := $(CROSS_COMPILE)strip
|
|
|
|
|
|
|
|
# Paths
|
|
|
|
OUT := out
|
|
|
|
OUT_OBJ := $(OUT)/obj
|
|
|
|
OUT_LIB := $(OUT)/lib
|
|
|
|
OUT_BIN := $(OUT)/bin
|
|
|
|
OUT_KMOD := $(OUT)/kmod
|
|
|
|
|
|
|
|
# Install locations
|
|
|
|
PREFIX ?= /usr/local
|
|
|
|
BINDIR ?= $(PREFIX)/bin
|
|
|
|
LIBDIR ?= $(PREFIX)/lib
|
|
|
|
MANDIR ?= $(PREFIX)/share/man
|
|
|
|
KMODDIR ?= /lib/modules/$(KVER)/misc
|
|
|
|
|
|
|
|
# Platform extensions
|
|
|
|
OBJ_EXT := .o
|
|
|
|
LIB_EXT := .a
|
|
|
|
SHLIB_EXT := .so
|
|
|
|
EXE_EXT :=
|
|
|
|
KMOD_EXT := .ko
|
|
|
|
|
|
|
|
# Build flags
|
|
|
|
ifeq ($(WITH_DEBUG),true)
|
|
|
|
DEBUG_CFLAGS := -g
|
|
|
|
DEBUG_LDFLAGS := -g
|
|
|
|
else
|
|
|
|
DEBUG_CFLAGS := -DNDEBUG
|
|
|
|
DEBUG_LDFLAGS :=
|
|
|
|
endif
|
|
|
|
|
|
|
|
CPPFLAGS :=
|
|
|
|
CFLAGS := $(DEBUG_CFLAGS) -Wall -Werror -Iinclude
|
|
|
|
LDFLAGS := $(DEBUG_LDFLAGS)
|
|
|
|
|
|
|
|
# Targets
|
|
|
|
LIB_NAME := libcbd
|
|
|
|
BIN_NAME := cbd
|
|
|
|
KMOD_NAME := dm-compress
|
|
|
|
|
|
|
|
# Sources
|
|
|
|
LIB_SRCS := \
|
|
|
|
check.c \
|
|
|
|
close.c \
|
|
|
|
format.c \
|
|
|
|
open.c \
|
|
|
|
resize.c \
|
|
|
|
stats.c
|
|
|
|
BIN_SRCS := \
|
|
|
|
cbd.c
|
|
|
|
KMOD_SRCS := \
|
2019-10-22 04:39:27 +02:00
|
|
|
util.c \
|
|
|
|
pbat.c \
|
|
|
|
lbatpage.c \
|
|
|
|
lbatview.c \
|
|
|
|
lbd.c \
|
|
|
|
compress.c
|
2019-10-09 18:06:43 +02:00
|
|
|
|
|
|
|
# Intermediates
|
|
|
|
LIB_OBJDIR := $(OUT_OBJ)/$(LIB_NAME)
|
|
|
|
LIB_OBJS := $(addprefix $(LIB_OBJDIR)/,$(LIB_SRCS:.c=$(OBJ_EXT)))
|
|
|
|
BIN_OBJDIR := $(OUT_OBJ)/$(BIN_NAME)
|
|
|
|
BIN_OBJS := $(addprefix $(BIN_OBJDIR)/,$(BIN_SRCS:.c=$(OBJ_EXT)))
|
|
|
|
EXE_LIBS := -ldevmapper
|
|
|
|
KMOD_OBJDIR := $(OUT_OBJ)/$(KMOD_NAME)
|
|
|
|
|
|
|
|
# Transforms
|
|
|
|
define copy-file
|
|
|
|
@mkdir -p $(@D)
|
|
|
|
cp $< $@
|
|
|
|
endef
|
|
|
|
define compile-c
|
|
|
|
@mkdir -p $(@D)
|
|
|
|
$(CC) $(CPPFLAGS) $(CFLAGS) -MD -MP -MF $(@D)/.$(@F:$(OBJ_EXT)=.d) -c -o $@ $<
|
|
|
|
endef
|
|
|
|
define make-static-lib
|
|
|
|
@mkdir -p $(@D)
|
|
|
|
@rm -f $@
|
|
|
|
$(AR) r $@ $^
|
|
|
|
endef
|
|
|
|
define make-shared-lib
|
|
|
|
@mkdir -p $(@D)
|
|
|
|
$(LD) -shared -o $@ $^
|
|
|
|
endef
|
|
|
|
define link-executable
|
|
|
|
@mkdir -p $(@D)
|
|
|
|
$(LD) $(LDFLAGS) -o $@ $^ $(EXE_LIBS)
|
|
|
|
endef
|
|
|
|
|
|
|
|
# Version
|
|
|
|
ifeq (,$(wildcard .git))
|
|
|
|
GIT_REV := none
|
|
|
|
else
|
|
|
|
GIT_REV := $(shell git rev-parse --short HEAD)
|
|
|
|
ifeq (,$(shell git diff-index --name-only HEAD))
|
|
|
|
GIT_REV := $(GIT_REV)-clean
|
|
|
|
else
|
|
|
|
GIT_REV := $(GIT_REV)-dirty
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
VERSION := $(VERSION)-$(GIT_REV)
|
|
|
|
|
|
|
|
version.h:
|
|
|
|
@echo "/* Autogenerated file. Do not edit. */" > .$@.tmp && \
|
|
|
|
echo "#ifndef VERSION_H" >> .$@.tmp && \
|
|
|
|
echo "#define VERSION_H" >> .$@.tmp && \
|
|
|
|
echo "#endif" >> .$@.tmp && \
|
|
|
|
rm -f $@ && \
|
|
|
|
mv -f .$@.tmp $@
|
|
|
|
|
|
|
|
# Rules
|
|
|
|
$(LIB_OBJS): $(LIB_OBJDIR)/%.o: $(LIB_NAME)/%.c
|
|
|
|
$(compile-c)
|
|
|
|
|
|
|
|
$(OUT_LIB)/$(LIB_NAME)$(LIB_EXT): $(LIB_OBJS)
|
|
|
|
$(make-static-lib)
|
|
|
|
|
|
|
|
$(BIN_OBJS): $(BIN_OBJDIR)/%.o: $(BIN_NAME)/%.c
|
|
|
|
$(compile-c)
|
|
|
|
|
|
|
|
$(OUT_BIN)/$(BIN_NAME)$(EXE_EXT): $(BIN_OBJS) $(OUT_LIB)/$(LIB_NAME)$(LIB_EXT)
|
|
|
|
$(link-executable)
|
|
|
|
|
2019-10-22 04:39:27 +02:00
|
|
|
$(KMOD_NAME)/$(KMOD_NAME)$(KMOD_EXT): $(addprefix $(KMOD_NAME)/,$(KMOD_SRCS))
|
2019-10-09 18:06:43 +02:00
|
|
|
make -C $(KDIR) M=$(TOP)/$(KMOD_NAME) modules
|
|
|
|
|
|
|
|
$(OUT_KMOD)/$(KMOD_NAME)$(KMOD_EXT): $(KMOD_NAME)/$(KMOD_NAME)$(KMOD_EXT)
|
|
|
|
$(copy-file)
|
|
|
|
|
|
|
|
.PHONY: all-targets
|
|
|
|
all-targets: \
|
|
|
|
$(OUT_LIB)/$(LIB_NAME)$(LIB_EXT) \
|
|
|
|
$(OUT_BIN)/$(BIN_NAME)$(EXE_EXT) \
|
|
|
|
$(OUT_KMOD)/$(KMOD_NAME)$(KMOD_EXT)
|
|
|
|
|
|
|
|
.PHONY: clean
|
|
|
|
clean:
|
|
|
|
rm -rf $(OUT)
|
|
|
|
make -C $(KDIR) M=$(TOP)/$(KMOD_NAME) clean
|