Sean, When integrating 3rdparty code we don't usually rewrite the build system, we simply call through to the existing build system. There's documentation of the process here http://www.ros.org/wiki/mk Tully On Tue, Aug 17, 2010 at 8:06 AM, Sean Anderson < sanderson@clearpathrobotics.com> wrote: > 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) > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by > > Make an app they can't live without > Enter the BlackBerry Developer Challenge > http://p.sf.net/sfu/RIM-dev2dev > _______________________________________________ > ros-users mailing list > ros-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/ros-users > > _______________________________________________ > ros-users mailing list > ros-users@code.ros.org > https://code.ros.org/mailman/listinfo/ros-users > > -- Tully Foote Systems Engineer Willow Garage, Inc. tfoote@willowgarage.com (650) 475-2827