1885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#################### COMPILE OPTIONS #######################
2885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
3885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# Uncomment this for fixed-point build
4885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#FIXED_POINT=1
5885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
6885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# It is strongly recommended to uncomment one of these
7885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# VAR_ARRAYS: Use C99 variable-length arrays for stack allocation
8885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# USE_ALLOCA: Use alloca() for stack allocation
9885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# If none is defined, then the fallback is a non-threadsafe global array
10885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCFLAGS := -DUSE_ALLOCA $(CFLAGS)
11885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#CFLAGS := -DVAR_ARRAYS $(CFLAGS)
12885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
13885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# These options affect performance
14885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# HAVE_LRINTF: Use C99 intrinsics to speed up float-to-int conversion
15885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#CFLAGS := -DHAVE_LRINTF $(CFLAGS)
16885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
17885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org###################### END OF OPTIONS ######################
18885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
19e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org-include package_version
20e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org
21885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orginclude silk_sources.mk
22885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orginclude celt_sources.mk
23885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orginclude opus_sources.mk
24885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
25885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgifdef FIXED_POINT
26885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgSILK_SOURCES += $(SILK_SOURCES_FIXED)
27885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgelse
28885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgSILK_SOURCES += $(SILK_SOURCES_FLOAT)
29e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgOPUS_SOURCES += $(OPUS_SOURCES_FLOAT)
30885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgendif
31885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
32885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgEXESUFFIX =
33885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLIBPREFIX = lib
34885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLIBSUFFIX = .a
35885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgOBJSUFFIX = .o
36885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
37885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCC     = $(TOOLCHAIN_PREFIX)cc$(TOOLCHAIN_SUFFIX)
38885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgAR     = $(TOOLCHAIN_PREFIX)ar
39885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgRANLIB = $(TOOLCHAIN_PREFIX)ranlib
40885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCP     = $(TOOLCHAIN_PREFIX)cp
41885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
42885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgcppflags-from-defines   = $(addprefix -D,$(1))
43885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgcppflags-from-includes  = $(addprefix -I,$(1))
44885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgldflags-from-ldlibdirs  = $(addprefix -L,$(1))
45e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgldlibs-from-libs        = $(addprefix -l,$(1))
46885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
47885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgWARNINGS = -Wall -W -Wstrict-prototypes -Wextra -Wcast-align -Wnested-externs -Wshadow
48885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCFLAGS  += -O2 -g $(WARNINGS) -DOPUS_BUILD
49e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgCINCLUDES = include silk celt
50e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org
51885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgifdef FIXED_POINT
52885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCFLAGS += -DFIXED_POINT=1 -DDISABLE_FLOAT_API
53e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgCINCLUDES += silk/fixed
54e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgelse
55e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgCINCLUDES += silk/float
56885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgendif
57885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
58885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
59885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLIBS = m
60885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
61885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLDLIBDIRS = ./
62885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
63885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCFLAGS  += $(call cppflags-from-defines,$(CDEFINES))
64885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCFLAGS  += $(call cppflags-from-includes,$(CINCLUDES))
65885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLDFLAGS += $(call ldflags-from-ldlibdirs,$(LDLIBDIRS))
66885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLDLIBS  += $(call ldlibs-from-libs,$(LIBS))
67885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
68885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCOMPILE.c.cmdline   = $(CC) -c $(CFLAGS) -o $@ $<
69885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLINK.o              = $(CC) $(LDPREFLAGS) $(LDFLAGS)
70885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLINK.o.cmdline      = $(LINK.o) $^ $(LDLIBS) -o $@$(EXESUFFIX)
71885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
72885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgARCHIVE.cmdline     = $(AR) $(ARFLAGS) $@ $^ && $(RANLIB) $@
73885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
74885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org%$(OBJSUFFIX):%.c
75885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org	$(COMPILE.c.cmdline)
76885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
77885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org%$(OBJSUFFIX):%.cpp
78885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org	$(COMPILE.cpp.cmdline)
79885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
80885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# Directives
81885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
82885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
83885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# Variable definitions
84885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLIB_NAME = opus
85885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgTARGET = $(LIBPREFIX)$(LIB_NAME)$(LIBSUFFIX)
86885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
87885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgSRCS_C = $(SILK_SOURCES) $(CELT_SOURCES) $(OPUS_SOURCES)
88885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
89885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgOBJS := $(patsubst %.c,%$(OBJSUFFIX),$(SRCS_C))
90885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
91885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgOPUSDEMO_SRCS_C = src/opus_demo.c
92885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgOPUSDEMO_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(OPUSDEMO_SRCS_C))
93885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
94885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgOPUSCOMPARE_SRCS_C = src/opus_compare.c
95885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgOPUSCOMPARE_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(OPUSCOMPARE_SRCS_C))
96885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
97885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# Rules
98e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgall: lib opus_demo opus_compare
99885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
100885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orglib: $(TARGET)
101885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
102885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org$(TARGET): $(OBJS)
103885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org	$(ARCHIVE.cmdline)
104885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
105885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgopus_demo$(EXESUFFIX): $(OPUSDEMO_OBJS) $(TARGET)
106885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org	$(LINK.o.cmdline)
107885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
108885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgopus_compare$(EXESUFFIX): $(OPUSCOMPARE_OBJS)
109885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org	$(LINK.o.cmdline)
110885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
111e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgcelt/celt.o: CFLAGS += -DPACKAGE_VERSION='$(PACKAGE_VERSION)'
112e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgcelt/celt.o: package_version
113e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org
114e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgpackage_version: force
115e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org	@if [ -x ./update_version ]; then \
116e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org		./update_version || true; \
117e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org	elif [ ! -e ./package_version ]; then \
118e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org		echo 'PACKAGE_VERSION="unknown"' > ./package_version; \
119e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org	fi
120e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org
121e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgforce:
122e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org
123885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgclean:
124e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org	rm -f opus_demo$(EXESUFFIX) opus_compare$(EXESUFFIX) $(TARGET) \
125e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org		$(OBJS) $(OPUSDEMO_OBJS) $(OPUSCOMPARE_OBJS)
126e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org
127e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org.PHONY: all lib clean
128