I fixed my problem by moving all of my device functions into seperate object files, then compiling with the lcudadebrt library. my new makefile looks like this:
NVCC= /usr/local/cuda-5.5/bin/nvcc
NVCCFLAGS= -arch=sm_35
LIBS= -lglut -lGL -lcurand -lcudadevrt
OBJECTS = nsim.o cuda0.o cuda1.o cuda2.o cuda3.o cuda4.o
go:
rm -f ${OBJECTS}
${NVCC} ${NVCCFLAGS} -dc cuda0.cu ${LIBS}
${NVCC} ${NVCCFLAGS} -dc cuda1.cu ${LIBS}
${NVCC} ${NVCCFLAGS} -dc cuda2.cu ${LIBS}
${NVCC} ${NVCCFLAGS} -dc cuda3.cu ${LIBS}
${NVCC} ${NVCCFLAGS} -dc cuda4.cu ${LIBS}
${NVCC} ${NVCCFLAGS} -dc nsim.cu ${LIBS}
${NVCC} ${NVCCFLAGS} ${OBJECTS} -o nsim ${LIBS}