[ros-users] Help integrating ros with gpusurf

Top Page
Attachments:
Message as email
+ (text/plain)
+ (text/html)
+ (text/plain)
+ (text/plain)
Delete this message
Reply to this message
Author: Sean Anderson
Date:  
To: ros-users
Subject: [ros-users] Help integrating ros with gpusurf
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

https://lists.sourceforge.net/lists/listinfo/ros-users