简体   繁体   中英

Makefile for Cuda project skips some files

I have seen a very strange problem with the following makefile. It is skipping some of the files where as the rest are all file. For example it is able to create Matrixd.o but skips Matrixf.o. Simularly it create cv_utils.o but skips Common.cu, compDT.cu, constructDIntegrals.cu and constructDirectionImage.cu. The rest of all the files are compiled and object files created properly. There is no error or warning. It just skips those mentioned files.

Can anyone point out what could be the issue here?

Attached below is the make file.

################################################################################
#
# Copyright 1993-2013 NVIDIA Corporation.  All rights reserved.
#
# NOTICE TO USER:
#
# This source code is subject to NVIDIA ownership rights under U.S. and
# international Copyright laws.
#
# NVIDIA MAKES NO REPRESENTATION ABOUT THE SUITABILITY OF THIS SOURCE
# CODE FOR ANY PURPOSE.  IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR
# IMPLIED WARRANTY OF ANY KIND.  NVIDIA DISCLAIMS ALL WARRANTIES WITH
# REGARD TO THIS SOURCE CODE, INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
# IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
# OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
# OR PERFORMANCE OF THIS SOURCE CODE.
#
# U.S. Government End Users.  This source code is a "commercial item" as
# that term is defined at 48 C.F.R. 2.101 (OCT 1995), consisting  of
# "commercial computer software" and "commercial computer software
# documentation" as such terms are used in 48 C.F.R. 12.212 (SEPT 1995)
# and is provided to the U.S. Government only as a commercial end item.
# Consistent with 48 C.F.R.12.212 and 48 C.F.R. 227.7202-1 through
# 227.7202-4 (JUNE 1995), all U.S. Government End Users acquire the
# source code with only those rights set forth herein.
#
################################################################################
#
# Makefile project only supported on Mac OS X and Linux Platforms)
#
################################################################################

# Location of the CUDA Toolkit
CUDA_PATH       ?= /usr/local/cuda-6.5

OSUPPER = $(shell uname -s 2>/dev/null | tr "[:lower:]" "[:upper:]")
OSLOWER = $(shell uname -s 2>/dev/null | tr "[:upper:]" "[:lower:]")

OS_SIZE    = $(shell uname -m | sed -e "s/x86_64/64/" -e "s/armv7l/32/" -e "s/aarch64/64/")
OS_ARCH    = $(shell uname -m)
ARCH_FLAGS =

DARWIN = $(strip $(findstring DARWIN, $(OSUPPER)))
ifneq ($(DARWIN),)
    XCODE_GE_5 = $(shell expr `xcodebuild -version | grep -i xcode | awk '{print $$2}' | cut -d'.' -f1` \>= 5)
endif

# Take command line flags that override any of these settings
ifeq ($(x86_64),1)
    OS_SIZE = 64
    OS_ARCH = x86_64
endif
ifeq ($(ARMv7),1)
    OS_SIZE    = 32
    OS_ARCH    = armv7l
    ARCH_FLAGS = -target-cpu-arch ARM
endif
ifeq ($(aarch64),1)
    OS_SIZE    = 64
    OS_ARCH    = aarch64
    ARCH_FLAGS = -target-cpu-arch ARM
endif

# Common binaries
ifneq ($(DARWIN),)
ifeq ($(XCODE_GE_5),1)
  GCC ?= clang
else
  GCC ?= g++
endif
else
ifeq ($(ARMv7),1)
  GCC ?= arm-linux-gnueabihf-g++
else
  GCC ?= g++
endif
endif
NVCC := $(CUDA_PATH)/bin/nvcc -ccbin $(GCC)

# internal flags
NVCCFLAGS   := -m${OS_SIZE} ${ARCH_FLAGS}
CCFLAGS     :=
LDFLAGS     :=

# Extra user flags
EXTRA_NVCCFLAGS   ?=
EXTRA_LDFLAGS     ?=
EXTRA_CCFLAGS     ?=

# OS-specific build flags
ifneq ($(DARWIN),)
  LDFLAGS += -rpath $(CUDA_PATH)/lib
  CCFLAGS += -arch $(OS_ARCH)
else
  ifeq ($(OS_ARCH),armv7l)
    ifeq ($(abi),androideabi)
      NVCCFLAGS += -target-os-variant Android
    else
      ifeq ($(abi),gnueabi)
        CCFLAGS += -mfloat-abi=softfp
      else
        # default to gnueabihf
        override abi := gnueabihf
        LDFLAGS += --dynamic-linker=/lib/ld-linux-armhf.so.3
        CCFLAGS += -mfloat-abi=hard
      endif
    endif
  endif
endif

ifeq ($(ARMv7),1)
ifneq ($(TARGET_FS),)
GCCVERSIONLTEQ46 := $(shell expr `$(GCC) -dumpversion` \<= 4.6)
ifeq ($(GCCVERSIONLTEQ46),1)
CCFLAGS += --sysroot=$(TARGET_FS)
endif
LDFLAGS += --sysroot=$(TARGET_FS)
LDFLAGS += -rpath-link=$(TARGET_FS)/lib
LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib
LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib/arm-linux-$(abi)
endif
endif

# Debug build flags
ifeq ($(dbg),1)
      NVCCFLAGS += -g -G
      TARGET := debug
else
      TARGET := release
endif

ALL_CCFLAGS :=
ALL_CCFLAGS += $(NVCCFLAGS)
ALL_CCFLAGS += $(EXTRA_NVCCFLAGS)
ALL_CCFLAGS += $(addprefix -Xcompiler ,$(CCFLAGS))
ALL_CCFLAGS += $(addprefix -Xcompiler ,$(EXTRA_CCFLAGS))

ALL_LDFLAGS :=
ALL_LDFLAGS += $(ALL_CCFLAGS)
ALL_LDFLAGS += $(addprefix -Xlinker ,$(LDFLAGS))
ALL_LDFLAGS += $(addprefix -Xlinker ,$(EXTRA_LDFLAGS))

# Common includes and paths for CUDA
INCLUDES  := -I../../common/inc
LIBRARIES :=

################################################################################

SAMPLE_ENABLED := 1

# Gencode arguments
ifeq ($(OS_ARCH),armv7l)
SMS ?= 20 30 32 35 37 50 52
else
SMS ?= 11 20 30 35 37 50 52
endif

ifeq ($(SMS),)
$(info >>> WARNING - no SM architectures have been specified - waiving sample <<<)
SAMPLE_ENABLED := 0
endif

ifeq ($(GENCODE_FLAGS),)
# Generate SASS code for each SM architecture listed in $(SMS)
$(foreach sm,$(SMS),$(eval GENCODE_FLAGS += -gencode arch=compute_$(sm),code=sm_$(sm)))

# Generate PTX code from the highest SM architecture in $(SMS) to guarantee forward-compatibility
HIGHEST_SM := $(lastword $(sort $(SMS)))
ifneq ($(HIGHEST_SM),)
GENCODE_FLAGS += -gencode arch=compute_$(HIGHEST_SM),code=compute_$(HIGHEST_SM)
endif
endif

ifeq ($(SAMPLE_ENABLED),0)
EXEC ?= @echo "[@]"
endif

################################################################################

# Target rules
all: build

build: gpuFDCM

check.deps:
ifeq ($(SAMPLE_ENABLED),0)
    @echo "Sample will be waived due to the above missing dependencies"
else
    @echo "Sample is ready - all dependencies have been met"
endif

ConvertBase64.o:../src/vfcore/ConvertBase64.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

FileNameUtils.o:../src/vfcore/FileNameUtils.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

FileUtils.o:../src/vfcore/FileUtils.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

fstream.o:../src/vfcore/fstream.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

Matrixd.o:../src/vfcore/Matrixd.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

Matrixf.o:../src/vfcore/Matrixf.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

Quat.o:../src/vfcore/Quat.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

RefCounted.o:../src/vfcore/RefCounted.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

Timer.o:../src/vfcore/Timer.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

tinystr.o:../src/vfcore/tinystr.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

tinyxml.o:../src/vfcore/tinyxml.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

tinyxmlerror.o:../src/vfcore/tinyxmlerror.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

tinyxmlparser.o:../src/vfcore/tinyxmlparser.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

main.o:../gpuFDCM/main.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

Fdcm_Matcher.o:../gpuFDCM/Fdcm_Matcher.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

cv_utils.o:../gpuFDCM/cv_utils.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

Common.o:../gpuFDCM/src/Common.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

compDT.o:../gpuFDCM/src/compDT.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

constructDIntegrals.o:../gpuFDCM/src/constructDIntegrals.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

constructDirectionImage.o:../gpuFDCM/src/constructDirectionImage.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

detectBruteForce.o:../gpuFDCM/src/detectBruteForce.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

Line.o:../gpuFDCM/src/Line.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

LineMatcherParams.o:../gpuFDCM/src/LineMatcherParams.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

LMNonMaximumSuppression.o:../gpuFDCM/src/LMNonMaximumSuppression.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

SingleShapeDetectionWithVaryingQuerySize.o:../gpuFDCM/src/SingleShapeDetectionWithVaryingQuerySize.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

updateCosts.o:../gpuFDCM/src/updateCosts.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

LFLineFitter.o:../gpuFDCM/FitLine/LFLineFitter.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

#cppIntegration_gold.o:cppIntegration_gold.cpp
#   $(EXEC) $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<
#
#main.o:main.cpp
#   $(EXEC) $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

gpuFDCM: ConvertBase64.o cv_utils.o detectBruteForce.o Fdcm_Matcher.o FileNameUtils.o FileUtils.o fstream.o LFLineFitter.o LineMatcherParams.o Line.o LMNonMaximumSuppression.o main.o Matrixd.o Quat.o RefCounted.o SingleShapeDetectionWithVaryingQuerySize.o Timer.o tinystr.o tinyxmlerror.o tinyxml.o tinyxmlparser.o updateCosts.o -lopencv_core -lpthread
    $(EXEC) $(NVCC) $(ALL_LDFLAGS) $(GENCODE_FLAGS) -o $@ $+ $(LIBRARIES)
    $(EXEC) mkdir -p ../../bin/$(OS_ARCH)/$(OSLOWER)/$(TARGET)$(if $(abi),/$(abi))
    $(EXEC) cp $@ ../../bin/$(OS_ARCH)/$(OSLOWER)/$(TARGET)$(if $(abi),/$(abi))

run: build
    $(EXEC) ./gpuFDCM

clean:
    rm -f gpuFDCM ConvertBase64.o cv_utils.o detectBruteForce.o Fdcm_Matcher.o FileNameUtils.o FileUtils.o fstream.o LFLineFitter.o LineMatcherParams.o Line.o LMNonMaximumSuppression.o main.o Matrixd.o Quat.o RefCounted.o SingleShapeDetectionWithVaryingQuerySize.o Timer.o tinystr.o tinyxmlerror.o tinyxml.o tinyxmlparser.o updateCosts.o
    rm -rf ../../bin/$(OS_ARCH)/$(OSLOWER)/$(TARGET)$(if $(abi),/$(abi))/gpuFDCM

clobber: clean

The target for all is build , the target for build is gpuFDCM . The target gpuFDCM does not mention to build Matrixf.o , Common.o or compDT.o .

snippet:

all: build
build: gpuFDCM
# no Matrixf.o, Common.o, compDT.o in here....
gpuFDCM: ConvertBase64.o cv_utils.o detectBruteForce.o Fdcm_Matcher.o FileNameUtils.o FileUtils.o fstream.o LFLineFitter.o LineMatcherParams.o Line.o LMNonMaximumSuppression.o main.o Matrixd.o Quat.o RefCounted.o SingleShapeDetectionWithVaryingQuerySize.o Timer.o tinystr.o tinyxmlerror.o tinyxml.o tinyxmlparser.o updateCosts.o -lopencv_core -lpthread
    $(EXEC) $(NVCC) $(ALL_LDFLAGS) $(GENCODE_FLAGS) -o $@ $+ $(LIBRARIES)
    $(EXEC) mkdir -p ../../bin/$(OS_ARCH)/$(OSLOWER)/$(TARGET)$(if $(abi),/$(abi))
    $(EXEC) cp $@ ../../bin/$(OS_ARCH)/$(OSLOWER)/$(TARGET)$(if $(abi),/$(abi))

If you want to build this files, you have to specify them explicit, as they have their own targets:

Matrixf.o:../src/vfcore/Matrixf.cpp
    $(EXEC) $(NVCC) $(INCLUDES) -I../include -I../gpuFDCM -I../gpuFDCM/include  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

Common.o:../gpuFDCM/src/Common.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

compDT.o:../gpuFDCM/src/compDT.cu
    $(EXEC) $(NVCC) $(INCLUDES) -DUSE_CUDA -I../include -I../gpuFDCM -I../gpuFDCM/include -I../gpuFDCM/FitLine  $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<

Or add the targets to gpuFDCM:

gpuFDCM: Matrixf.o Common.o compDT.o ConvertBase64.o ....
#        ^^^^^^^^^ ^^^^^^^^ ^^^^^^^^

(Side note: I would not recommend you to use Matrixf except you have older hardware. Matrixf is for float while Matrixd is for double. There are not many reasons to use float matrices nowadays...)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM