diff --git a/src/Makefile b/src/Makefile index 95539c0..decdbdf 100644 --- a/src/Makefile +++ b/src/Makefile @@ -7,7 +7,7 @@ BUILD_DIR:=$(TOP_DIR)/build BIN_DIR:=$(BUILD_DIR)/bin export BUILD_DIR -PROJECT_ROOT= /mnt/data/cmhu/FFNvDecoder +PROJECT_ROOT= /home/huchunming/FFNvDecoder THIRDPARTY_ROOT = $(PROJECT_ROOT)/3rdparty export PROJECT_ROOT THIRDPARTY_ROOT @@ -24,16 +24,16 @@ INCS:=-I $(TOP_DIR) \ -I $(SPDLOG_ROOT)/include \ -I $(FFMPEG_DIR)/include \ -MACROS:= - # 链接器 -LIBS:= -L $(SPDLOG_ROOT) -l:libspdlog.a \ +LIBS:= -L $(SPDLOG_ROOT)/lib -l:libspdlog.a \ -L $(FFMPEG_DIR)/lib -lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice \ export CXX INCS MACROS LIBS +MACROS:= -DUSE_DVPP + # 各个模块 -MODULES:= nvdec gb28181 interface demo +MODULES:= dvpp interface demo # 各个模块对应的库 # MODULE_LIBS:=$(BUILD_DIR)/nvdec/lib/nvdec.a\ @@ -50,7 +50,7 @@ all:$(TARGET) # 最终目标依赖关系 $(TARGET):FORCE | $(BIN_DIR) @for n in $(MODULES); do make -s -f $(TOP_DIR)/$$n/Makefile MODULE=$$n || exit "$$?"; done - @echo -e "\e[32m""Linking executable $(TARGET)""\e[0m" +# @echo -e "\e[32m""Linking executable $(TARGET)""\e[0m" #@$(LD) $(LDFLAGS) -o $@ $(MODULE_LIBS) $(LIBS) # 若没有bin目录则自动生成 diff --git a/src/demo/Makefile b/src/demo/Makefile index 91b0cac..a456115 100644 --- a/src/demo/Makefile +++ b/src/demo/Makefile @@ -12,30 +12,32 @@ DEPS:=$(addprefix $(DEP_DIR)/, $(patsubst %.cpp, %.d,a $(SRCS))) # 自动生成头文件依赖选项 DEPFLAGS=-MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d +DEFS = -DENABLE_DVPP_INTERFACE + # 最终目标文件 -TARGET:=/mnt/data/cmhu/FFNvDecoder/bin/lib/demo +TARGET:=$(BUILD_DIR)/bin/demo + +include_dir=-I/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/runtime/include -JRTP_ROOT = $(THIRDPARTY_ROOT)/jrtp_export +lib_dir=-L/usr/lib \ + -L/usr/local/lib \ + -L/usr/local/Ascend/driver/lib64 \ + -L/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/atc/lib64\ + -L/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/runtime/lib64 \ + -L/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/runtime/lib64/stub \ + -L/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/lib64 \ + -L/usr/local/Ascend/driver/lib64/driver + +lib=-lacl_dvpp -lascendcl -lmmpa -lglog -lgflags -lpthread -lz -lacl_dvpp_mpi -lruntime -lascendalog -lc_sec -lmsprofiler -lgert -lge_executor -lge_common \ + -lgraph -lascend_protobuf -lprofapi -lerror_manager -lexe_graph -lregister -lplatform INCLUDE= -I $(TOP_DIR)/interface \ - -I $(TOP_DIR)/nvdec \ - -I $(TOP_DIR)/gb28181 \ - -I $(CUDA_ROOT)/include \ - -I $(TOP_DIR)/common/inc \ - -I $(TOP_DIR)/common/UtilNPP \ - -I $(TOP_DIR)/ \ - -I $(JRTP_ROOT)/jrtplib/include/jrtplib3 \ - -I $(JRTP_ROOT)/jthread/include/jthread LIBSPATH= -L $(BUILD_DIR)/interface/lib -l:interface.a \ - -L $(BUILD_DIR)/nvdec/lib -l:nvdec.a \ - -L $(BUILD_DIR)/gb28181/lib -l:gb28181.a \ - -L $(CUDA_ROOT)/lib64 -lcuda -lcudart -lnvcuvid -lcurand -lcublas -lnvjpeg \ - -L $(JRTP_ROOT)/jthread/lib -l:libjthread.a \ - -L $(JRTP_ROOT)/jrtplib/lib -l:libjrtp.a + -L $(BUILD_DIR)/dvpp/lib -l:dvpp.a -CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(LIBSPATH) $(INCS) $(LIBS) $(MACROS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl -Wwrite-strings +CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(include_dir) $(LIBSPATH) $(INCS) $(LIBS) $(lib_dir) $(lib) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl # -DUNICODE -D_UNICODE # 默认最终目标 @@ -45,8 +47,8 @@ all:$(TARGET) # 生成最终目标 $(TARGET): $(OBJS) | $(LIB_DIR) @echo -e "\e[32m""Linking static library $(TARGET)""\e[0m" - @echo -e "$(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(LIBSPATH) $(MACROS)" - $(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(LIBSPATH) $(MACROS) + @echo -e "$(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(MACROS)" + $(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(MACROS) # 若没有lib目录则自动生成 $(LIB_DIR): diff --git a/src/demo/Makefile.dvpp b/src/demo/Makefile.dvpp index d369b20..a456115 100644 --- a/src/demo/Makefile.dvpp +++ b/src/demo/Makefile.dvpp @@ -1,14 +1,22 @@ -XX = g++ +# 各项目录 +LIB_DIR:=$(BUILD_DIR)/$(MODULE)/lib +DEP_DIR:=$(BUILD_DIR)/$(MODULE)/.dep +OBJ_DIR:=$(BUILD_DIR)/$(MODULE)/obj +SRC_DIR:=$(TOP_DIR)/$(MODULE) +# 源文件以及中间目标文件和依赖文件 +SRCS:=$(notdir $(wildcard $(SRC_DIR)/*.cpp)) +OBJS:=$(addprefix $(OBJ_DIR)/, $(patsubst %.cpp, %.o, $(SRCS))) +DEPS:=$(addprefix $(DEP_DIR)/, $(patsubst %.cpp, %.d,a $(SRCS))) -PROJECT_ROOT= /mnt/data/cmhu/FFNvDecoder - -SRC_ROOT = $(PROJECT_ROOT)/src - -TARGET= $(PROJECT_ROOT)/src/build/bin/demo +# 自动生成头文件依赖选项 +DEPFLAGS=-MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d DEFS = -DENABLE_DVPP_INTERFACE +# 最终目标文件 +TARGET:=$(BUILD_DIR)/bin/demo + include_dir=-I/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/runtime/include @@ -23,26 +31,50 @@ lib_dir=-L/usr/lib \ lib=-lacl_dvpp -lascendcl -lmmpa -lglog -lgflags -lpthread -lz -lacl_dvpp_mpi -lruntime -lascendalog -lc_sec -lmsprofiler -lgert -lge_executor -lge_common \ -lgraph -lascend_protobuf -lprofapi -lerror_manager -lexe_graph -lregister -lplatform -LIBS= -lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice -CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(include_dir) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl -SRCS:=$(wildcard $(SRC_ROOT)/demo/*.cpp) -OBJS = $(patsubst %.cpp, %.o, $(notdir $(SRCS))) +INCLUDE= -I $(TOP_DIR)/interface \ + +LIBSPATH= -L $(BUILD_DIR)/interface/lib -l:interface.a \ + -L $(BUILD_DIR)/dvpp/lib -l:dvpp.a -OBJ_ROOT = $(PROJECT_ROOT)/src/build -DVPP_SRCS:=$(wildcard $(OBJ_ROOT)/dvpp/obj/*.o) -INTEFACE_SRCS:=$(wildcard $(OBJ_ROOT)/interface/obj/*.o) +CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(include_dir) $(LIBSPATH) $(INCS) $(LIBS) $(lib_dir) $(lib) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl + # -DUNICODE -D_UNICODE +# 默认最终目标 +.PHONY:all +all:$(TARGET) -$(TARGET):$(OBJS) $(INTEFACE_SRCS) $(NVDECODER_SRCS) $(GB28181_SRCS) - rm -f $(TARGET) +# 生成最终目标 +$(TARGET): $(OBJS) | $(LIB_DIR) + @echo -e "\e[32m""Linking static library $(TARGET)""\e[0m" + @echo -e "$(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(MACROS)" + $(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(MACROS) + +# 若没有lib目录则自动生成 +$(LIB_DIR): + @mkdir -p $@ + +# 生成中间目标文件 +$(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp $(DEP_DIR)/%.d | $(OBJ_DIR) $(DEP_DIR) @echo -e "\e[33m""Building object $@""\e[0m" - $(XX) -o $@ $^ $(CXXFLAGS) $(LIBS) $(lib_dir) $(lib) -Wwrite-strings - rm -f *.o + @echo -e "$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $<" + $(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $< + +# 若没有obj目录则自动生成 +$(OBJ_DIR): + @mkdir -p $@ + +# 若没有.dep目录则自动生成 +$(DEP_DIR): + @mkdir -p $@ -%.o:$(SRC_ROOT)/demo/%.cpp - $(XX) $(CXXFLAGS) -c $< +# 依赖文件会在生成中间文件的时候自动生成,这里只是为了防止报错 +$(DEPS): +# 引入中间目标文件头文件依赖关系 +include $(wildcard $(DEPS)) +# 直接删除组件build目录 +.PHONY:clean clean: - rm -f *.o $(TARGET) \ No newline at end of file + @rm -rf $(BUILD_DIR)/$(MODULE) diff --git a/src/demo/Makefile.o.nvdec b/src/demo/Makefile.o.nvdec index a40488b..91b0cac 100644 --- a/src/demo/Makefile.o.nvdec +++ b/src/demo/Makefile.o.nvdec @@ -1,61 +1,78 @@ -XX = g++ +# 各项目录 +LIB_DIR:=$(BUILD_DIR)/$(MODULE)/lib +DEP_DIR:=$(BUILD_DIR)/$(MODULE)/.dep +OBJ_DIR:=$(BUILD_DIR)/$(MODULE)/obj +SRC_DIR:=$(TOP_DIR)/$(MODULE) +# 源文件以及中间目标文件和依赖文件 +SRCS:=$(notdir $(wildcard $(SRC_DIR)/*.cpp)) +OBJS:=$(addprefix $(OBJ_DIR)/, $(patsubst %.cpp, %.o, $(SRCS))) +DEPS:=$(addprefix $(DEP_DIR)/, $(patsubst %.cpp, %.d,a $(SRCS))) -PROJECT_ROOT= /mnt/data/cmhu/FFNvDecoder +# 自动生成头文件依赖选项 +DEPFLAGS=-MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d -CUDA_ROOT = /usr/local/cuda-11.1 +# 最终目标文件 +TARGET:=/mnt/data/cmhu/FFNvDecoder/bin/lib/demo -DEPEND_DIR = $(PROJECT_ROOT)/bin -THIRDPARTY_ROOT = $(PROJECT_ROOT)/3rdparty -SPDLOG_ROOT = $(THIRDPARTY_ROOT)/spdlog-1.9.2/release -JRTP_ROOT = $(THIRDPARTY_ROOT)/jrtp_export - -SRC_ROOT = $(PROJECT_ROOT)/src -TARGET= $(PROJECT_ROOT)/bin/lib/demo - -DEFS = -DENABLE_DVPP_INTERFACE +JRTP_ROOT = $(THIRDPARTY_ROOT)/jrtp_export -INCLUDE= -I $(SRC_ROOT)/interface \ - -I $(SRC_ROOT)/dvpp \ - -I $(SRC_ROOT)/gb28181 \ - -I $(SRC_ROOT)/nvdec \ - -I $(DEPEND_DIR)/include \ +INCLUDE= -I $(TOP_DIR)/interface \ + -I $(TOP_DIR)/nvdec \ + -I $(TOP_DIR)/gb28181 \ -I $(CUDA_ROOT)/include \ -I $(TOP_DIR)/common/inc \ -I $(TOP_DIR)/common/UtilNPP \ -I $(TOP_DIR)/ \ - -I $(SPDLOG_ROOT)/include \ -I $(JRTP_ROOT)/jrtplib/include/jrtplib3 \ -I $(JRTP_ROOT)/jthread/include/jthread -LIBSPATH= -L $(DEPEND_DIR)/lib -lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice \ +LIBSPATH= -L $(BUILD_DIR)/interface/lib -l:interface.a \ + -L $(BUILD_DIR)/nvdec/lib -l:nvdec.a \ + -L $(BUILD_DIR)/gb28181/lib -l:gb28181.a \ -L $(CUDA_ROOT)/lib64 -lcuda -lcudart -lnvcuvid -lcurand -lcublas -lnvjpeg \ - -L $(SPDLOG_ROOT) -l:libspdlog.a \ -L $(JRTP_ROOT)/jthread/lib -l:libjthread.a \ -L $(JRTP_ROOT)/jrtplib/lib -l:libjrtp.a +CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(LIBSPATH) $(INCS) $(LIBS) $(MACROS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl -Wwrite-strings + # -DUNICODE -D_UNICODE -CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl +# 默认最终目标 +.PHONY:all +all:$(TARGET) -SRCS:=$(wildcard $(SRC_ROOT)/demo/*.cpp) -OBJS = $(patsubst %.cpp, %.o, $(notdir $(SRCS))) +# 生成最终目标 +$(TARGET): $(OBJS) | $(LIB_DIR) + @echo -e "\e[32m""Linking static library $(TARGET)""\e[0m" + @echo -e "$(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(LIBSPATH) $(MACROS)" + $(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(LIBSPATH) $(MACROS) -OBJ_ROOT = $(PROJECT_ROOT)/src/build -INTEFACE_SRCS:=$(wildcard $(OBJ_ROOT)/interface/obj/*.o) -NVDECODER_SRCS:=$(wildcard $(OBJ_ROOT)/nvdec/obj/*.o) -GB28181_SRCS:=$(wildcard $(OBJ_ROOT)/gb28181/obj/*.o) +# 若没有lib目录则自动生成 +$(LIB_DIR): + @mkdir -p $@ - -$(TARGET):$(OBJS) $(INTEFACE_SRCS) $(NVDECODER_SRCS) $(GB28181_SRCS) - rm -f $(TARGET) +# 生成中间目标文件 +$(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp $(DEP_DIR)/%.d | $(OBJ_DIR) $(DEP_DIR) @echo -e "\e[33m""Building object $@""\e[0m" - $(XX) -o $@ $^ $(CXXFLAGS) $(LIBSPATH) -Wwrite-strings - rm -f *.o + @echo -e "$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $<" + $(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $< + +# 若没有obj目录则自动生成 +$(OBJ_DIR): + @mkdir -p $@ + +# 若没有.dep目录则自动生成 +$(DEP_DIR): + @mkdir -p $@ -%.o:$(SRC_ROOT)/demo/%.cpp - $(XX) $(CXXFLAGS) -c $< +# 依赖文件会在生成中间文件的时候自动生成,这里只是为了防止报错 +$(DEPS): +# 引入中间目标文件头文件依赖关系 +include $(wildcard $(DEPS)) +# 直接删除组件build目录 +.PHONY:clean clean: - rm -f *.o $(TARGET) \ No newline at end of file + @rm -rf $(BUILD_DIR)/$(MODULE) diff --git a/src/demo/main_dvpp.cpp1 b/src/demo/main_dvpp.cpp index 602a170..602a170 100644 --- a/src/demo/main_dvpp.cpp1 +++ b/src/demo/main_dvpp.cpp diff --git a/src/demo/main_nvdec.cpp b/src/demo/main_nvdec.cpp1 index 227bc8a..227bc8a 100644 --- a/src/demo/main_nvdec.cpp +++ b/src/demo/main_nvdec.cpp1 diff --git a/src/dvpp/Makefile b/src/dvpp/Makefile index 1f044f5..8bca911 100644 --- a/src/dvpp/Makefile +++ b/src/dvpp/Makefile @@ -15,7 +15,7 @@ DEPFLAGS=-MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d DEFS = -DENABLE_DVPP_INTERFACE # 最终目标文件 -TARGET:=$(LIB_DIR)/lib$(MODULE).a +TARGET:=$(LIB_DIR)/$(MODULE).a export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/runtime/lib64:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/lib64:$LD_LIBRARY_PATH @@ -25,7 +25,7 @@ include_dir=-I/usr/local/Ascend/ascend-toolkit/latest/acllib/include lib_dir=-L/usr/lib -L/usr/local/lib -L/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64 -L/usr/local/Ascend/driver/lib64 -L/usr/local/Ascend/ascend-toolkit/latest/atc/lib64 lib=-lacl_dvpp -lascendcl -lmmpa -lglog -lgflags -lpthread -lz -CXXFLAGS= -g -O0 -fPIC $(include_dir) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl +CXXFLAGS= -g -O0 -fPIC $(include_dir) $(INCS) $(LIBS) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl # -DUNICODE -D_UNICODE # 默认最终目标 @@ -44,7 +44,7 @@ $(LIB_DIR): # 生成中间目标文件 $(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp $(DEP_DIR)/%.d | $(OBJ_DIR) $(DEP_DIR) @echo -e "\e[33m""Building object $@""\e[0m" - @$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) $(INCS) $(LDFLAGS) $(lib_dir) $(lib) $(MACROS) -o $@ $< + @$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) $(LDFLAGS) $(lib_dir) $(lib) $(MACROS) -o $@ $< # 若没有obj目录则自动生成 $(OBJ_DIR): diff --git a/src/interface/FFNvDecoderManager.h b/src/interface/FFNvDecoderManager.h index ca23f91..2c1e3eb 100644 --- a/src/interface/FFNvDecoderManager.h +++ b/src/interface/FFNvDecoderManager.h @@ -14,7 +14,7 @@ struct MgrDecConfig string name{""}; // 解码器名称 }; -#define USE_NVDEC +// #define USE_NVDEC // #define USE_DVPP /** * 解码器管理类,单例类 diff --git a/src/nvdec/Makefile b/src/nvdec/Makefile index 5d1e8ad..2a6afb2 100644 --- a/src/nvdec/Makefile +++ b/src/nvdec/Makefile @@ -15,7 +15,7 @@ NVCC = $(CUDA_ROOT)/bin/nvcc # 自动生成头文件依赖选项 DEPFLAGS=-MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d -DEFS = -DENABLE_DVPP_INTERFACE +DEFS = # 最终目标文件 TARGET:=$(LIB_DIR)/$(MODULE).a @@ -34,7 +34,7 @@ LIBSPATH= -L $(JRTP_ROOT)/jthread/lib -l:libjthread.a \ -L $(JRTP_ROOT)/jrtplib/lib -l:libjrtp.a \ -L $(CUDA_ROOT)/lib64 -lcuda -lcudart -lnvcuvid -lcurand -lcublas -lnvjpeg \ -CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(LIBSPATH) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl -Wwrite-strings +CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(LIBSPATH) $(DEFS) $(INCS) $(LIBS) $(MACROS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl -Wwrite-strings # -DUNICODE -D_UNICODE NFLAGS_LIB=-g -c -shared -Xcompiler -fPIC @@ -61,8 +61,8 @@ $(LIB_DIR): # 生成中间目标文件 $(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp $(DEP_DIR)/%.d | $(OBJ_DIR) $(DEP_DIR) @echo -e "\e[33m""Building object $@""\e[0m" - @echo "$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) $(INCS) $(LIBS) $(MACROS) -o $@ $<" - @$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) $(INCS) $(LIBS) $(MACROS) -o $@ $< + @echo "$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $<" + @$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $< $(OBJ_DIR)%.o:$(SRC_DIR)/%.cu @echo -e "\e[33m""Building object $@""\e[0m"