[ros-users] Help integrating ros with gpusurf
Tully Foote
tfoote at willowgarage.com
Wed Aug 18 01:39:56 UTC 2010
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 at 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 at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ros-users
>
> _______________________________________________
> ros-users mailing list
> ros-users at code.ros.org
> https://code.ros.org/mailman/listinfo/ros-users
>
>
--
Tully Foote
Systems Engineer
Willow Garage, Inc.
tfoote at willowgarage.com
(650) 475-2827
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ros.org/pipermail/ros-users/attachments/20100817/6bf5d36f/attachment-0003.html>
More information about the ros-users
mailing list