Radix cross Linux

The main Radix cross Linux repository contains the build scripts of packages, which have the most complete and common functionality for desktop machines

452 Commits   2 Branches   1 Tag
VERSION = 0.2.0

API_MAJOR = 0
API_MINOR = 1
API_PATCH = 0

CFLAGS += -std=gnu99 -D_FILE_OFFSET_BITS=64 -Wall -Wextra -O2 -ffast-math -g -MMD

PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
LIBDIR ?= $(PREFIX)/lib
INCLUDEDIR ?= $(PREFIX)/include

SRC_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
vpath %.c $(SRC_DIR)
vpath %.h $(SRC_DIR)
vpath %.pc.in $(SRC_DIR)

-include .config

ifdef CONFIG_DEBUG
    CFLAGS += -D_DEBUG
else
    CFLAGS += -DNDEBUG
endif

ifdef CONFIG_WINDOWS
    EXESUF ?= .exe
    DLLSUF ?= .dll
    LIBSUF ?= .a
else
    DLLSUF ?= .so
    LIBSUF ?= .a
    LIBS ?= -lm
    ifdef CONFIG_SHARED
        SONAMESUF ?= .$(API_MAJOR).$(API_MINOR).$(API_PATCH)
        SONAMESUF_MAJOR ?= .$(API_MAJOR)
        SONAME ?= libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
    endif
endif

ifdef CONFIG_SHARED
    OUT_LIB ?= libdcadec/libdcadec$(DLLSUF)$(SONAMESUF)
else
    OUT_LIB ?= libdcadec/libdcadec$(LIBSUF)
endif

OUT_DEC ?= dcadec$(EXESUF)
OUT_CUT ?= dcacut$(EXESUF)

OUT_DEV ?= test/stddev$(EXESUF)
SRC_DEV ?= test/stddev.c
CFLAGS_DEV ?= -O2 -Wall -Wextra

SRC_LIB = \
libdcadec/bitstream.c \
libdcadec/core_decoder.c \
libdcadec/dca_context.c \
libdcadec/dmix_tables.c \
libdcadec/exss_parser.c \
libdcadec/idct_fixed.c \
libdcadec/idct_float.c \
libdcadec/interpolator.c \
libdcadec/interpolator_fixed.c \
libdcadec/interpolator_float.c \
libdcadec/ta.c \
libdcadec/xll_decoder.c
INC_LIB = \
libdcadec/dca_context.h

ifndef CONFIG_SMALL
SRC_LIB += libdcadec/dca_frame.c
SRC_LIB += libdcadec/dca_stream.c
SRC_LIB += libdcadec/dca_waveout.c
INC_LIB += libdcadec/dca_frame.h
INC_LIB += libdcadec/dca_stream.h
INC_LIB += libdcadec/dca_waveout.h
endif

OBJ_LIB = $(SRC_LIB:.c=.o)
DEP_LIB = $(SRC_LIB:.c=.d)

SRC_DEC = dcadec.c
OBJ_DEC = $(SRC_DEC:.c=.o)
DEP_DEC = $(SRC_DEC:.c=.d)

SRC_CUT = dcacut.c
OBJ_CUT = $(SRC_CUT:.c=.o)
DEP_CUT = $(SRC_CUT:.c=.d)

default: $(OUT_LIB) $(OUT_DEC)

lib: $(OUT_LIB)

all: $(OUT_LIB) $(OUT_DEC) $(OUT_CUT)

-include $(DEP_LIB) $(DEP_DEC) $(DEP_CUT)

$(OBJ_LIB): | objdir
$(OBJ_DEC): | objdir
$(OBJ_CUT): | objdir

objdir:
	mkdir -p libdcadec

ifdef CONFIG_SHARED
    CFLAGS_DLL = $(CFLAGS) -DDCADEC_SHARED -DDCADEC_INTERNAL
    LDFLAGS_DLL = $(LDFLAGS) -shared

    ifdef CONFIG_WINDOWS
        IMP_LIB = libdcadec/libdcadec$(DLLSUF)$(LIBSUF)
        IMP_DEF = libdcadec/libdcadec.def
        EXTRA_LIB = $(IMP_LIB) $(IMP_DEF)
        LDFLAGS_DLL += -static-libgcc
        LDFLAGS_DLL += -Wl,--nxcompat,--dynamicbase
        LDFLAGS_DLL += -Wl,--output-def,$(IMP_DEF)
        LDFLAGS_DLL += -Wl,--out-implib,$(IMP_LIB)
    else
        CFLAGS_DLL += -fPIC -fvisibility=hidden
        ifdef SONAME
            LDFLAGS_DLL += -Wl,-soname,$(SONAME)
            EXTRA_LIB += libdcadec/libdcadec$(DLLSUF)
            EXTRA_LIB += libdcadec/libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
        endif
        IMP_LIB = -Llibdcadec -ldcadec
    endif

libdcadec/%.o: libdcadec/%.c
	$(CC) -c $(CFLAGS_DLL) -o $@ $<

$(OUT_LIB): $(OBJ_LIB)
	$(CC) $(LDFLAGS_DLL) -o $@ $(OBJ_LIB) $(LIBS)
ifdef SONAME
	ln -sf $(@F) libdcadec/libdcadec$(DLLSUF)
	ln -sf $(@F) libdcadec/libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
endif

$(OUT_DEC): $(OBJ_DEC) $(OUT_LIB)
	$(CC) $(LDFLAGS) -o $@ $(OBJ_DEC) $(IMP_LIB) $(LIBS)

$(OUT_CUT): $(OBJ_CUT) $(OUT_LIB)
	$(CC) $(LDFLAGS) -o $@ $(OBJ_CUT) $(IMP_LIB) $(LIBS)

else

$(OUT_LIB): $(OBJ_LIB)
	$(AR) crsu $@ $(OBJ_LIB)

$(OUT_DEC): $(OBJ_DEC) $(OUT_LIB)
	$(CC) $(LDFLAGS) -o $@ $(OBJ_DEC) $(OUT_LIB) $(LIBS)

$(OUT_CUT): $(OBJ_CUT) $(OUT_LIB)
	$(CC) $(LDFLAGS) -o $@ $(OBJ_CUT) $(OUT_LIB) $(LIBS)

endif

$(OUT_DEV): $(SRC_DEV)
	$(CC) $(LDFLAGS) -o $@ $(CFLAGS_DEV) $< $(LIBS)

check: $(OUT_DEC) $(OUT_DEV)
	cd test && ./test.sh

clean:
	$(RM) $(OUT_LIB) $(OBJ_LIB) $(DEP_LIB) $(EXTRA_LIB)
	$(RM) $(OUT_DEC) $(OBJ_DEC) $(DEP_DEC)
	$(RM) $(OUT_CUT) $(OBJ_CUT) $(DEP_CUT)
	$(RM) dcadec.pc
	$(RM) $(OUT_DEV)
	$(RM) -r test/decoded

.PHONY: dcadec.pc
dcadec.pc: dcadec.pc.in
	sed 's,%PREFIX%,$(PREFIX),;s,%LIBDIR%,$(LIBDIR),;s,%INCLUDEDIR%,$(INCLUDEDIR),;s,%VERSION%,$(VERSION),' $< > $@

install-lib: $(OUT_LIB) dcadec.pc
	install -d -m 755 $(DESTDIR)$(LIBDIR) $(DESTDIR)$(LIBDIR)/pkgconfig $(DESTDIR)$(INCLUDEDIR)/libdcadec
	install -m 644 $(OUT_LIB) $(DESTDIR)$(LIBDIR)
	install -m 644 $(addprefix $(SRC_DIR)/, $(INC_LIB)) $(DESTDIR)$(INCLUDEDIR)/libdcadec
	install -m 644 dcadec.pc $(DESTDIR)$(LIBDIR)/pkgconfig
ifdef SONAME
	ln -sf libdcadec$(DLLSUF)$(SONAMESUF) $(DESTDIR)$(LIBDIR)/libdcadec$(DLLSUF)
	ln -sf libdcadec$(DLLSUF)$(SONAMESUF) $(DESTDIR)$(LIBDIR)/libdcadec$(DLLSUF)$(SONAMESUF_MAJOR)
endif

install-dec: $(OUT_DEC)
	install -d -m 755 $(DESTDIR)$(BINDIR)
	install -m 755 $(OUT_DEC) $(DESTDIR)$(BINDIR)

install: install-lib install-dec