I've decided I want to integrate some of my previous ros work with a vision program I've written that uses OpenCV and gpusurf ( http://homes.esat.kuleuven.be/~ncorneli/gpusurf/) Until a few months ago I've been purely a windows programmer and therefore the problem I've run into (due my inexperience with cmake and the like) is that I'm not entirely sure how to integrate the build process. gpusurf has quite an extensive makefile, which uses nvidia's cuda, and I'm not sure if it's easier to try and rewrite it using cmake, or add the ros dependencies to the regular make file included in gpusurf. Appended at the end is the 3 files used to build gpusurf. Thanks for any help/suggestions! - Sean *Makefile* --- include ../settings.mk USE_NCGL := 1 verbose := 1 CCFILES := main.cpp INCLUDES := -I../libsurf/inc EXECUTABLE := gpusurf ifeq ($(emu), 1) LIB := -L../libsurf/lib/emuRelease -lsurf else LIB := -L../libsurf/lib/Release -lsurf endif include ../common.mk *settings.mk* --- USE_CUDA := 1 USE_VXL := 0 CUDA_INSTALL_PATH := /usr/local/cuda CUDA_SDK_INSTALL_PATH := /home/nico/NVIDIA_CUDA_SDK NCGL_INSTALL_PATH := ../libncgl GLUT_INC_PATH := /usr/include GLUT_LIB_PATH := /usr/lib GLEW_INC_PATH := /usr/include GLEW_LIB_PATH := /usr/lib CG_INC_PATH := /usr/include CG_LIB_PATH := /usr/lib IMAGEMAGICK_INC_PATH := /usr/include/ImageMagick IMAGEMAGICK_LIB_PATH := /usr/lib VXL_INC_PATH := /usr/local/vxl/vxl-1.10.0 VXL_LIB_PATH := /usr/local/vxl/bin/lib *common.mk* --- .SUFFIXES : .cu .cu_dbg_o .c_dbg_o .cpp_dbg_o .cu_rel_o .c_rel_o .cpp_rel_o .cubin SRCDIR ?= src ROOTBINDIR ?= bin ROOTLIBDIR ?= lib ROOTOBJDIR ?= obj BINDIR ?= $(ROOTBINDIR) LIBDIR ?= $(ROOTLIBDIR) # Includes INCLUDES += -I./inc # Compilers CXX := g++ CC := gcc LINK := g++ -fPIC ifeq ($(USE_CUDA), 1) LIBDIR_CUDA := $(CUDA_SDK_INSTALL_PATH)/lib COMMONDIR := $(CUDA_SDK_INSTALL_PATH)/common NVCC := $(CUDA_INSTALL_PATH)/bin/nvcc NVCCFLAGS := INCLUDES += -I$(CUDA_INSTALL_PATH)/include -I$(COMMONDIR)/inc LIB += -L$(CUDA_INSTALL_PATH)/lib -L$(LIBDIR_CUDA) -L$(COMMONDIR)/lib -lcuda -lcudart -lcutil ifeq ($(emu),1) LIB += -lcublasemu else LIB += -lcublas endif endif ifeq ($(USE_NCGL), 1) # INCLUDES += -I$(NCGL_INSTALL_PATH)/inc -I/usr/include/freetype2 INCLUDES += -I$(NCGL_INSTALL_PATH)/inc -I$(GLUT_INC_PATH) -I$(GLEW_INC_PATH) -I$(CG_INC_PATH) -I$(IMAGEMAGICK_INC_PATH) ifeq ($(emu),1) LIB += -L$(NCGL_INSTALL_PATH)/lib/emuRelease -lncgl else LIB += -L$(NCGL_INSTALL_PATH)/lib/Release -lncgl endif LIB += -L$(GLUT_LIB_PATH) -lglut -L$(GLEW_LIB_PATH) -lGLEW -L$(CG_LIB_PATH) -lCg -lCgGL -L$(IMAGEMAGICK_LIB_PATH) -lGL -lpthread -lMagick++ endif ifeq ($(USE_VXL), 1) INCLUDES += -I$(VXL_INC_PATH) -I$(VXL_INC_PATH)/../bin/core -I$(VXL_INC_PATH)/core -I$(VXL_INC_PATH)/../bin/vcl -I$(VXL_INC_PATH)/vcl -I$(VXL_INC_PATH)/contrib/oxl LIB += -L$(VXL_LIB_PATH) -lmvl -lvgl_algo -lvgl -lvnl_algo -lvnl -lvul -lvbl -lv3p_netlib endif # append optional arch/SM version flags (such as -arch sm_11) NVCCFLAGS += $(SMVERSIONFLAGS) # architecture flag for cubin build CUBIN_ARCH_FLAG := -m32 # Warning flags CXXWARN_FLAGS := \ -W -Wall \ -Wimplicit \ -Wswitch \ -Wformat \ -Wchar-subscripts \ -Wparentheses \ -Wmultichar \ -Wtrigraphs \ -Wpointer-arith \ -Wcast-align \ -Wreturn-type \ -Wno-unused-function \ $(SPACE) CWARN_FLAGS := $(CXXWARN_FLAGS) \ -Wstrict-prototypes \ -Wmissing-prototypes \ -Wmissing-declarations \ -Wnested-externs \ -Wmain \ # Compiler-specific flags CXXFLAGS := $(CXXWARN_FLAGS) CFLAGS := $(CWARN_FLAGS) # Common flags COMMONFLAGS = $(INCLUDES) -DUNIX ifeq ($(USE_CUDA),1) COMMONFLAGS += -DUSE_CUDA endif ifeq ($(USE_VXL),1) COMMONFLAGS += -DUSE_VXL endif # Debug/release configuration ifeq ($(dbg),1) COMMONFLAGS += -g NVCCFLAGS += -D_DEBUG BINSUBDIR := Debug LIBSUFFIX := D else COMMONFLAGS += -O3 BINSUBDIR := Release LIBSUFFIX := NVCCFLAGS += --compiler-options -fno-strict-aliasing CXXFLAGS += -fno-strict-aliasing -fno-stack-protector CFLAGS += -fno-strict-aliasing -fno-stack-protector endif # Device emulation configuration ifeq ($(emu), 1) NVCCFLAGS += -deviceemu CUDACCFLAGS += BINSUBDIR := emu$(BINSUBDIR) # consistency, makes developing easier CXXFLAGS += -D__DEVICE_EMULATION__ CFLAGS += -D__DEVICE_EMULATION__ endif ifneq ($(DYNAMIC_LIB),) TARGETDIR_DYNAMIC := $(LIBDIR)/$(BINSUBDIR) TARGET_DYNAMIC := $(TARGETDIR_DYNAMIC)/$(DYNAMIC_LIB) LINKLINE_DYNAMIC = $(LINK) -shared -Wl,-soname,$(DYNAMIC_LIB) -o $(TARGET_DYNAMIC) $(OBJS) endif ifneq ($(STATIC_LIB),) TARGETDIR_STATIC := $(LIBDIR)/$(BINSUBDIR) TARGET_STATIC := $(TARGETDIR_STATIC)/$(STATIC_LIB) LINKLINE_STATIC = ar qv $(TARGET_STATIC) $(OBJS) endif ifneq ($(EXECUTABLE),) TARGETDIR := $(BINDIR)/$(BINSUBDIR) TARGET := $(TARGETDIR)/$(EXECUTABLE) LINKLINE = $(LINK) -o $(TARGET) $(OBJS) $(LIB) endif # check if verbose ifeq ($(verbose), 1) VERBOSE := else VERBOSE := @ endif ################################################################################ # Check for input flags and set compiler flags appropriately ################################################################################ ifeq ($(fastmath), 1) NVCCFLAGS += -use_fast_math endif ifeq ($(keep), 1) NVCCFLAGS += -keep NVCC_KEEP_CLEAN := *.i* *.cubin *.cu.c *.cudafe* *.fatbin.c *.ptx endif # Add cudacc flags NVCCFLAGS += $(CUDACCFLAGS) # Add common flags NVCCFLAGS += $(COMMONFLAGS) CXXFLAGS += $(COMMONFLAGS) CFLAGS += $(COMMONFLAGS) ifeq ($(nvcc_warn_verbose),1) NVCCFLAGS += $(addprefix --compiler-options ,$(CXXWARN_FLAGS)) NVCCFLAGS += --compiler-options -fno-strict-aliasing endif ################################################################################ # Set up object files ################################################################################ OBJDIR := $(ROOTOBJDIR)/$(BINSUBDIR)/$(SRCDIR) OBJS := $(patsubst %.cpp,$(OBJDIR)/%.cpp.o,$(notdir $(CCFILES))) OBJS += $(patsubst %.c,$(OBJDIR)/%.c.o,$(notdir $(CFILES))) ifeq ($(USE_CUDA), 1) OBJS += $(patsubst %.cu,$(OBJDIR)/%.cu.o,$(notdir $(CUFILES))) endif ################################################################################ # Set up cubin files ################################################################################ CUBINDIR := $(SRCDIR)/data CUBINS += $(patsubst %.cu,$(CUBINDIR)/%.cubin,$(notdir $(CUBINFILES))) ################################################################################ # Rules ################################################################################ $(OBJDIR)/%.c.o : $(SRCDIR)/%.c $(C_DEPS) $(VERBOSE)$(CC) $(CFLAGS) -o $@ -c $< $(OBJDIR)/%.cpp.o : $(SRCDIR)/%.cpp $(C_DEPS) $(VERBOSE)$(CXX) $(CXXFLAGS) -o $@ -c $< $(OBJDIR)/%.cu.o : $(SRCDIR)/%.cu $(CU_DEPS) $(VERBOSE)$(NVCC) -o $@ -c $< $(NVCCFLAGS) $(CUBINDIR)/%.cubin : $(SRCDIR)/%.cu cubindirectory $(VERBOSE)$(NVCC) $(CUBIN_ARCH_FLAG) -o $@ -cubin $< $(NVCCFLAGS) TARGETLIST := makeobjdir $(OBJS) $(CUBINS) Makefile ifneq ($(DYNAMIC_LIB),) TARGETLIST := makedirdynamic $(TARGETLIST) TARGETLIST += $(TARGET_DYNAMIC) endif ifneq ($(STATIC_LIB),) TARGETLIST := makedirstatic $(TARGETLIST) TARGETLIST += $(TARGET_STATIC) endif ifneq ($(EXECUTABLE),) TARGETLIST := makedirexec $(TARGETLIST) TARGETLIST += $(TARGET) endif all : $(TARGETLIST) $(TARGET): $(VERBOSE)$(LINKLINE) $(TARGET_DYNAMIC): $(VERBOSE)$(LINKLINE_DYNAMIC) $(TARGET_STATIC): $(VERBOSE)$(LINKLINE_STATIC) cubindirectory: @mkdir -p $(CUBINDIR) makeobjdir: @mkdir -p $(OBJDIR) makedirexec: @mkdir -p $(TARGETDIR) makedirdynamic: @mkdir -p $(TARGETDIR_DYNAMIC) makedirstatic: @mkdir -p $(TARGETDIR_STATIC) tidy : @find | egrep "#" | xargs rm -f @find | egrep "\~" | xargs rm -f cleanall : clean clean : tidy $(VERBOSE)rm -f $(OBJS) $(VERBOSE)rm -f $(CUBINS) $(VERBOSE)rm -f $(TARGET_DYNAMIC) $(VERBOSE)rm -f $(TARGET_STATIC) $(VERBOSE)rm -f $(TARGET) $(VERBOSE)rm -f $(NVCC_KEEP_CLEAN) clobber : clean rm -rf $(ROOTOBJDIR) rm -rf $(ROOTLIBDIR) rm -rf $(ROOTBINDIR)