5 kx VERSION = 0.2.0
5 kx
5 kx API_MAJOR = 0
5 kx API_MINOR = 1
5 kx API_PATCH = 0
5 kx
5 kx CFLAGS += -std=gnu99 -D_FILE_OFFSET_BITS=64 -Wall -Wextra -O2 -ffast-math -g -MMD
5 kx
5 kx PREFIX ?= /usr/local
5 kx BINDIR ?= $(PREFIX)/bin
5 kx LIBDIR ?= $(PREFIX)/lib
5 kx INCLUDEDIR ?= $(PREFIX)/include
5 kx
5 kx SRC_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
5 kx vpath %.c $(SRC_DIR)
5 kx vpath %.h $(SRC_DIR)
5 kx vpath %.pc.in $(SRC_DIR)
5 kx
5 kx -include .config
5 kx
5 kx ifdef CONFIG_DEBUG
5 kx CFLAGS += -D_DEBUG
5 kx else
5 kx CFLAGS += -DNDEBUG
5 kx endif
5 kx
5 kx ifdef CONFIG_WINDOWS
5 kx EXESUF ?= .exe
5 kx DLLSUF ?= .dll
5 kx LIBSUF ?= .a
5 kx else
5 kx DLLSUF ?= .so
5 kx LIBSUF ?= .a
5 kx LIBS ?= -lm
5 kx ifdef CONFIG_SHARED
5 kx SONAMESUF ?= .$(API_MAJOR).$(API_MINOR).$(API_PATCH)
5 kx SONAMESUF_MAJOR ?= .$(API_MAJOR)
5 kx SONAME ?= libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
5 kx endif
5 kx endif
5 kx
5 kx ifdef CONFIG_SHARED
5 kx OUT_LIB ?= libdcadec/libdcadec$(DLLSUF)$(SONAMESUF)
5 kx else
5 kx OUT_LIB ?= libdcadec/libdcadec$(LIBSUF)
5 kx endif
5 kx
5 kx OUT_DEC ?= dcadec$(EXESUF)
5 kx OUT_CUT ?= dcacut$(EXESUF)
5 kx
5 kx OUT_DEV ?= test/stddev$(EXESUF)
5 kx SRC_DEV ?= test/stddev.c
5 kx CFLAGS_DEV ?= -O2 -Wall -Wextra
5 kx
5 kx SRC_LIB = \
5 kx libdcadec/bitstream.c \
5 kx libdcadec/core_decoder.c \
5 kx libdcadec/dca_context.c \
5 kx libdcadec/dmix_tables.c \
5 kx libdcadec/exss_parser.c \
5 kx libdcadec/idct_fixed.c \
5 kx libdcadec/idct_float.c \
5 kx libdcadec/interpolator.c \
5 kx libdcadec/interpolator_fixed.c \
5 kx libdcadec/interpolator_float.c \
5 kx libdcadec/ta.c \
5 kx libdcadec/xll_decoder.c
5 kx INC_LIB = \
5 kx libdcadec/dca_context.h
5 kx
5 kx ifndef CONFIG_SMALL
5 kx SRC_LIB += libdcadec/dca_frame.c
5 kx SRC_LIB += libdcadec/dca_stream.c
5 kx SRC_LIB += libdcadec/dca_waveout.c
5 kx INC_LIB += libdcadec/dca_frame.h
5 kx INC_LIB += libdcadec/dca_stream.h
5 kx INC_LIB += libdcadec/dca_waveout.h
5 kx endif
5 kx
5 kx OBJ_LIB = $(SRC_LIB:.c=.o)
5 kx DEP_LIB = $(SRC_LIB:.c=.d)
5 kx
5 kx SRC_DEC = dcadec.c
5 kx OBJ_DEC = $(SRC_DEC:.c=.o)
5 kx DEP_DEC = $(SRC_DEC:.c=.d)
5 kx
5 kx SRC_CUT = dcacut.c
5 kx OBJ_CUT = $(SRC_CUT:.c=.o)
5 kx DEP_CUT = $(SRC_CUT:.c=.d)
5 kx
5 kx default: $(OUT_LIB) $(OUT_DEC)
5 kx
5 kx lib: $(OUT_LIB)
5 kx
5 kx all: $(OUT_LIB) $(OUT_DEC) $(OUT_CUT)
5 kx
5 kx -include $(DEP_LIB) $(DEP_DEC) $(DEP_CUT)
5 kx
5 kx $(OBJ_LIB): | objdir
5 kx $(OBJ_DEC): | objdir
5 kx $(OBJ_CUT): | objdir
5 kx
5 kx objdir:
5 kx mkdir -p libdcadec
5 kx
5 kx ifdef CONFIG_SHARED
5 kx CFLAGS_DLL = $(CFLAGS) -DDCADEC_SHARED -DDCADEC_INTERNAL
5 kx LDFLAGS_DLL = $(LDFLAGS) -shared
5 kx
5 kx ifdef CONFIG_WINDOWS
5 kx IMP_LIB = libdcadec/libdcadec$(DLLSUF)$(LIBSUF)
5 kx IMP_DEF = libdcadec/libdcadec.def
5 kx EXTRA_LIB = $(IMP_LIB) $(IMP_DEF)
5 kx LDFLAGS_DLL += -static-libgcc
5 kx LDFLAGS_DLL += -Wl,--nxcompat,--dynamicbase
5 kx LDFLAGS_DLL += -Wl,--output-def,$(IMP_DEF)
5 kx LDFLAGS_DLL += -Wl,--out-implib,$(IMP_LIB)
5 kx else
5 kx CFLAGS_DLL += -fPIC -fvisibility=hidden
5 kx ifdef SONAME
5 kx LDFLAGS_DLL += -Wl,-soname,$(SONAME)
5 kx EXTRA_LIB += libdcadec/libdcadec$(DLLSUF)
5 kx EXTRA_LIB += libdcadec/libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
5 kx endif
5 kx IMP_LIB = -Llibdcadec -ldcadec
5 kx endif
5 kx
5 kx libdcadec/%.o: libdcadec/%.c
5 kx $(CC) -c $(CFLAGS_DLL) -o $@ $<
5 kx
5 kx $(OUT_LIB): $(OBJ_LIB)
5 kx $(CC) $(LDFLAGS_DLL) -o $@ $(OBJ_LIB) $(LIBS)
5 kx ifdef SONAME
5 kx ln -sf $(@F) libdcadec/libdcadec$(DLLSUF)
5 kx ln -sf $(@F) libdcadec/libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
5 kx endif
5 kx
5 kx $(OUT_DEC): $(OBJ_DEC) $(OUT_LIB)
5 kx $(CC) $(LDFLAGS) -o $@ $(OBJ_DEC) $(IMP_LIB) $(LIBS)
5 kx
5 kx $(OUT_CUT): $(OBJ_CUT) $(OUT_LIB)
5 kx $(CC) $(LDFLAGS) -o $@ $(OBJ_CUT) $(IMP_LIB) $(LIBS)
5 kx
5 kx else
5 kx
5 kx $(OUT_LIB): $(OBJ_LIB)
5 kx $(AR) crsu $@ $(OBJ_LIB)
5 kx
5 kx $(OUT_DEC): $(OBJ_DEC) $(OUT_LIB)
5 kx $(CC) $(LDFLAGS) -o $@ $(OBJ_DEC) $(OUT_LIB) $(LIBS)
5 kx
5 kx $(OUT_CUT): $(OBJ_CUT) $(OUT_LIB)
5 kx $(CC) $(LDFLAGS) -o $@ $(OBJ_CUT) $(OUT_LIB) $(LIBS)
5 kx
5 kx endif
5 kx
5 kx $(OUT_DEV): $(SRC_DEV)
5 kx $(CC) $(LDFLAGS) -o $@ $(CFLAGS_DEV) $< $(LIBS)
5 kx
5 kx check: $(OUT_DEC) $(OUT_DEV)
5 kx cd test && ./test.sh
5 kx
5 kx clean:
5 kx $(RM) $(OUT_LIB) $(OBJ_LIB) $(DEP_LIB) $(EXTRA_LIB)
5 kx $(RM) $(OUT_DEC) $(OBJ_DEC) $(DEP_DEC)
5 kx $(RM) $(OUT_CUT) $(OBJ_CUT) $(DEP_CUT)
5 kx $(RM) dcadec.pc
5 kx $(RM) $(OUT_DEV)
5 kx $(RM) -r test/decoded
5 kx
5 kx .PHONY: dcadec.pc
5 kx dcadec.pc: dcadec.pc.in
5 kx sed 's,%PREFIX%,$(PREFIX),;s,%LIBDIR%,$(LIBDIR),;s,%INCLUDEDIR%,$(INCLUDEDIR),;s,%VERSION%,$(VERSION),' $< > $@
5 kx
5 kx install-lib: $(OUT_LIB) dcadec.pc
5 kx install -d -m 755 $(DESTDIR)$(LIBDIR) $(DESTDIR)$(LIBDIR)/pkgconfig $(DESTDIR)$(INCLUDEDIR)/libdcadec
5 kx install -m 644 $(OUT_LIB) $(DESTDIR)$(LIBDIR)
5 kx install -m 644 $(addprefix $(SRC_DIR)/, $(INC_LIB)) $(DESTDIR)$(INCLUDEDIR)/libdcadec
5 kx install -m 644 dcadec.pc $(DESTDIR)$(LIBDIR)/pkgconfig
5 kx ifdef SONAME
5 kx ln -sf libdcadec$(DLLSUF)$(SONAMESUF) $(DESTDIR)$(LIBDIR)/libdcadec$(DLLSUF)
5 kx ln -sf libdcadec$(DLLSUF)$(SONAMESUF) $(DESTDIR)$(LIBDIR)/libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
5 kx endif
5 kx
5 kx install-dec: $(OUT_DEC)
5 kx install -d -m 755 $(DESTDIR)$(BINDIR)
5 kx install -m 755 $(OUT_DEC) $(DESTDIR)$(BINDIR)
5 kx
5 kx install: install-lib install-dec