0
|
1 # libbpg Makefile
|
|
2 #
|
|
3 # Compile options:
|
|
4 #
|
|
5 # Enable compilation of Javascript decoder with Emscripten
|
|
6 #USE_EMCC=y
|
|
7 # Enable x265 for the encoder
|
|
8 USE_X265=y
|
|
9 # Enable the JCTVC code (best quality but slow) for the encoder
|
|
10 #USE_JCTVC=y
|
|
11 # Compile bpgview (SDL and SDL_image libraries needed)
|
|
12 USE_BPGVIEW=y
|
|
13 # Enable it to use bit depths > 12 (need more tests to validate encoder)
|
|
14 #USE_JCTVC_HIGH_BIT_DEPTH=y
|
|
15 # Enable the cross compilation for Windows
|
|
16 #CONFIG_WIN32=y
|
|
17 # Enable for compilation on MacOS X
|
|
18 #CONFIG_APPLE=y
|
|
19 # Installation prefix
|
|
20 prefix=/usr/local
|
|
21
|
|
22
|
|
23 #################################
|
|
24
|
|
25 ifdef CONFIG_WIN32
|
|
26 CROSS_PREFIX:=x86_64-w64-mingw32-
|
|
27 #CROSS_PREFIX=i686-w64-mingw32-
|
|
28 EXE:=.exe
|
|
29 else
|
|
30 CROSS_PREFIX:=
|
|
31 EXE:=
|
|
32 endif
|
|
33
|
|
34 CC=$(CROSS_PREFIX)gcc
|
|
35 CXX=$(CROSS_PREFIX)g++
|
|
36 AR=$(CROSS_PREFIX)ar
|
|
37 EMCC=emcc
|
|
38
|
|
39 PWD:=$(shell pwd)
|
|
40
|
|
41 CFLAGS:=-Os -Wall -MMD -fno-asynchronous-unwind-tables -fdata-sections -ffunction-sections -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -fomit-frame-pointer
|
|
42 CFLAGS+=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT
|
|
43 CFLAGS+=-I.
|
|
44 CFLAGS+=-DCONFIG_BPG_VERSION=\"$(shell cat VERSION)\"
|
|
45 ifdef USE_JCTVC_HIGH_BIT_DEPTH
|
|
46 CFLAGS+=-DRExt__HIGH_BIT_DEPTH_SUPPORT
|
|
47 endif
|
|
48
|
|
49 # Emscriptem config
|
|
50 EMLDFLAGS:=-s "EXPORTED_FUNCTIONS=['_bpg_decoder_open','_bpg_decoder_decode','_bpg_decoder_get_info','_bpg_decoder_start','_bpg_decoder_get_frame_duration','_bpg_decoder_get_line','_bpg_decoder_close','_malloc','_free']"
|
|
51 EMLDFLAGS+=-s NO_FILESYSTEM=1 -s NO_BROWSER=1
|
|
52 #EMLDFLAGS+=-O1 --pre-js pre.js --post-js post.js
|
|
53 # Note: the closure compiler is disabled because it adds unwanted global symbols
|
|
54 EMLDFLAGS+=-O3 --memory-init-file 0 --closure 0 --pre-js pre.js --post-js post.js
|
|
55 EMCFLAGS:=$(CFLAGS)
|
|
56
|
|
57 LDFLAGS=-g
|
|
58 ifdef CONFIG_APPLE
|
|
59 LDFLAGS+=-Wl,-dead_strip
|
|
60 else
|
|
61 LDFLAGS+=-Wl,--gc-sections
|
|
62 endif
|
|
63 CFLAGS+=-g
|
|
64 CXXFLAGS=$(CFLAGS)
|
|
65
|
|
66 PROGS=bpgdec$(EXE) bpgenc$(EXE)
|
|
67 ifdef USE_BPGVIEW
|
|
68 PROGS+=bpgview$(EXE)
|
|
69 endif
|
|
70 ifdef USE_EMCC
|
|
71 PROGS+=bpgdec.js bpgdec8.js bpgdec8a.js
|
|
72 endif
|
|
73
|
|
74 all: $(PROGS)
|
|
75
|
|
76 LIBBPG_OBJS:=$(addprefix libavcodec/, \
|
|
77 hevc_cabac.o hevc_filter.o hevc.o hevcpred.o hevc_refs.o\
|
|
78 hevcdsp.o hevc_mvs.o hevc_ps.o hevc_sei.o\
|
|
79 utils.o cabac.o golomb.o videodsp.o )
|
|
80 LIBBPG_OBJS+=$(addprefix libavutil/, mem.o buffer.o log2_tab.o frame.o pixdesc.o md5.o )
|
|
81 LIBBPG_OBJS+=libbpg.o
|
|
82
|
|
83 LIBBPG_JS_OBJS:=$(patsubst %.o, %.js.o, $(LIBBPG_OBJS)) tmalloc.js.o
|
|
84
|
|
85 LIBBPG_JS8_OBJS:=$(patsubst %.o, %.js8.o, $(LIBBPG_OBJS)) tmalloc.js8.o
|
|
86
|
|
87 LIBBPG_JS8A_OBJS:=$(patsubst %.o, %.js8a.o, $(LIBBPG_OBJS)) tmalloc.js8a.o
|
|
88
|
|
89 $(LIBBPG_OBJS): CFLAGS+=-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DHAVE_AV_CONFIG_H -std=c99 -D_GNU_SOURCE=1 -DUSE_VAR_BIT_DEPTH -DUSE_PRED
|
|
90
|
|
91 $(LIBBPG_JS_OBJS): EMCFLAGS+=-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DHAVE_AV_CONFIG_H -std=c99 -D_GNU_SOURCE=1 -DUSE_VAR_BIT_DEPTH
|
|
92
|
|
93 $(LIBBPG_JS8_OBJS): EMCFLAGS+=-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DHAVE_AV_CONFIG_H -std=c99 -D_GNU_SOURCE=1
|
|
94
|
|
95 $(LIBBPG_JS8A_OBJS): EMCFLAGS+=-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DHAVE_AV_CONFIG_H -std=c99 -D_GNU_SOURCE=1 -DUSE_PRED
|
|
96
|
|
97 BPGENC_OBJS:=bpgenc.o
|
|
98 BPGENC_LIBS:=
|
|
99
|
|
100 ifdef USE_X265
|
|
101
|
|
102 X265_LIBS:=./x265.out/8bit/libx265.a ./x265.out/10bit/libx265.a ./x265.out/12bit/libx265.a
|
|
103 BPGENC_OBJS+=x265_glue.o $(X265_LIBS)
|
|
104
|
|
105 bpgenc.o: CFLAGS+=-DUSE_X265
|
|
106 x265_glue.o: CFLAGS+=-I./x265/source -I./x265.out/8bit
|
|
107 x265_glue.o: $(X265_LIBS)
|
|
108
|
|
109 ifdef CONFIG_WIN32
|
|
110 CMAKE_OPTS:=-DCMAKE_TOOLCHAIN_FILE=../../x265/build/msys/toolchain-x86_64-w64-mingw32.cmake
|
|
111 else
|
|
112 CMAKE_OPTS:=
|
|
113 endif
|
|
114
|
|
115 x265.out:
|
|
116 mkdir -p x265.out/8bit x265.out/10bit x265.out/12bit
|
|
117 cd x265.out/12bit && cmake ../../x265/source $(CMAKE_OPTS) -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF -DENABLE_SHARED=OFF -DENABLE_CLI=OFF -DMAIN12=ON
|
|
118 cd x265.out/10bit && cmake ../../x265/source $(CMAKE_OPTS) -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF -DENABLE_SHARED=OFF -DENABLE_CLI=OFF -DMAIN10=ON
|
|
119 cd x265.out/8bit && cmake ../../x265/source $(CMAKE_OPTS) -DLINKED_10BIT=ON -DLINKED_12BIT=ON -DENABLE_SHARED=OFF -DENABLE_CLI=OFF
|
|
120
|
|
121 # use this target to manually rebuild x265
|
|
122 x265_make: | x265.out
|
|
123 $(MAKE) -C x265.out/12bit
|
|
124 $(MAKE) -C x265.out/10bit
|
|
125 $(MAKE) -C x265.out/8bit
|
|
126
|
|
127 x265_clean:
|
|
128 rm -rf x265.out
|
|
129
|
|
130 $(X265_LIBS): x265_make
|
|
131
|
|
132 else
|
|
133
|
|
134 x265_clean:
|
|
135
|
|
136 endif # USE_X265
|
|
137
|
|
138 ifdef USE_JCTVC
|
|
139 JCTVC_OBJS=$(addprefix jctvc/TLibEncoder/, SyntaxElementWriter.o TEncSbac.o \
|
|
140 TEncBinCoderCABACCounter.o TEncGOP.o\
|
|
141 TEncSampleAdaptiveOffset.o TEncBinCoderCABAC.o TEncAnalyze.o\
|
|
142 TEncEntropy.o TEncTop.o SEIwrite.o TEncPic.o TEncRateCtrl.o\
|
|
143 WeightPredAnalysis.o TEncSlice.o TEncCu.o NALwrite.o TEncCavlc.o\
|
|
144 TEncSearch.o TEncPreanalyzer.o)
|
|
145 JCTVC_OBJS+=jctvc/TLibVideoIO/TVideoIOYuv.o
|
|
146 JCTVC_OBJS+=$(addprefix jctvc/TLibCommon/, TComWeightPrediction.o TComLoopFilter.o\
|
|
147 TComBitStream.o TComMotionInfo.o TComSlice.o ContextModel3DBuffer.o\
|
|
148 TComPic.o TComRdCostWeightPrediction.o TComTU.o TComPicSym.o\
|
|
149 TComPicYuv.o TComYuv.o TComTrQuant.o TComInterpolationFilter.o\
|
|
150 ContextModel.o TComSampleAdaptiveOffset.o SEI.o TComPrediction.o\
|
|
151 TComDataCU.o TComChromaFormat.o Debug.o TComRom.o\
|
|
152 TComPicYuvMD5.o TComRdCost.o TComPattern.o TComCABACTables.o)
|
|
153 JCTVC_OBJS+=jctvc/libmd5/libmd5.o
|
|
154 JCTVC_OBJS+=jctvc/TAppEncCfg.o jctvc/TAppEncTop.o jctvc/program_options_lite.o
|
|
155
|
|
156 $(JCTVC_OBJS) jctvc_glue.o: CFLAGS+=-I$(PWD)/jctvc -Wno-sign-compare
|
|
157
|
|
158 jctvc/libjctvc.a: $(JCTVC_OBJS)
|
|
159 $(AR) rcs $@ $^
|
|
160
|
|
161 BPGENC_OBJS+=jctvc_glue.o jctvc/libjctvc.a
|
|
162
|
|
163 bpgenc.o: CFLAGS+=-DUSE_JCTVC
|
|
164 endif # USE_JCTVC
|
|
165
|
|
166
|
|
167 ifdef CONFIG_WIN32
|
|
168
|
|
169 BPGDEC_LIBS:=-lpng -lz
|
|
170 BPGENC_LIBS+=-lpng -ljpeg -lz
|
|
171 BPGVIEW_LIBS:=-lmingw32 -lSDLmain -lSDL_image -lSDL -mwindows
|
|
172
|
|
173 else
|
|
174
|
|
175 ifdef CONFIG_APPLE
|
|
176 LIBS:=
|
|
177 else
|
|
178 LIBS:=-lrt
|
|
179 endif # !CONFIG_APPLE
|
|
180 LIBS+=-lm -lpthread
|
|
181
|
|
182 BPGDEC_LIBS:=-lpng $(LIBS)
|
|
183 BPGENC_LIBS+=-lpng -ljpeg $(LIBS)
|
|
184 BPGVIEW_LIBS:=-lSDL_image -lSDL $(LIBS)
|
|
185
|
|
186 endif #!CONFIG_WIN32
|
|
187
|
|
188 bpgenc.o: CFLAGS+=-Wno-unused-but-set-variable
|
|
189
|
|
190 libbpg.a: $(LIBBPG_OBJS)
|
|
191 $(AR) rcs $@ $^
|
|
192
|
|
193 bpgdec$(EXE): bpgdec.o libbpg.a
|
|
194 $(CC) $(LDFLAGS) -o $@ $^ $(BPGDEC_LIBS)
|
|
195
|
|
196 bpgenc$(EXE): $(BPGENC_OBJS)
|
|
197 $(CXX) $(LDFLAGS) -o $@ $^ $(BPGENC_LIBS)
|
|
198
|
|
199 bpgview$(EXE): bpgview.o libbpg.a
|
|
200 $(CC) $(LDFLAGS) -o $@ $^ $(BPGVIEW_LIBS)
|
|
201
|
|
202 bpgdec.js: $(LIBBPG_JS_OBJS) post.js
|
|
203 $(EMCC) $(EMLDFLAGS) -s TOTAL_MEMORY=33554432 -o $@ $(LIBBPG_JS_OBJS)
|
|
204
|
|
205 bpgdec8.js: $(LIBBPG_JS8_OBJS) post.js
|
|
206 $(EMCC) $(EMLDFLAGS) -s TOTAL_MEMORY=33554432 -o $@ $(LIBBPG_JS8_OBJS)
|
|
207
|
|
208 bpgdec8a.js: $(LIBBPG_JS8A_OBJS) post.js
|
|
209 $(EMCC) $(EMLDFLAGS) -s TOTAL_MEMORY=33554432 -o $@ $(LIBBPG_JS8A_OBJS)
|
|
210
|
|
211 size:
|
|
212 strip bpgdec
|
|
213 size bpgdec libbpg.o libavcodec/*.o libavutil/*.o | sort -n
|
|
214 gzip < bpgdec | wc
|
|
215
|
|
216 install: bpgenc bpgdec
|
|
217 install -s -m 755 $^ $(prefix)/bin
|
|
218
|
|
219 CLEAN_DIRS=doc html libavcodec libavutil \
|
|
220 jctvc jctvc/TLibEncoder jctvc/TLibVideoIO jctvc/TLibCommon jctvc/libmd5
|
|
221
|
|
222 clean: x265_clean
|
|
223 rm -f $(PROGS) *.o *.a *.d *~ $(addsuffix /*.o, $(CLEAN_DIRS)) \
|
|
224 $(addsuffix /*.d, $(CLEAN_DIRS)) $(addsuffix /*~, $(CLEAN_DIRS)) \
|
|
225 $(addsuffix /*.a, $(CLEAN_DIRS))
|
|
226
|
|
227 %.o: %.c
|
|
228 $(CC) $(CFLAGS) -c -o $@ $<
|
|
229
|
|
230 %.o: %.cpp
|
|
231 $(CXX) $(CXXFLAGS) -c -o $@ $<
|
|
232
|
|
233 %.js.o: %.c
|
|
234 $(EMCC) $(EMCFLAGS) -c -o $@ $<
|
|
235
|
|
236 %.js8.o: %.c
|
|
237 $(EMCC) $(EMCFLAGS) -c -o $@ $<
|
|
238
|
|
239 %.js8a.o: %.c
|
|
240 $(EMCC) $(EMCFLAGS) -c -o $@ $<
|
|
241
|
|
242 -include $(wildcard *.d)
|
|
243 -include $(wildcard libavcodec/*.d)
|
|
244 -include $(wildcard libavutil/*.d)
|
|
245 -include $(wildcard jctvc/*.d)
|
|
246 -include $(wildcard jctvc/TLibEncoder/*.d)
|
|
247 -include $(wildcard jctvc/TLibVideoIO/*.d)
|
|
248 -include $(wildcard jctvc/TLibCommon/*.d)
|
|
249 -include $(wildcard jctvc/libmd5/*.d)
|