Replacement of some gint32 fields with enums may cause "warning: passing argument xxx from incompatible pointer type" or something similar at compile time but it's safe from the ABI prospective because those enums have the same size as gint32 (and that's checked at compiled time). It may, however, cause compilation errors in the projects compiled with -Werror
254 lines
5.4 KiB
Makefile
254 lines
5.4 KiB
Makefile
# -*- Mode: makefile-gmake -*-
|
|
|
|
.PHONY: clean all debug release coverage test
|
|
.PHONY: debug_lib release_lib coverage_lib
|
|
.PHONY: print_debug_lib print_release_lib print_coverage_lib
|
|
.PHONY: pkgconfig install install-dev
|
|
|
|
|
|
#
|
|
# Required packages
|
|
#
|
|
|
|
PKGS = libgbinder libglibutil glib-2.0 gobject-2.0
|
|
|
|
#
|
|
# Default target
|
|
#
|
|
|
|
all: debug release pkgconfig
|
|
|
|
#
|
|
# Library version
|
|
#
|
|
|
|
VERSION_MAJOR = 1
|
|
VERSION_MINOR = 4
|
|
VERSION_RELEASE = 2
|
|
|
|
# Version for pkg-config
|
|
PCVERSION = $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_RELEASE)
|
|
|
|
#
|
|
# Library name
|
|
#
|
|
|
|
NAME = gbinder-radio
|
|
LIB_NAME = lib$(NAME)
|
|
LIB_DEV_SYMLINK = $(LIB_NAME).so
|
|
LIB_SYMLINK1 = $(LIB_DEV_SYMLINK).$(VERSION_MAJOR)
|
|
LIB_SYMLINK2 = $(LIB_SYMLINK1).$(VERSION_MINOR)
|
|
LIB_SONAME = $(LIB_SYMLINK1)
|
|
LIB_SO = $(LIB_SONAME).$(VERSION_MINOR).$(VERSION_RELEASE)
|
|
LIB = $(LIB_NAME).a
|
|
|
|
#
|
|
# Sources
|
|
#
|
|
|
|
SRC = \
|
|
radio_client.c \
|
|
radio_instance.c \
|
|
radio_registry.c \
|
|
radio_request.c \
|
|
radio_request_group.c \
|
|
radio_util.c
|
|
|
|
#
|
|
# Directories
|
|
#
|
|
|
|
SRC_DIR = src
|
|
INCLUDE_DIR = include
|
|
BUILD_DIR = build
|
|
DEBUG_BUILD_DIR = $(BUILD_DIR)/debug
|
|
RELEASE_BUILD_DIR = $(BUILD_DIR)/release
|
|
COVERAGE_BUILD_DIR = $(BUILD_DIR)/coverage
|
|
|
|
#
|
|
# Tools and flags
|
|
#
|
|
|
|
CC = $(CROSS_COMPILE)gcc
|
|
LD = $(CC)
|
|
WARNINGS = -Wall -Wstrict-aliasing -Wunused-result
|
|
INCLUDES = -I$(INCLUDE_DIR)
|
|
BASE_FLAGS = -fPIC
|
|
FULL_CFLAGS = $(BASE_FLAGS) $(CFLAGS) $(DEFINES) $(WARNINGS) $(INCLUDES) \
|
|
-MMD -MP $(shell pkg-config --cflags $(PKGS))
|
|
FULL_LDFLAGS = $(BASE_FLAGS) $(LDFLAGS) -shared -Wl,-soname,$(LIB_SONAME) \
|
|
$(shell pkg-config --libs $(PKGS)) -lpthread
|
|
DEBUG_FLAGS = -g
|
|
RELEASE_FLAGS =
|
|
COVERAGE_FLAGS = -g
|
|
|
|
KEEP_SYMBOLS ?= 0
|
|
ifneq ($(KEEP_SYMBOLS),0)
|
|
RELEASE_FLAGS += -g
|
|
endif
|
|
|
|
DEBUG_LDFLAGS = $(FULL_LDFLAGS) $(DEBUG_FLAGS)
|
|
RELEASE_LDFLAGS = $(FULL_LDFLAGS) $(RELEASE_FLAGS)
|
|
DEBUG_CFLAGS = $(FULL_CFLAGS) $(DEBUG_FLAGS) -DDEBUG
|
|
RELEASE_CFLAGS = $(FULL_CFLAGS) $(RELEASE_FLAGS) -O2
|
|
COVERAGE_CFLAGS = $(FULL_CFLAGS) $(COVERAGE_FLAGS) --coverage
|
|
|
|
#
|
|
# Files
|
|
#
|
|
|
|
PKGCONFIG = $(BUILD_DIR)/$(LIB_NAME).pc
|
|
DEBUG_OBJS = $(SRC:%.c=$(DEBUG_BUILD_DIR)/%.o)
|
|
RELEASE_OBJS = $(SRC:%.c=$(RELEASE_BUILD_DIR)/%.o)
|
|
COVERAGE_OBJS = $(SRC:%.c=$(COVERAGE_BUILD_DIR)/%.o)
|
|
|
|
#
|
|
# Dependencies
|
|
#
|
|
|
|
DEPS = $(DEBUG_OBJS:%.o=%.d) $(RELEASE_OBJS:%.o=%.d)
|
|
ifneq ($(MAKECMDGOALS),clean)
|
|
ifneq ($(strip $(DEPS)),)
|
|
-include $(DEPS)
|
|
endif
|
|
endif
|
|
|
|
$(PKGCONFIG): | $(BUILD_DIR)
|
|
$(DEBUG_OBJS) $(DEBUG_SO): | $(DEBUG_BUILD_DIR)
|
|
$(RELEASE_OBJS) $(RELEASE_SO): | $(RELEASE_BUILD_DIR)
|
|
$(COVERAGE_OBJS) $(COVERAGE_LIB): | $(COVERAGE_BUILD_DIR)
|
|
|
|
#
|
|
# Rules
|
|
#
|
|
|
|
DEBUG_SO = $(DEBUG_BUILD_DIR)/$(LIB_SO)
|
|
RELEASE_SO = $(RELEASE_BUILD_DIR)/$(LIB_SO)
|
|
DEBUG_LINK = $(DEBUG_BUILD_DIR)/$(LIB_SYMLINK1)
|
|
RELEASE_LINK = $(RELEASE_BUILD_DIR)/$(LIB_SYMLINK1)
|
|
DEBUG_LIB = $(DEBUG_BUILD_DIR)/$(LIB)
|
|
RELEASE_LIB = $(RELEASE_BUILD_DIR)/$(LIB)
|
|
COVERAGE_LIB = $(COVERAGE_BUILD_DIR)/$(LIB)
|
|
|
|
debug: $(DEBUG_SO)
|
|
|
|
release: $(RELEASE_SO)
|
|
|
|
debug_lib: $(DEBUG_LIB)
|
|
|
|
release_lib: $(RELEASE_LIB)
|
|
|
|
coverage_lib: $(COVERAGE_LIB)
|
|
|
|
pkgconfig: $(PKGCONFIG)
|
|
|
|
print_debug_lib:
|
|
@echo $(DEBUG_LIB)
|
|
|
|
print_release_lib:
|
|
@echo $(RELEASE_LIB)
|
|
|
|
print_coverage_lib:
|
|
@echo $(COVERAGE_LIB)
|
|
|
|
clean:
|
|
make -C unit clean
|
|
rm -f *~ $(SRC_DIR)/*~ $(INCLUDE_DIR)/*~
|
|
rm -fr $(BUILD_DIR) RPMS installroot
|
|
rm -fr debian/tmp debian/libgbinder-radio debian/libgbinder-radio-dev
|
|
rm -f documentation.list debian/files debian/*.substvars
|
|
rm -f debian/*.debhelper.log debian/*.debhelper debian/*~
|
|
rm -f debian/*.install
|
|
|
|
test:
|
|
make -C unit test
|
|
|
|
$(BUILD_DIR):
|
|
mkdir -p $@
|
|
|
|
$(DEBUG_BUILD_DIR):
|
|
mkdir -p $@
|
|
|
|
$(RELEASE_BUILD_DIR):
|
|
mkdir -p $@
|
|
|
|
$(COVERAGE_BUILD_DIR):
|
|
mkdir -p $@
|
|
|
|
$(DEBUG_BUILD_DIR)/%.o : $(SRC_DIR)/%.c
|
|
$(CC) -c $(DEBUG_CFLAGS) -MT"$@" -MF"$(@:%.o=%.d)" $< -o $@
|
|
|
|
$(RELEASE_BUILD_DIR)/%.o : $(SRC_DIR)/%.c
|
|
$(CC) -c $(RELEASE_CFLAGS) -MT"$@" -MF"$(@:%.o=%.d)" $< -o $@
|
|
|
|
$(COVERAGE_BUILD_DIR)/%.o : $(SRC_DIR)/%.c
|
|
$(CC) -c $(COVERAGE_CFLAGS) -MT"$@" -MF"$(@:%.o=%.d)" $< -o $@
|
|
|
|
$(DEBUG_SO): $(DEBUG_OBJS)
|
|
$(LD) $(DEBUG_OBJS) $(DEBUG_LDFLAGS) -o $@
|
|
ln -sf $(LIB_SO) $(DEBUG_LINK)
|
|
|
|
$(RELEASE_SO): $(RELEASE_OBJS)
|
|
$(LD) $(RELEASE_OBJS) $(RELEASE_LDFLAGS) -o $@
|
|
ln -sf $(LIB_SO) $(RELEASE_LINK)
|
|
ifeq ($(KEEP_SYMBOLS),0)
|
|
strip $@
|
|
endif
|
|
|
|
$(DEBUG_LIB): $(DEBUG_OBJS)
|
|
$(AR) rc $@ $?
|
|
ranlib $@
|
|
|
|
$(RELEASE_LIB): $(RELEASE_OBJS)
|
|
$(AR) rc $@ $?
|
|
ranlib $@
|
|
|
|
$(COVERAGE_LIB): $(COVERAGE_OBJS)
|
|
$(AR) rc $@ $?
|
|
ranlib $@
|
|
|
|
#
|
|
# LIBDIR usually gets substituted with arch specific dir.
|
|
# It's relative in deb build and can be whatever in rpm build.
|
|
#
|
|
|
|
LIBDIR ?= usr/lib
|
|
ABS_LIBDIR := $(shell echo /$(LIBDIR) | sed -r 's|/+|/|g')
|
|
|
|
$(PKGCONFIG): $(LIB_NAME).pc.in Makefile
|
|
sed -e 's|@version@|$(PCVERSION)|g' -e 's|@libdir@|$(ABS_LIBDIR)|g' $< > $@
|
|
|
|
debian/%.install: debian/%.install.in
|
|
sed 's|@LIBDIR@|$(LIBDIR)|g' $< > $@
|
|
|
|
#
|
|
# Install
|
|
#
|
|
|
|
INSTALL = install
|
|
INSTALL_DIRS = $(INSTALL) -d
|
|
INSTALL_FILES = $(INSTALL) -m 644
|
|
|
|
INSTALL_LIB_DIR = $(DESTDIR)$(ABS_LIBDIR)
|
|
INSTALL_INCLUDE_DIR = $(DESTDIR)/usr/include/$(NAME)
|
|
INSTALL_PKGCONFIG_DIR = $(DESTDIR)$(ABS_LIBDIR)/pkgconfig
|
|
|
|
install: $(INSTALL_LIB_DIR)
|
|
$(INSTALL) -m 755 $(RELEASE_SO) $(INSTALL_LIB_DIR)
|
|
ln -sf $(LIB_SO) $(INSTALL_LIB_DIR)/$(LIB_SYMLINK2)
|
|
ln -sf $(LIB_SYMLINK2) $(INSTALL_LIB_DIR)/$(LIB_SYMLINK1)
|
|
|
|
install-dev: install $(INSTALL_INCLUDE_DIR) $(INSTALL_PKGCONFIG_DIR)
|
|
$(INSTALL_FILES) $(INCLUDE_DIR)/*.h $(INSTALL_INCLUDE_DIR)
|
|
$(INSTALL_FILES) $(PKGCONFIG) $(INSTALL_PKGCONFIG_DIR)
|
|
ln -sf $(LIB_SYMLINK1) $(INSTALL_LIB_DIR)/$(LIB_DEV_SYMLINK)
|
|
|
|
$(INSTALL_LIB_DIR):
|
|
$(INSTALL_DIRS) $@
|
|
|
|
$(INSTALL_INCLUDE_DIR):
|
|
$(INSTALL_DIRS) $@
|
|
|
|
$(INSTALL_PKGCONFIG_DIR):
|
|
$(INSTALL_DIRS) $@
|