Mercurial > hg > forks > libbpg
diff Makefile @ 0:772086c29cc7
Initial import.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 16 Nov 2016 11:16:33 +0200 |
parents | |
children | bb21eb1cd483 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile Wed Nov 16 11:16:33 2016 +0200 @@ -0,0 +1,249 @@ +# libbpg Makefile +# +# Compile options: +# +# Enable compilation of Javascript decoder with Emscripten +#USE_EMCC=y +# Enable x265 for the encoder +USE_X265=y +# Enable the JCTVC code (best quality but slow) for the encoder +#USE_JCTVC=y +# Compile bpgview (SDL and SDL_image libraries needed) +USE_BPGVIEW=y +# Enable it to use bit depths > 12 (need more tests to validate encoder) +#USE_JCTVC_HIGH_BIT_DEPTH=y +# Enable the cross compilation for Windows +#CONFIG_WIN32=y +# Enable for compilation on MacOS X +#CONFIG_APPLE=y +# Installation prefix +prefix=/usr/local + + +################################# + +ifdef CONFIG_WIN32 +CROSS_PREFIX:=x86_64-w64-mingw32- +#CROSS_PREFIX=i686-w64-mingw32- +EXE:=.exe +else +CROSS_PREFIX:= +EXE:= +endif + +CC=$(CROSS_PREFIX)gcc +CXX=$(CROSS_PREFIX)g++ +AR=$(CROSS_PREFIX)ar +EMCC=emcc + +PWD:=$(shell pwd) + +CFLAGS:=-Os -Wall -MMD -fno-asynchronous-unwind-tables -fdata-sections -ffunction-sections -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -fomit-frame-pointer +CFLAGS+=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT +CFLAGS+=-I. +CFLAGS+=-DCONFIG_BPG_VERSION=\"$(shell cat VERSION)\" +ifdef USE_JCTVC_HIGH_BIT_DEPTH +CFLAGS+=-DRExt__HIGH_BIT_DEPTH_SUPPORT +endif + +# Emscriptem config +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']" +EMLDFLAGS+=-s NO_FILESYSTEM=1 -s NO_BROWSER=1 +#EMLDFLAGS+=-O1 --pre-js pre.js --post-js post.js +# Note: the closure compiler is disabled because it adds unwanted global symbols +EMLDFLAGS+=-O3 --memory-init-file 0 --closure 0 --pre-js pre.js --post-js post.js +EMCFLAGS:=$(CFLAGS) + +LDFLAGS=-g +ifdef CONFIG_APPLE +LDFLAGS+=-Wl,-dead_strip +else +LDFLAGS+=-Wl,--gc-sections +endif +CFLAGS+=-g +CXXFLAGS=$(CFLAGS) + +PROGS=bpgdec$(EXE) bpgenc$(EXE) +ifdef USE_BPGVIEW +PROGS+=bpgview$(EXE) +endif +ifdef USE_EMCC +PROGS+=bpgdec.js bpgdec8.js bpgdec8a.js +endif + +all: $(PROGS) + +LIBBPG_OBJS:=$(addprefix libavcodec/, \ +hevc_cabac.o hevc_filter.o hevc.o hevcpred.o hevc_refs.o\ +hevcdsp.o hevc_mvs.o hevc_ps.o hevc_sei.o\ +utils.o cabac.o golomb.o videodsp.o ) +LIBBPG_OBJS+=$(addprefix libavutil/, mem.o buffer.o log2_tab.o frame.o pixdesc.o md5.o ) +LIBBPG_OBJS+=libbpg.o + +LIBBPG_JS_OBJS:=$(patsubst %.o, %.js.o, $(LIBBPG_OBJS)) tmalloc.js.o + +LIBBPG_JS8_OBJS:=$(patsubst %.o, %.js8.o, $(LIBBPG_OBJS)) tmalloc.js8.o + +LIBBPG_JS8A_OBJS:=$(patsubst %.o, %.js8a.o, $(LIBBPG_OBJS)) tmalloc.js8a.o + +$(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 + +$(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 + +$(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 + +$(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 + +BPGENC_OBJS:=bpgenc.o +BPGENC_LIBS:= + +ifdef USE_X265 + +X265_LIBS:=./x265.out/8bit/libx265.a ./x265.out/10bit/libx265.a ./x265.out/12bit/libx265.a +BPGENC_OBJS+=x265_glue.o $(X265_LIBS) + +bpgenc.o: CFLAGS+=-DUSE_X265 +x265_glue.o: CFLAGS+=-I./x265/source -I./x265.out/8bit +x265_glue.o: $(X265_LIBS) + +ifdef CONFIG_WIN32 +CMAKE_OPTS:=-DCMAKE_TOOLCHAIN_FILE=../../x265/build/msys/toolchain-x86_64-w64-mingw32.cmake +else +CMAKE_OPTS:= +endif + +x265.out: + mkdir -p x265.out/8bit x265.out/10bit x265.out/12bit + 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 + 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 + cd x265.out/8bit && cmake ../../x265/source $(CMAKE_OPTS) -DLINKED_10BIT=ON -DLINKED_12BIT=ON -DENABLE_SHARED=OFF -DENABLE_CLI=OFF + +# use this target to manually rebuild x265 +x265_make: | x265.out + $(MAKE) -C x265.out/12bit + $(MAKE) -C x265.out/10bit + $(MAKE) -C x265.out/8bit + +x265_clean: + rm -rf x265.out + +$(X265_LIBS): x265_make + +else + +x265_clean: + +endif # USE_X265 + +ifdef USE_JCTVC +JCTVC_OBJS=$(addprefix jctvc/TLibEncoder/, SyntaxElementWriter.o TEncSbac.o \ +TEncBinCoderCABACCounter.o TEncGOP.o\ +TEncSampleAdaptiveOffset.o TEncBinCoderCABAC.o TEncAnalyze.o\ +TEncEntropy.o TEncTop.o SEIwrite.o TEncPic.o TEncRateCtrl.o\ +WeightPredAnalysis.o TEncSlice.o TEncCu.o NALwrite.o TEncCavlc.o\ +TEncSearch.o TEncPreanalyzer.o) +JCTVC_OBJS+=jctvc/TLibVideoIO/TVideoIOYuv.o +JCTVC_OBJS+=$(addprefix jctvc/TLibCommon/, TComWeightPrediction.o TComLoopFilter.o\ +TComBitStream.o TComMotionInfo.o TComSlice.o ContextModel3DBuffer.o\ +TComPic.o TComRdCostWeightPrediction.o TComTU.o TComPicSym.o\ +TComPicYuv.o TComYuv.o TComTrQuant.o TComInterpolationFilter.o\ +ContextModel.o TComSampleAdaptiveOffset.o SEI.o TComPrediction.o\ +TComDataCU.o TComChromaFormat.o Debug.o TComRom.o\ +TComPicYuvMD5.o TComRdCost.o TComPattern.o TComCABACTables.o) +JCTVC_OBJS+=jctvc/libmd5/libmd5.o +JCTVC_OBJS+=jctvc/TAppEncCfg.o jctvc/TAppEncTop.o jctvc/program_options_lite.o + +$(JCTVC_OBJS) jctvc_glue.o: CFLAGS+=-I$(PWD)/jctvc -Wno-sign-compare + +jctvc/libjctvc.a: $(JCTVC_OBJS) + $(AR) rcs $@ $^ + +BPGENC_OBJS+=jctvc_glue.o jctvc/libjctvc.a + +bpgenc.o: CFLAGS+=-DUSE_JCTVC +endif # USE_JCTVC + + +ifdef CONFIG_WIN32 + +BPGDEC_LIBS:=-lpng -lz +BPGENC_LIBS+=-lpng -ljpeg -lz +BPGVIEW_LIBS:=-lmingw32 -lSDLmain -lSDL_image -lSDL -mwindows + +else + +ifdef CONFIG_APPLE +LIBS:= +else +LIBS:=-lrt +endif # !CONFIG_APPLE +LIBS+=-lm -lpthread + +BPGDEC_LIBS:=-lpng $(LIBS) +BPGENC_LIBS+=-lpng -ljpeg $(LIBS) +BPGVIEW_LIBS:=-lSDL_image -lSDL $(LIBS) + +endif #!CONFIG_WIN32 + +bpgenc.o: CFLAGS+=-Wno-unused-but-set-variable + +libbpg.a: $(LIBBPG_OBJS) + $(AR) rcs $@ $^ + +bpgdec$(EXE): bpgdec.o libbpg.a + $(CC) $(LDFLAGS) -o $@ $^ $(BPGDEC_LIBS) + +bpgenc$(EXE): $(BPGENC_OBJS) + $(CXX) $(LDFLAGS) -o $@ $^ $(BPGENC_LIBS) + +bpgview$(EXE): bpgview.o libbpg.a + $(CC) $(LDFLAGS) -o $@ $^ $(BPGVIEW_LIBS) + +bpgdec.js: $(LIBBPG_JS_OBJS) post.js + $(EMCC) $(EMLDFLAGS) -s TOTAL_MEMORY=33554432 -o $@ $(LIBBPG_JS_OBJS) + +bpgdec8.js: $(LIBBPG_JS8_OBJS) post.js + $(EMCC) $(EMLDFLAGS) -s TOTAL_MEMORY=33554432 -o $@ $(LIBBPG_JS8_OBJS) + +bpgdec8a.js: $(LIBBPG_JS8A_OBJS) post.js + $(EMCC) $(EMLDFLAGS) -s TOTAL_MEMORY=33554432 -o $@ $(LIBBPG_JS8A_OBJS) + +size: + strip bpgdec + size bpgdec libbpg.o libavcodec/*.o libavutil/*.o | sort -n + gzip < bpgdec | wc + +install: bpgenc bpgdec + install -s -m 755 $^ $(prefix)/bin + +CLEAN_DIRS=doc html libavcodec libavutil \ + jctvc jctvc/TLibEncoder jctvc/TLibVideoIO jctvc/TLibCommon jctvc/libmd5 + +clean: x265_clean + rm -f $(PROGS) *.o *.a *.d *~ $(addsuffix /*.o, $(CLEAN_DIRS)) \ + $(addsuffix /*.d, $(CLEAN_DIRS)) $(addsuffix /*~, $(CLEAN_DIRS)) \ + $(addsuffix /*.a, $(CLEAN_DIRS)) + +%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + +%.o: %.cpp + $(CXX) $(CXXFLAGS) -c -o $@ $< + +%.js.o: %.c + $(EMCC) $(EMCFLAGS) -c -o $@ $< + +%.js8.o: %.c + $(EMCC) $(EMCFLAGS) -c -o $@ $< + +%.js8a.o: %.c + $(EMCC) $(EMCFLAGS) -c -o $@ $< + +-include $(wildcard *.d) +-include $(wildcard libavcodec/*.d) +-include $(wildcard libavutil/*.d) +-include $(wildcard jctvc/*.d) +-include $(wildcard jctvc/TLibEncoder/*.d) +-include $(wildcard jctvc/TLibVideoIO/*.d) +-include $(wildcard jctvc/TLibCommon/*.d) +-include $(wildcard jctvc/libmd5/*.d)