xref: /aosp_15_r20/external/libopus/Makefile.unix (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
1*a58d3d2aSXin Li#################### COMPILE OPTIONS #######################
2*a58d3d2aSXin Li
3*a58d3d2aSXin Li# Uncomment this for fixed-point build
4*a58d3d2aSXin Li#FIXED_POINT=1
5*a58d3d2aSXin Li
6*a58d3d2aSXin Li# It is strongly recommended to uncomment one of these
7*a58d3d2aSXin Li# VAR_ARRAYS: Use C99 variable-length arrays for stack allocation
8*a58d3d2aSXin Li# USE_ALLOCA: Use alloca() for stack allocation
9*a58d3d2aSXin Li# If none is defined, then the fallback is a non-threadsafe global array
10*a58d3d2aSXin LiCFLAGS := -DUSE_ALLOCA $(CFLAGS)
11*a58d3d2aSXin Li#CFLAGS := -DVAR_ARRAYS $(CFLAGS)
12*a58d3d2aSXin Li
13*a58d3d2aSXin Li# These options affect performance
14*a58d3d2aSXin Li# HAVE_LRINTF: Use C99 intrinsics to speed up float-to-int conversion
15*a58d3d2aSXin Li#CFLAGS := -DHAVE_LRINTF $(CFLAGS)
16*a58d3d2aSXin Li
17*a58d3d2aSXin Li###################### END OF OPTIONS ######################
18*a58d3d2aSXin Li
19*a58d3d2aSXin Li-include package_version
20*a58d3d2aSXin Li
21*a58d3d2aSXin Liinclude silk_sources.mk
22*a58d3d2aSXin Liinclude celt_sources.mk
23*a58d3d2aSXin Liinclude opus_sources.mk
24*a58d3d2aSXin Li
25*a58d3d2aSXin Liifdef FIXED_POINT
26*a58d3d2aSXin LiSILK_SOURCES += $(SILK_SOURCES_FIXED)
27*a58d3d2aSXin Lielse
28*a58d3d2aSXin LiSILK_SOURCES += $(SILK_SOURCES_FLOAT)
29*a58d3d2aSXin LiOPUS_SOURCES += $(OPUS_SOURCES_FLOAT)
30*a58d3d2aSXin Liendif
31*a58d3d2aSXin Li
32*a58d3d2aSXin LiEXESUFFIX =
33*a58d3d2aSXin LiLIBPREFIX = lib
34*a58d3d2aSXin LiLIBSUFFIX = .a
35*a58d3d2aSXin LiOBJSUFFIX = .o
36*a58d3d2aSXin Li
37*a58d3d2aSXin LiCC     = $(TOOLCHAIN_PREFIX)cc$(TOOLCHAIN_SUFFIX)
38*a58d3d2aSXin LiAR     = $(TOOLCHAIN_PREFIX)ar
39*a58d3d2aSXin LiRANLIB = $(TOOLCHAIN_PREFIX)ranlib
40*a58d3d2aSXin LiCP     = $(TOOLCHAIN_PREFIX)cp
41*a58d3d2aSXin Li
42*a58d3d2aSXin Licppflags-from-defines   = $(addprefix -D,$(1))
43*a58d3d2aSXin Licppflags-from-includes  = $(addprefix -I,$(1))
44*a58d3d2aSXin Lildflags-from-ldlibdirs  = $(addprefix -L,$(1))
45*a58d3d2aSXin Lildlibs-from-libs        = $(addprefix -l,$(1))
46*a58d3d2aSXin Li
47*a58d3d2aSXin LiWARNINGS = -Wall -W -Wstrict-prototypes -Wextra -Wcast-align -Wnested-externs -Wshadow
48*a58d3d2aSXin LiCFLAGS  += -O2 -g $(WARNINGS) -DOPUS_BUILD
49*a58d3d2aSXin LiCINCLUDES = include silk celt
50*a58d3d2aSXin Li
51*a58d3d2aSXin Liifdef FIXED_POINT
52*a58d3d2aSXin LiCFLAGS += -DFIXED_POINT=1 -DDISABLE_FLOAT_API
53*a58d3d2aSXin LiCINCLUDES += silk/fixed
54*a58d3d2aSXin Lielse
55*a58d3d2aSXin LiCINCLUDES += silk/float
56*a58d3d2aSXin Liendif
57*a58d3d2aSXin Li
58*a58d3d2aSXin Li
59*a58d3d2aSXin LiLIBS = m
60*a58d3d2aSXin Li
61*a58d3d2aSXin LiLDLIBDIRS = ./
62*a58d3d2aSXin Li
63*a58d3d2aSXin LiCFLAGS  += $(call cppflags-from-defines,$(CDEFINES))
64*a58d3d2aSXin LiCFLAGS  += $(call cppflags-from-includes,$(CINCLUDES))
65*a58d3d2aSXin LiLDFLAGS += $(call ldflags-from-ldlibdirs,$(LDLIBDIRS))
66*a58d3d2aSXin LiLDLIBS  += $(call ldlibs-from-libs,$(LIBS))
67*a58d3d2aSXin Li
68*a58d3d2aSXin LiCOMPILE.c.cmdline   = $(CC) -c $(CFLAGS) -o $@ $<
69*a58d3d2aSXin LiLINK.o              = $(CC) $(LDPREFLAGS) $(LDFLAGS)
70*a58d3d2aSXin LiLINK.o.cmdline      = $(LINK.o) $^ $(LDLIBS) -o $@$(EXESUFFIX)
71*a58d3d2aSXin Li
72*a58d3d2aSXin LiARCHIVE.cmdline     = $(AR) $(ARFLAGS) $@ $^ && $(RANLIB) $@
73*a58d3d2aSXin Li
74*a58d3d2aSXin Li%$(OBJSUFFIX):%.c
75*a58d3d2aSXin Li	$(COMPILE.c.cmdline)
76*a58d3d2aSXin Li
77*a58d3d2aSXin Li%$(OBJSUFFIX):%.cpp
78*a58d3d2aSXin Li	$(COMPILE.cpp.cmdline)
79*a58d3d2aSXin Li
80*a58d3d2aSXin Li# Directives
81*a58d3d2aSXin Li
82*a58d3d2aSXin Li
83*a58d3d2aSXin Li# Variable definitions
84*a58d3d2aSXin LiLIB_NAME = opus
85*a58d3d2aSXin LiTARGET = $(LIBPREFIX)$(LIB_NAME)$(LIBSUFFIX)
86*a58d3d2aSXin Li
87*a58d3d2aSXin LiSRCS_C = $(SILK_SOURCES) $(CELT_SOURCES) $(OPUS_SOURCES)
88*a58d3d2aSXin Li
89*a58d3d2aSXin LiOBJS := $(patsubst %.c,%$(OBJSUFFIX),$(SRCS_C))
90*a58d3d2aSXin Li
91*a58d3d2aSXin LiOPUSDEMO_SRCS_C = src/opus_demo.c
92*a58d3d2aSXin LiOPUSDEMO_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(OPUSDEMO_SRCS_C))
93*a58d3d2aSXin Li
94*a58d3d2aSXin LiTESTOPUSAPI_SRCS_C = tests/test_opus_api.c
95*a58d3d2aSXin LiTESTOPUSAPI_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(TESTOPUSAPI_SRCS_C))
96*a58d3d2aSXin Li
97*a58d3d2aSXin LiTESTOPUSDECODE_SRCS_C = tests/test_opus_decode.c
98*a58d3d2aSXin LiTESTOPUSDECODE_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(TESTOPUSDECODE_SRCS_C))
99*a58d3d2aSXin Li
100*a58d3d2aSXin LiTESTOPUSENCODE_SRCS_C = tests/test_opus_encode.c tests/opus_encode_regressions.c
101*a58d3d2aSXin LiTESTOPUSENCODE_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(TESTOPUSENCODE_SRCS_C))
102*a58d3d2aSXin Li
103*a58d3d2aSXin LiTESTOPUSEXTENSIONS_SRCS_C = tests/test_opus_extensions.c
104*a58d3d2aSXin LiTESTOPUSEXTENSIONS_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(TESTOPUSEXTENSIONS_SRCS_C))
105*a58d3d2aSXin Li
106*a58d3d2aSXin LiTESTOPUSPADDING_SRCS_C = tests/test_opus_padding.c
107*a58d3d2aSXin LiTESTOPUSPADDING_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(TESTOPUSPADDING_SRCS_C))
108*a58d3d2aSXin Li
109*a58d3d2aSXin LiOPUSCOMPARE_SRCS_C = src/opus_compare.c
110*a58d3d2aSXin LiOPUSCOMPARE_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(OPUSCOMPARE_SRCS_C))
111*a58d3d2aSXin Li
112*a58d3d2aSXin LiTESTS := test_opus_api test_opus_decode test_opus_encode test_opus_extensions test_opus_padding
113*a58d3d2aSXin Li
114*a58d3d2aSXin Li# Rules
115*a58d3d2aSXin Liall: lib opus_demo opus_compare $(TESTS)
116*a58d3d2aSXin Li
117*a58d3d2aSXin Lilib: $(TARGET)
118*a58d3d2aSXin Li
119*a58d3d2aSXin Licheck: all
120*a58d3d2aSXin Li	for test in $(TESTS); do ./$$test; done
121*a58d3d2aSXin Li
122*a58d3d2aSXin Li$(TARGET): $(OBJS)
123*a58d3d2aSXin Li	$(ARCHIVE.cmdline)
124*a58d3d2aSXin Li
125*a58d3d2aSXin Liopus_demo$(EXESUFFIX): $(OPUSDEMO_OBJS) $(TARGET)
126*a58d3d2aSXin Li	$(LINK.o.cmdline)
127*a58d3d2aSXin Li
128*a58d3d2aSXin Litest_opus_api$(EXESUFFIX): $(TESTOPUSAPI_OBJS) $(TARGET)
129*a58d3d2aSXin Li	$(LINK.o.cmdline)
130*a58d3d2aSXin Li
131*a58d3d2aSXin Litest_opus_decode$(EXESUFFIX): $(TESTOPUSDECODE_OBJS) $(TARGET)
132*a58d3d2aSXin Li	$(LINK.o.cmdline)
133*a58d3d2aSXin Li
134*a58d3d2aSXin Litest_opus_encode$(EXESUFFIX): $(TESTOPUSENCODE_OBJS) $(TARGET)
135*a58d3d2aSXin Li	$(LINK.o.cmdline)
136*a58d3d2aSXin Li
137*a58d3d2aSXin Litest_opus_extensions$(EXESUFFIX): $(TESTOPUSEXTENSIONS_OBJS) $(TARGET)
138*a58d3d2aSXin Li	$(LINK.o.cmdline)
139*a58d3d2aSXin Li
140*a58d3d2aSXin Litest_opus_padding$(EXESUFFIX): $(TESTOPUSPADDING_OBJS) $(TARGET)
141*a58d3d2aSXin Li	$(LINK.o.cmdline)
142*a58d3d2aSXin Li
143*a58d3d2aSXin Liopus_compare$(EXESUFFIX): $(OPUSCOMPARE_OBJS)
144*a58d3d2aSXin Li	$(LINK.o.cmdline)
145*a58d3d2aSXin Li
146*a58d3d2aSXin Licelt/celt.o: CFLAGS += -DPACKAGE_VERSION='$(PACKAGE_VERSION)'
147*a58d3d2aSXin Licelt/celt.o: package_version
148*a58d3d2aSXin Li
149*a58d3d2aSXin Lipackage_version: force
150*a58d3d2aSXin Li	@if [ -x ./update_version ]; then \
151*a58d3d2aSXin Li		./update_version || true; \
152*a58d3d2aSXin Li	elif [ ! -e ./package_version ]; then \
153*a58d3d2aSXin Li		echo 'PACKAGE_VERSION="unknown"' > ./package_version; \
154*a58d3d2aSXin Li	fi
155*a58d3d2aSXin Li
156*a58d3d2aSXin Liforce:
157*a58d3d2aSXin Li
158*a58d3d2aSXin Liclean:
159*a58d3d2aSXin Li	rm -f opus_demo$(EXESUFFIX) opus_compare$(EXESUFFIX) $(TARGET) \
160*a58d3d2aSXin Li                test_opus_api$(EXESUFFIX) test_opus_decode$(EXESUFFIX) \
161*a58d3d2aSXin Li                test_opus_encode$(EXESUFFIX) test_opus_extensions$(EXESUFFIX) \
162*a58d3d2aSXin Li                test_opus_padding$(EXESUFFIX)
163*a58d3d2aSXin Li		$(OBJS) $(OPUSDEMO_OBJS) $(OPUSCOMPARE_OBJS) $(TESTOPUSAPI_OBJS) \
164*a58d3d2aSXin Li                $(TESTOPUSDECODE_OBJS) $(TESTOPUSENCODE_OBJS) \
165*a58d3d2aSXin Li                $(TESTOPUSEXTENSIONS_OBJS) $(TESTOPUSPADDING_OBJS)
166*a58d3d2aSXin Li
167*a58d3d2aSXin Li.PHONY: all lib clean force check
168