amduat-api/notes/Makefile

128 lines
2.9 KiB
Makefile
Raw Normal View History

# -------------------------------------------------------------------
# ASL Capture Makefile
#
# Supports:
# - PIPE-only build (default)
# - PTY-enabled build (ENABLE_PTY=1)
#
# Targets:
# make
# make ENABLE_PTY=1
# make install DESTDIR=...
# make clean
# -------------------------------------------------------------------
# Toolchain
CC ?= cc
AR ?= ar
RANLIB ?= ranlib
INSTALL ?= install
# Paths
PREFIX ?= /usr
BINDIR ?= $(PREFIX)/bin
LIBDIR ?= $(PREFIX)/lib
INCLUDEDIR ?= $(PREFIX)/include/asl
# Versioning (library ABI)
LIBNAME = asl-capture
LIB_MAJOR = 0
LIB_MINOR = 1
LIB_PATCH = 0
SONAME = lib$(LIBNAME).so.$(LIB_MAJOR)
REALNAME = lib$(LIBNAME).so.$(LIB_MAJOR).$(LIB_MINOR).$(LIB_PATCH)
# Flags
CFLAGS ?= -O2
CFLAGS += -Wall -Wextra -fPIC
CPPFLAGS += -I.
LDFLAGS ?=
LIBS ?=
# Optional PTY support
ifeq ($(ENABLE_PTY),1)
CPPFLAGS += -DASL_ENABLE_PTY
LIBS += -lutil
endif
# Sources
LIB_SRC = asl_capture.c
LIB_OBJ = $(LIB_SRC:.c=.o)
TOOL_SRC = asl_capture_tool.c
TOOL_OBJ = $(TOOL_SRC:.c=.o)
# Outputs
STATIC_LIB = lib$(LIBNAME).a
SHARED_LIB = $(REALNAME)
SONAME_LIB = $(SONAME)
TOOL = asl-capture
# -------------------------------------------------------------------
# Default target
# -------------------------------------------------------------------
all: $(STATIC_LIB) $(SHARED_LIB) $(TOOL)
# -------------------------------------------------------------------
# Library builds
# -------------------------------------------------------------------
%.o: %.c
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
$(STATIC_LIB): $(LIB_OBJ)
$(AR) rcs $@ $^
$(RANLIB) $@
$(SHARED_LIB): $(LIB_OBJ)
$(CC) -shared \
-Wl,-soname,$(SONAME_LIB) \
-o $@ $^ $(LIBS)
# Symlink for soname
$(SONAME_LIB): $(SHARED_LIB)
ln -sf $(REALNAME) $(SONAME_LIB)
# -------------------------------------------------------------------
# Tool build
# -------------------------------------------------------------------
$(TOOL): $(TOOL_OBJ) $(SHARED_LIB)
$(CC) -o $@ $(TOOL_OBJ) \
-L. -l$(LIBNAME) $(LIBS)
# -------------------------------------------------------------------
# Install
# -------------------------------------------------------------------
install: all
# Library
$(INSTALL) -d $(DESTDIR)$(LIBDIR)
$(INSTALL) -m 0755 $(SHARED_LIB) $(DESTDIR)$(LIBDIR)/
ln -sf $(REALNAME) $(DESTDIR)$(LIBDIR)/$(SONAME_LIB)
ln -sf $(SONAME_LIB) $(DESTDIR)$(LIBDIR)/lib$(LIBNAME).so
# Static lib
$(INSTALL) -m 0644 $(STATIC_LIB) $(DESTDIR)$(LIBDIR)/
# Headers
$(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)
$(INSTALL) -m 0644 asl_capture.h $(DESTDIR)$(INCLUDEDIR)/
# Tool
$(INSTALL) -d $(DESTDIR)$(BINDIR)
$(INSTALL) -m 0755 $(TOOL) $(DESTDIR)$(BINDIR)/
# -------------------------------------------------------------------
# Clean
# -------------------------------------------------------------------
clean:
rm -f *.o *.a *.so* $(TOOL)
.PHONY: all install clean