Convert to library
This commit is contained in:
56
Makefile
56
Makefile
@@ -1,6 +1,8 @@
|
||||
CROSS_COMPILE ?=
|
||||
|
||||
TARGET_FILE ?= ftdi_gpio
|
||||
STATIC_LIB_FILE ?= libftdi_gpio.a
|
||||
DYNAMIC_LIB_FILE ?= libftdi_gpio.so
|
||||
|
||||
CC = $(CROSS_COMPILE)gcc
|
||||
CPP = $(CROSS_COMPILE)cpp
|
||||
@@ -10,24 +12,28 @@ GENHTML = genhtml
|
||||
|
||||
SRC_DIR = src
|
||||
OBJ_DIR = obj
|
||||
LIB_DIR = lib
|
||||
BIN_DIR = bin
|
||||
COVERAGE_DIR = coverage
|
||||
UNIT_TEST_SRC_DIR = test/unit
|
||||
UNIT_TEST_OBJ_DIR = $(OBJ_DIR)/$(UNIT_TEST_SRC_DIR)
|
||||
|
||||
PREFIX ?= /usr
|
||||
LIB_INSTALL_DIR ?= $(PREFIX)/lib/ftdi_gpio
|
||||
INC_INSTALL_DIR ?= $(PREFIX)/include/ftdi_gpio
|
||||
|
||||
INCLUDES := inc
|
||||
INCLUDES += /usr/include/libftdi1
|
||||
|
||||
ifneq "$(findstring $(MAKECMDGOALS), build_unit_test exec_unit_test coverage)" ""
|
||||
INCLUDES += test/inc
|
||||
|
||||
C_FLAGS += --coverage
|
||||
L_FLAGS += --coverage
|
||||
|
||||
else
|
||||
LIBS := ftdi1
|
||||
endif
|
||||
|
||||
L_FLAGS += -shared -Wl,-soname,$(notdir $(DYNAMIC_LIB))
|
||||
C_FLAGS += -fpic
|
||||
|
||||
C_FLAGS += -O0 -g -Wall -Wextra -Werror
|
||||
CPP_FLAGS += $(addprefix -I, $(INCLUDES))
|
||||
CHECK_FLAGS = --enable=all --template=gcc --error-exitcode=1 --suppress=missingIncludeSystem
|
||||
@@ -40,13 +46,30 @@ UNIT_TEST_OBJS = $(patsubst $(SRC_DIR)%,$(OBJ_DIR)%,$(patsubst $(UNIT_TEST_SRC_D
|
||||
|
||||
OBJS = $(C_OBJS)
|
||||
|
||||
TARGET = $(BIN_DIR)/$(TARGET_FILE)
|
||||
STATIC_LIB = $(LIB_DIR)/$(STATIC_LIB_FILE)
|
||||
DYNAMIC_LIB = $(LIB_DIR)/$(DYNAMIC_LIB_FILE)
|
||||
UNIT_TEST_TARGET = $(BIN_DIR)/$(UNIT_TEST_SRC_DIR)/$(TARGET_FILE)
|
||||
|
||||
THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST))
|
||||
|
||||
.PHONY: all
|
||||
all: $(TARGET)
|
||||
.PHONY: all install clean
|
||||
all: $(STATIC_LIB) $(DYNAMIC_LIB)
|
||||
|
||||
install: all
|
||||
install -d $(LIB_INSTALL_DIR)
|
||||
install -d $(INC_INSTALL_DIR)
|
||||
install -m 0644 $(STATIC_LIB) $(LIB_INSTALL_DIR)
|
||||
install -m 0777 $(DYNAMIC_LIB) $(LIB_INSTALL_DIR)
|
||||
install -m 0644 inc/* $(INC_INSTALL_DIR)
|
||||
|
||||
clean:
|
||||
rm -f $(STATIC_LIB) $(DYNAMIC_LIB)
|
||||
rm -f $(OBJS) $(patsubst %.o,%.d,$(OBJS))
|
||||
rm -f $(UNIT_TEST_OBJS) $(patsubst %.o,%.d,$(UNIT_TEST_OBJS)) $(UNIT_TEST_TARGET)
|
||||
rm -f $(UNIT_TEST_OBJ_DIR)/*.gcda
|
||||
rm -f $(UNIT_TEST_OBJ_DIR)/*.gcno
|
||||
rm -f $(OBJ_DIR)/*.gcda $(OBJ_DIR)/*.gcno
|
||||
rm -fr $(COVERAGE_DIR)
|
||||
|
||||
.PHONY: coverage
|
||||
coverage: _cov_genhtml
|
||||
@@ -80,11 +103,15 @@ check: $(C_SRCS)
|
||||
|
||||
$(UNIT_TEST_TARGET): $(UNIT_TEST_OBJS) $(THIS_MAKEFILE)
|
||||
@mkdir -p $(BIN_DIR)/$(UNIT_TEST_SRC_DIR)
|
||||
$(CC) $(C_FLAGS) $(LD_FLAGS) $(UNIT_TEST_OBJS) $(addprefix -l,$(LIBS)) -o $@
|
||||
$(CC) $(C_FLAGS) $(LD_FLAGS) $(UNIT_TEST_OBJS) -o $@
|
||||
|
||||
$(TARGET): $(OBJS) $(THIS_MAKEFILE)
|
||||
@mkdir -p $(BIN_DIR)
|
||||
$(CC) $(C_FLAGS) $(LD_FLAGS) $(OBJS) $(addprefix -l,$(LIBS)) -o $@
|
||||
$(STATIC_LIB): $(OBJS) $(THIS_MAKEFILE)
|
||||
@mkdir -p $(LIB_DIR)
|
||||
$(AR) rcs $(STATIC_LIB) $(OBJS)
|
||||
|
||||
$(DYNAMIC_LIB): $(OBJS) $(THIS_MAKEFILE)
|
||||
@mkdir -p $(LIB_DIR)
|
||||
$(CC) $(L_FLAGS) -o $(DYNAMIC_LIB) $(OBJS)
|
||||
|
||||
.PRECIOUS: $(OBJ_DIR)/%.d
|
||||
$(OBJ_DIR)/%.d: $(SRC_DIR)/%.c
|
||||
@@ -104,13 +131,6 @@ $(UNIT_TEST_OBJ_DIR)/%.o: $(UNIT_TEST_SRC_DIR)/%.c $(UNIT_TEST_OBJ_DIR)/%.d
|
||||
@mkdir -p $(UNIT_TEST_OBJ_DIR)
|
||||
$(CC) -c $(CPP_FLAGS) $(C_FLAGS) $< -o $@
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f $(OBJS) $(patsubst %.o,%.d,$(OBJS)) $(TARGET)
|
||||
rm -f $(UNIT_TEST_OBJS) $(patsubst %.o,%.d,$(UNIT_TEST_OBJS)) $(UNIT_TEST_TARGET)
|
||||
rm -f $(OBJ_DIR)/*.gcda $(OBJ_DIR)/*.gcno
|
||||
rm -fr $(COVERAGE_DIR)
|
||||
|
||||
ifneq ($(MAKECMDGOALS),clean)
|
||||
-include $(patsubst %.o,%.d,$(OBJS))
|
||||
endif
|
||||
|
Reference in New Issue
Block a user