--- /dev/null
+# Version : 0.0.8\r
+# Date : 01.08.2014\r
+# Author : Cedric.Bilat@he-arc.ch\r
+#\r
+# See : OptionCompilateur.txt\r
+#\r
+# Hyp : Application that must be in path\r
+# nvcc\r
+# make\r
+# g++\r
+# gcc\r
+#\r
+\r
+\r
+ifndef __MAKE_CUDA_GCC_MK__\r
+__MAKE_CUDA_GCC_MK__=true\r
+\r
+##############################################\r
+# Variables #\r
+##############################################\r
+\r
+#SHELL=/bin/bash\r
+\r
+machine:=${shell uname -m}\r
+ifeq (${machine},x86_64)\r
+ ARCHI_32_64:=64\r
+else\r
+ ARCHI_32_64:=32\r
+endif\r
+\r
+########\r
+# Path #\r
+########\r
+\r
+SRC_ROOT:=src\r
+TARGET_OBJ:=${TARGET_PATH}/obj\r
+TARGET_BIN:=${TARGET_PATH}/bin\r
+TARGET_CUBIN:=${TARGET_PATH}/cubin\r
+\r
+#synonime ameliorer\r
+TARGET_BIN_PATH:=${TARGET_BIN}\r
+TARGET_OBJ_PATH:=${TARGET_OBJ}\r
+\r
+#TARGET_DEPLOY_PATH_BIN=${TARGET_DEPLOY_PATH}/bin\r
+TARGET_DEPLOY_PATH_DOC=${TARGET_DEPLOY_PATH}/doc\r
+\r
+########\r
+# cpp #\r
+########\r
+\r
+CXX=g++\r
+\r
+########\r
+# Cuda #\r
+########\r
+\r
+NVCC := nvcc\r
+PTXAS_FLAGS := -fastimul\r
+OBJ_EXTENSION:=o\r
+OPTION_SEPARATOR:=-#attention, end without space\r
+LINK_FLAG_DLL:=-shared #with space ! pour nvcc\r
+EXTENSION_LIB:=.a\r
+EXTENSION_DLL:=.so\r
+LIB_PREFIXE:=lib# example : libXXX.a\r
+LIB_FLAG_SEPARATOR:=l#attention end without space!\r
+LIB_PATH_SEPARATOR:=L#attention end with space!\r
+\r
+########\r
+#32/64 #\r
+########\r
+\r
+#ifeq ($(ARCHI_32_64),64)\r
+ #override NVCCFLAGS+= -m64#default -m64! #dans public\r
+ #override CXXLDFLAGS+=/MACHINE:X64 #Deprecated! \r
+#endif\r
+\r
+ifneq ($(ARCH),arm)\r
+ TARGET_NAME:=$(TARGET_NAME)_$(ARCHI_32_64)\r
+else\r
+ TARGET_NAME:=$(TARGET_NAME)_ARM\r
+endif\r
+\r
+###########\r
+#Extension#\r
+###########\r
+\r
+EXTENSION_OBJ:=o#\r
+EXTENSION_LIB:=a#\r
+EXTENSION_DLL:=so#\r
+EXTENSION_EXE:=run#\r
+# Note enstension sans le .\r
+\r
+##########\r
+# TARGET #\r
+##########\r
+\r
+#deja ci-dessus\r
+#LIB_PREFIXE:=lib\r
+\r
+TARGET_NAME_EXE:=$(TARGET_NAME).${EXTENSION_EXE}\r
+TARGET_NAME_DLL:=${LIB_PREFIXE}$(TARGET_NAME).$(EXTENSION_DLL)\r
+TARGET_NAME_LIB:=${LIB_PREFIXE}$(TARGET_NAME).${EXTENSION_LIB}\r
+\r
+TARGET_EXE:=${TARGET_BIN_PATH}/$(TARGET_NAME_EXE)\r
+TARGET_DLL:=${TARGET_BIN_PATH}/$(TARGET_NAME_DLL)\r
+TARGET_LIB:=${TARGET_BIN_PATH}/$(TARGET_NAME_LIB)\r
+#TARGET_OBJ:=$(addprefix $(TARGET_OBJ_PATH)/,$(notdir $(OBJ_FILES)))\r
+\r
+#Selection de la target en fonction TARGET_MODE\r
+ifeq ($(TARGET_MODE),EXE)\r
+ TARGET:=${TARGET_EXE}\r
+ TARGET_DEPLOY:=$(TARGET_DEPLOY_PATH_BIN)/$(TARGET_NAME_EXE)\r
+endif\r
+\r
+ifeq ($(TARGET_MODE),SHARED_LIB)\r
+ TARGET:=${TARGET_DLL}\r
+ TARGET_DEPLOY:=$(TARGET_DEPLOY_PATH_BIN)/$(TARGET_NAME_DLL)\r
+ \r
+ override NVCCLDFLAGS += $(LINK_FLAG_DLL)\r
+ \r
+ #Attention ARM : doit venir juste après le -Xcompiler!\r
+ override CXXFLAGS := -fPIC -fvisibility=hidden ${CXXFLAGS}\r
+ \r
+\r
+endif\r
+\r
+ifeq ($(TARGET_MODE),STATIC_LIB)\r
+ TARGET:=${TARGET_LIB}\r
+ TARGET_DEPLOY:=$(TARGET_DEPLOY_PATH_BIN)/$(TARGET_NAME_LIB)\r
+endif\r
+\r
+#old\r
+\r
+#ifeq ($(TARGET_MODE),SHARED_LIB)\r
+# override NVCCLDFLAGS+= $(LINK_FLAG_DLL) \r
+# override CXXFLAGS += -fPIC -fvisibility=hidden\r
+# TARGET_NAME_FULL=lib$(TARGET_NAME).so\r
+#endif\r
+#\r
+#ifeq ($(TARGET_MODE),EXE)\r
+# TARGET_NAME_FULL=$(TARGET_NAME).run\r
+#endif\r
+\r
+#TARGET:=$(TARGET_BIN)/$(TARGET_NAME_FULL)\r
+#TARGET_DEPLOY:=$(TARGET_DEPLOY_PATH_BIN)/$(TARGET_NAME_FULL)\r
+\r
+##########\r
+#ARCHIVEUR#\r
+###########\r
+\r
+ifneq ($(ARCH),arm)\r
+ AR:=ar\r
+else\r
+ AR:=arARM\r
+endif\r
+\r
+ARFLAGS=# pas= car valeur vaut rv avant sous windows ???\r
+AR_OUT_FLAG:=-r #with espace important !\r
+\r
+############\r
+# Params #\r
+############\r
+\r
+#ameliorer deja avant mais sans .\r
+EXTENSION_LIB:=.a\r
+EXTENSION_DLL:=.so\r
+#LIB_PREFIX:=#pas de prefixe\r
+\r
+############\r
+#Set files #\r
+############\r
+\r
+SRC_PATH:=$(shell find $(SRC_ROOT) -type d) \r
+\r
+ifdef SRC_AUX\r
+ SRC_PATH_AUX:=$(shell find $(SRC_AUX) -type d)\r
+else\r
+ SRC_PATH_AUX:=\r
+endif\r
+\r
+SRC_PATH_ALL:=$(SRC_PATH) $(SRC_PATH_AUX)\r
+SRC_SO_FILES:=$(foreach dir,$(SRC_PATH_ALL),$(wildcard $(dir)/*.so))\r
+\r
+# Libraries au format standard\r
+#\r
+# Input : \r
+# SRC_PATH_ALL\r
+# Output :\r
+# All files \r
+# libXXX.a\r
+# libXXX.so\r
+# XXX.so\r
+# Excepted\r
+# XXX.a \r
+# Goals :\r
+# Les .a prefixe par lib (example libXXX.a) seront donnee a GCC sous la forme -lXXX)\r
+# Alors que les YYY.a devront etre donner a GCC sous la forme YYY.a\r
+# Convention\r
+# Sous linux les .a standards sont libXXX.a\r
+# Les YYY.a sont non standards.\r
+#\r
+SRC_A_FILES_STANDART:=$(foreach dir,$(SRC_PATH_ALL),$(wildcard $(dir)/$(LIB_PREFIXE)*$(EXTENSION_LIB)))\r
+SRC_A_FILES_STANDART+=$(SRC_SO_FILES)\r
+\r
+# Libraries au format non standard\r
+#\r
+# Input : \r
+# SRC_PATH_ALL\r
+# Output :\r
+# All files XXX.a (without libXXX.a)\r
+# Objectifs :\r
+# Les .a prefixer par lib (libXXX.a) seront donnee a GCC sous la forme -lXXX\r
+# Alors que les YYY.a devront etre donner a GCC sous la forme YYY.a avec la path complet (par exemple ../libs/YYY.a)\r
+#\r
+SRC_A_FILES_NOT_STANDARD:=$(foreach dir,$(SRC_PATH_ALL),$(filter-out $(dir)/$(LIB_PREFIXE)%$(EXTENSION_LIB),$(wildcard $(dir)/*$(EXTENSION_LIB))))\r
+\r
+SRC_CPP_FILES := $(foreach dir,$(SRC_PATH_ALL),$(wildcard $(dir)/*.cpp)) \r
+SRC_C_FILES := $(foreach dir,$(SRC_PATH_ALL),$(wildcard $(dir)/*.c)) \r
+SRC_CU_FILES := $(foreach dir,$(SRC_PATH_ALL),$(wildcard $(dir)/*.cu)) \r
+\r
+OBJ_FILES_CPP:= $(SRC_CPP_FILES:.cpp=.$(OBJ_EXTENSION))\r
+OBJ_FILES_C:= $(SRC_C_FILES:.c=.$(OBJ_EXTENSION))\r
+OBJ_FILES:= ${OBJ_FILES_CPP} ${OBJ_FILES_C}\r
+OBJ_FILES:= $(addprefix $(TARGET_OBJ)/,$(notdir $(OBJ_FILES)))\r
+\r
+CU_FILES := $(SRC_CU_FILES:.cu=.$(OBJ_EXTENSION))\r
+CU_FILES := $(addprefix $(TARGET_OBJ)/,$(notdir $(CU_FILES))) \r
+\r
+OBJ_CU_FILES:=$(OBJ_FILES) $(CU_FILES)\r
+\r
+#################\r
+# PREPARE FLAGS #\r
+#################\r
+\r
+#only fileName (./libs/libXXX.a ./libs/YYY.so -> lixXXX.a YYY.so)\r
+LIB_FLAG:=$(notdir $(SRC_A_FILES_STANDART))\r
+\r
+#removing prefix lib (libXXX.a libYYY.a libZZZ.so -> XXX.a YYY.a ZZZ.so)\r
+LIB_FLAG:=$(subst $(LIB_PREFIXE),,$(LIB_FLAG))#remplace lib par rien\r
+\r
+#Delete extension .a (XXX YYY)\r
+LIB_FLAG:=$(LIB_FLAG:$(EXTENSION_LIB)=)\r
+\r
+#Delete extension .so (AAA.so BBB.so -> AAA BBB)\r
+LIB_FLAG:=$(LIB_FLAG:$(EXTENSION_DLL)=)\r
+\r
+#ADDING user specified lib (GL GLUT gomp ...)\r
+LIB_FLAG+=$(ADD_LIBRARY_FILES)\r
+\r
+# Input :\r
+# list lib to delete example (AAA ZZZ)\r
+#\r
+# before : LIB_FLAG (XXX YYY ZZZ)\r
+# after : LIB_FLAG (XXX YYY) without ZZZ\r
+LIB_FLAG:=$(filter-out $(EXCLUDE_LIBRARY_FILES),$(LIB_FLAG))\r
+\r
+#Adding Lib FLAG separator (XXX YYY -> -lXXX -lYYY)\r
+LIB_FLAG:=$(addprefix $(OPTION_SEPARATOR)$(LIB_FLAG_SEPARATOR),$(LIB_FLAG))\r
+LIB_FLAG+=$(CUDA_LIB_FILES_l) $(CULA_LIB_FILES_l)\r
+\r
+#Adding Lib path FLAG separator -L (../AAA ./BBB -> -L../AAA _L./BBB)\r
+LIB_PATH:=$(foreach dir,$(SRC_PATH_ALL),$(dir $(wildcard $(dir)/*.so)))#dir extract directory of file, $(wildcard $(dir)/*.h)=> take file.h if exist\r
+override LIB_PATH:=$(call uniq,${LIB_PATH})\r
+#LIB_PATH_FLAG+=$(CUDA_LIB_L) $(CULA_LIB_L)#old\r
+#LIB_PATH_FLAG:=$(addprefix $(OPTION_SEPARATOR)$(LIB_PATH_SEPARATOR),$(SRC_PATH_ALL))#old\r
+LIB_PATH_FLAG:=$(addprefix $(OPTION_SEPARATOR)$(LIB_PATH_SEPARATOR),$(LIB_PATH))\r
+\r
+#Adding Include FLAG separator\r
+override INC_PATH:=${INC_PATH} $(foreach dir,$(SRC_PATH_ALL),$(dir $(wildcard $(dir)/*.h)))#dir extract directory of file, $(wildcard $(dir)/*.h)=> take file.h if exist\r
+override INC_PATH:=$(call uniq,${INC_PATH})\r
+#${info "INC_PATH= "${INC_PATH}}#print immediately\r
+#SRC_HEADER_I := $(addprefix $(OPTION_SEPARATOR)I,$(SRC_PATH_ALL))#old\r
+SRC_HEADER_I := $(addprefix $(OPTION_SEPARATOR)I,$(INC_PATH))\r
+#ALL_HEADERS_I:= $(SRC_HEADER_I)#old \r
+\r
+\r
+#Injection variable in .cpp code (VAR1 VAR2 -> -DVAR1 -DVAR2)\r
+CODE_DEFINE_VARIABLES_D:= $(addprefix -D,$(CODE_DEFINE_VARIABLES))\r
+\r
+#override NVCCFLAGS += $(ALL_HEADERS_I)#old \r
+override NVCCFLAGS += $(SRC_HEADER_I) \r
+override NVCCLDFLAGS += $(LIB_PATH_FLAG) $(LIB_FLAG) $(SRC_A_FILES_NOT_STANDARD)\r
+override CXXFLAGS += $(CODE_DEFINE_VARIABLES_D)\r
+\r
+##########\r
+# securite #\r
+##########\r
+\r
+#Directory search path (use implicit in rules)\r
+VPATH := $(SRC_PATH_ALL)\r
+\r
+##########\r
+# runtime #\r
+##########\r
+\r
+space:= #ne suufit pas ajoutre espaca, mais += le fait!\r
+space+=#\r
+\r
+ifeq (${OS},Win)\r
+ separateurPath:=;# \r
+else\r
+ separateurPath:=:#\r
+endif\r
+\r
+API_BIN_FORMATTER:=$(subst ${space},${separateurPath},${API_BIN})\r
+\r
+ifeq (${OS},Win)\r
+ override PATH:=${PATH}${separateurPath}${API_BIN_FORMATTER} \r
+ export ${PATH}\r
+else\r
+ override LD_LIBRARY_PATH:=${LD_LIBRARY_PATH}${separateurPath}${API_BIN_FORMATTER}\r
+ export ${LD_LIBRARY_PATH}#fixme semble pas marcher\r
+endif\r
+\r
+########\r
+#Optimisation #\r
+########\r
+\r
+include ${ROOT_MAKEFILE_PRIVATE_CUDA}/optimisation.mk\r
+\r
+########\r
+#arm #\r
+########\r
+\r
+include ${ROOT_MAKEFILE_PRIVATE_CUDA}/cudaGCC_arm.mk\r
+\r
+##########\r
+# exclude #\r
+##########\r
+\r
+override CXXFLAGS:=$(filter-out $(CXXFLAGS_EXCLUDE),$(CXXFLAGS))\r
+override NVCCFLAGS:=$(filter-out $(NVCCFLAGS_EXCLUDE),$(NVCCFLAGS))\r
+\r
+#https://www.gnu.org/software/make/manual/make.html#Functions\r
+\r
+\r
+##########\r
+# unicitye #\r
+##########\r
+\r
+UNICITY=true\r
+\r
+ifdef UNICITY\r
+\r
+ override CXXFLAGS:=$(call uniq,${CXXFLAGS})\r
+ override CXXLDFLAGS:=$(call uniq,${CXXLDFLAGS})\r
+ #override NVCCFLAGS:=$(call uniq,${NVCCFLAGS}) pas possible car enleve -gencode\r
+ override NVCCLDFLAGS:=$(call uniq,${NVCCLDFLAGS})\r
+ override ARFLAGS:=$(call uniq,${ARFLAGS})\r
+ #override AR_OUT_FLAG:=$(call uniq,${AR_OUT_FLAG})\r
+ \r
+ #debug\r
+#${info "CXXFLAGS= "${CXXFLAGS}}#print immediately\r
+#${info "CXXLDFLAGS"= ${CXXLDFLAGS}}#print immediatel\r
+#${info "NVCCLDFLAGS= "${NVCCLDFLAGS}}#print immediatel\r
+#${info "NVCCFLAGS= "${NVCCFLAGS}}#print immediatel\r
+#${info "ARFLAGS= "${ARFLAGS}}#print immediatel\r
+#${info "AR_OUT_FLAG= "${AR_OUT_FLAG}}#print immediatel\r
+\r
+endif#UNICITY\r
+\r
+##########\r
+# remove space #\r
+##########\r
+\r
+#let a minimum of one space\r
+REMOVE_SPACE=true\r
+\r
+ifdef REMOVE_SPACE\r
+\r
+ override CXXFLAGS:=$(strip ${CXXFLAGS})\r
+ override CXXLDFLAGS:=$(strip ${CXXLDFLAGS})\r
+ override NVCCLDFLAGS:=$(strip ${NVCCLDFLAGS})\r
+ override NVCCFLAGS:=$(strip ${NVCCFLAGS})\r
+ override ARFLAGS:=$(strip ${ARFLAGS})\r
+ #override AR_OUT_FLAG:=$(strip ${AR_OUT_FLAG})#pas pour gcc (enleve espace apres -r)\r
+\r
+ #override CXXFLAGS:=$(subst $(space),,$(CXXFLAGS))\r
+\r
+endif#REMOVE_SPACE\r
+\r
+\r
+##########\r
+# bug #\r
+##########\r
+\r
+#Adding " " around CXXFLAGS and CXXLDFLAGS, otherwise we can't specifie more than one options !\r
+override CXXFLAGS:=" $(CXXFLAGS) " \r
+override CXXLDFLAGS:=" $(CXXLDFLAGS) "\r
+\r
+###########\r
+#chrono#\r
+###########\r
+\r
+override TIME_START:=$(shell date +%T)\r
+TIME_CURRENT=$(shell date +%T)\r
+#TIME_DELTA:=$(shell echo $(TIME_CURRENT) - $(TIME_START) | bc) #marche pas sous win, a tester sous linux\r
+\r
+##############################################\r
+# Rules #\r
+##############################################\r
+\r
+TITLE:=$(TARGET_NAME)\r
+\r
+################\r
+#.o->.run #\r
+################\r
+\r
+$(TARGET) : $(OBJ_CU_FILES)\r
+#@echo "$(NVCC) $(NVCCLDFLAGS) -Xlinker $(CXXLDFLAGS) $^ -o $(TARGET)"\r
+ @echo ""\r
+ @echo "[CBI] -> Linking to : "$(TARGET)\r
+ @echo ""\r
+ @echo "[CBI] -> Library Link :"\r
+ @echo "[CBI] ->" \r
+ @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(call containing,-l,$(NVCCLDFLAGS)))\r
+ @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(call containing,-l,$(CXXLDFLAGS)))\r
+ @echo "" \r
+ @$(NVCC) $(NVCCLDFLAGS) -Xlinker $(CXXLDFLAGS) $^ -o $(TARGET)\r
+ @echo ""\r
+ @echo "=================================================================================="\r
+ @echo "[CBI] -> Target Name : "$(TARGET_NAME)\r
+ @echo "[CBI] -> Location : "$(TARGET)\r
+ @echo "[CBI] -> Deploy : "$(TARGET_DEPLOY_PATH_BIN)\r
+ @echo "[CBI] ->"\r
+ @echo "[CBI] -> Type : "$(TARGET_MODE)\r
+ @echo "[CBI] -> Arch : "$(ARCHI_32_64)\r
+ @echo "[CBI] -> OS : "$(OS)\r
+ @echo "[CBI] -> User : "$(USER)\r
+ @echo "[CBI] ->"\r
+ @echo "[CBI] -> Compilateur : ${CXX}) && ${NVCC}"\r
+ @echo "[CBI] -> Task : End Compiling-Linking !" \r
+ @echo "[CBI] -> Time : "${TIME_CURRENT} \r
+ @echo "=================================================================================="\r
+ @echo ""\r
+\r
+# -o =outfile\r
+# tabulation obligatoire before @\r
+\r
+################\r
+# .o->.lib #\r
+################\r
+\r
+${TARGET_LIB}:$(OBJ_CU_FILES)\r
+ @${AR} ${AR_OUT_FLAG}${TARGET_LIB} ${ARFLAGS} $^\r
+ @echo ""\r
+ @echo "=================================================================================="\r
+ @echo "[CBI] -> Target Name : "$(TARGET_NAME)\r
+ @echo "[CBI] -> Location : "$(TARGET)\r
+ @echo "[CBI] -> Deploy : "$(TARGET_DEPLOY_PATH_BIN)\r
+ @echo "[CBI] ->"\r
+ @echo "[CBI] -> Type : "$(TARGET_MODE)\r
+ @echo "[CBI] -> Arch : "$(ARCHI_32_64)\r
+ @echo "[CBI] -> OS : "$(OS)\r
+ @echo "[CBI] -> User : "$(USER)\r
+ @echo "[CBI] ->"\r
+ @echo "[CBI] -> Compilateur : ${CXX}) && ${NVCC}"\r
+ @echo "[CBI] -> Task : End Compiling-Archive !" \r
+ @echo "[CBI] -> Time : "${TIME_CURRENT} \r
+ @echo "=================================================================================="\r
+ @echo ""\r
+\r
+################\r
+# .cpp->.o #\r
+################\r
+\r
+$(TARGET_OBJ)/%.$(OBJ_EXTENSION) :%.cpp\r
+#@echo "$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler $(CXXFLAGS) -c $< -o $@"\r
+ifdef ARM\r
+ @echo "[${TITLE}] -> g++ARM compiling .cpp : "$< \r
+else\r
+ @echo "[${TITLE}] -> ${CXX} compiling .cpp : "$<\r
+endif\r
+ @$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler $(CXXFLAGS) -o $@ -c $<\r
+\r
+# -c = compilation\r
+# -o =outfile\r
+\r
+################\r
+# .c->.o #\r
+################\r
+\r
+$(TARGET_OBJ)/%.$(OBJ_EXTENSION) :%.c\r
+#@echo "$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler $(CXXFLAGS) -c $< -o $@"\r
+ifdef ARM\r
+ @echo "[${TITLE}] -> g++ARM compiling .cpp : "$< \r
+else\r
+ @echo "[${TITLE}] -> ${CXX} compiling .cpp : "$<\r
+endif\r
+ @$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler $(CXXFLAGS) -o $@ -c $<\r
+\r
+# -c = compilation\r
+# -o =outfile\r
+\r
+################\r
+# .cu->.o #\r
+################\r
+\r
+$(TARGET_OBJ)/%.$(OBJ_EXTENSION) :%.cu\r
+#@echo "@$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler ""$(filter-out -std=c++0x,$(CXXFLAGS))"" -c $< -o $@"\r
+ @echo "[${TITLE}] -> ${NVCC} compiling .cu : "$<\r
+ @$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler ""$(filter-out -std=c++0x,$(CXXFLAGS))"" -c $< -o $@\r
+#cuda6: Il ne faut pas utiliser le flag �std=c++0x lorsque l�on compile un fichier .cu !\r
+#cuda6.5: devrait etre ok\r
+##Adding "" "" around final CXXFLAGS, to keep one " " around final CXXFLAGS , in order to can specifie more than one options !\r
+\r
+# -c = compilation\r
+# -o =outfile\r
+\r
+##############################################\r
+# TARGET #\r
+##############################################\r
+\r
+#all: version help\r
+#all: echoing $(TARGET) deploy \r
+all: echoing init $(TARGET) deploy cleanTempCudaFile\r
+ @echo ""\r
+ @echo "[CBI] -> "$(TITLE)" : End ALL!"\r
+\r
+.PHONY: version \r
+version:\r
+ @echo ""\r
+ @nvcc --version\r
+ @echo ""\r
+ @gcc --version\r
+ @echo ""\r
+ @g++ --version\r
+ @echo ""\r
+ @make --version\r
+ @echo ""\r
+ @bash --version\r
+ @echo ""\r
+\r
+.PHONY: help \r
+help:\r
+ @echo ""\r
+ @nvcc --help\r
+ \r
+##########\r
+# deploy #\r
+##########\r
+\r
+.PHONY: deploy \r
+deploy:\r
+ifdef TARGET_DEPLOY_PATH\r
+ @$(shell cp $(TARGET) $(TARGET_DEPLOY))\r
+ @echo ""\r
+ @echo "[CBI] -> Deploying : "$(TARGET_DEPLOY)\r
+endif\r
+\r
+##########\r
+# run #\r
+##########\r
+\r
+.PHONY: run \r
+run: printRuntimeInfo\r
+ @echo ""\r
+ @echo "[CBI] -> Running : "$(TARGET) $(ARGS)\r
+ @echo ""\r
+ @echo "------------------------------------------------------------------------"\r
+ @echo ""\r
+ @echo ""\r
+ @$(TARGET) $(ARGS)\r
+\r
+.PHONY: runDeploy \r
+runDeploy: printRuntimeInfo\r
+ @echo ""\r
+ @echo "[CBI] -> Running : "$(TARGET_DEPLOY) $(ARGS)\r
+ @echo ""\r
+ @echo "------------------------------------------------------------------------"\r
+ @echo ""\r
+ @echo ""\r
+ @$(TARGET_DEPLOY) $(ARGS) \r
+\r
+.PHONY: runGl \r
+runGl: printRuntimeInfo\r
+ #gl is a wrapper of virtualgl\r
+ #gl is necessary to run opengl remotely with turbovnc\r
+ #OS : linux only\r
+ @echo ""\r
+ @echo "[CBI] -> Running remote-gl : "$(TARGET) $(ARGS)\r
+ @gl $(TARGET) $(ARGS)\r
+\r
+.PHONY: runGlDeploy \r
+runGlDeploy: printRuntimeInfo\r
+ #gl is a wrapper of virtualgl\r
+ #gl is necessary to run opengl remotely with turbovnc\r
+ #OS : linux only!\r
+ @echo ""\r
+ @echo "[CBI] -> Running remote-gl : "$(TARGET_DEPLOY) $(ARGS)\r
+ @gl $(TARGET_DEPLOY) $(ARGS)\r
+\r
+\r
+.PHONY: printRuntimeInfo \r
+printRuntimeInfo:\r
+ @echo "[CBI] -> API BIN :"\r
+ @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh ${sort ${API_BIN}} \r
+ @echo ""\r
+ @echo "[CBI] -> ARGS :"\r
+ @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh ${sort ${ARGS}} \r
+\r
+##########\r
+# depends #\r
+##########\r
+ \r
+.PHONY: dependenciesLinux\r
+dependenciesLinux: printRuntimeInfo\r
+ @echo ""\r
+ @echo "[${TARGET}] depends from :"\r
+ @echo ""\r
+ @ldd -v ${TARGET_DEPLOY}\r
+\r
+##########\r
+# contents #\r
+##########\r
+\r
+.PHONY: contentsLinux\r
+contentsLinux:\r
+ @echo ""\r
+ifeq (${TARGET_MODE},STATIC_LIB) \r
+ @echo "[${TARGET_NAME}.${EXTENSION_LIB}] export :"\r
+ @echo ""\r
+ @ar -t ${TARGET_DEPLOY}\r
+else ifeq (${TARGET_MODE},SHARED_LIB)\r
+ @echo "[${TARGET_NAME}.${EXTENSION_DLL}] export:"\r
+ @echo ""\r
+ @echo "[CBI] -> nm"\r
+ @echo ""\r
+ @nm -D --defined-only --extern--only ${TARGET_DEPLOY}\r
+ @echo ""\r
+ @echo "[CBI] -> readelf"\r
+ @echo ""\r
+ @readelf -s ${TARGET_DEPLOY}\r
+endif \r
+ @echo ""\r
+\r
+##########\r
+# init #\r
+##########\r
+\r
+.PHONY: init \r
+init:\r
+#create folder heirerarchy TARGET_BIN_PATH iff don't exist\r
+ifeq (,$(findstring $(TARGET_BIN),$(wildcard $(TARGET_BIN) )))\r
+ @$(shell mkdir -p $(TARGET_BIN))\r
+ @echo "[CBI] -> Create folder : "$(TARGET_BIN)\r
+endif\r
+#create folder heirerarchy TARGET_BIN_PATH iff don't exist\r
+ifeq (,$(findstring $(TARGET_OBJ),$(wildcard $(TARGET_OBJ) )))\r
+ @$(shell mkdir -p $(TARGET_OBJ))\r
+ @echo "[CBI] -> Create folder : "$(TARGET_OBJ)\r
+endif\r
+#create folder heirerarchy TARGET_BIN_PATH iff don't exist\r
+ifeq (,$(findstring $(TARGET_CUBIN),$(wildcard $(TARGET_CUBIN) )))\r
+ @$(shell mkdir -p $(TARGET_CUBIN))\r
+ @echo "[CBI] -> Create folder : "$(TARGET_CUBIN)\r
+endif\r
+ifeq (,$(findstring $(TARGET_DEPLOY_PATH_BIN),$(wildcard $(TARGET_DEPLOY_PATH_BIN) )))\r
+ @$(shell mkdir -p $(TARGET_DEPLOY_PATH_BIN))\r
+ @echo "[CBI] -> Create folder : "$(TARGET_DEPLOY_PATH_BIN)\r
+ @echo ""\r
+endif\r
+ @echo ""\r
+\r
+##########\r
+# doc #\r
+##########\r
+\r
+include ${ROOT_MAKEFILE_PRIVATE_DOC}/doxyCPP.mk\r
+\r
+##########\r
+# clean #\r
+##########\r
+\r
+.PHONY: clean \r
+clean:\r
+ @rm -f $(TARGET_OBJ)/*.o\r
+ @rm -f $(TARGET_OBJ)/*.obj\r
+ @rm -f $(TARGET_BIN)/*.exp\r
+ @rm -f $(TARGET_BIN)/*.lib\r
+ @rm -f $(TARGET)\r
+ @rm -f $(TARGET_DEPLOY)\r
+ @rm -f $(TARGET_CUBIN)/*\r
+ @rm -f $(TARGET_DOC_DEPLOY_FILE)\r
+ @rm -f -r $(TARGET_DOC_PATH)\r
+ @echo ""\r
+ @echo "=================================================================================="\r
+ @echo "[CBI] -> Target : "$(TARGET_NAME)\r
+ @echo "[CBI] -> Task : DELETE"\r
+ @echo "[CBI]"\r
+ @echo "[CBI] -> Delete .obj : "$(TARGET_OBJ)\r
+ @echo "[CBI] -> Delete .bin : "$(TARGET_BIN)\r
+ @echo "[CBI] -> Delete .cubin : "$(TARGET_CUBIN)\r
+ @echo "[CBI] -> Delete doc : "$(TARGET_DOC_PATH)\r
+ @echo "[CBI]"\r
+ @echo "[CBI] -> Delete deploy : "$(TARGET_DEPLOY)\r
+ @echo "[CBI] -> Delete deploy doc : "$(TARGET_DOC_DEPLOY_FILE)\r
+ @echo "=================================================================================="\r
+ @echo ""\r
+\r
+.PHONY: cleanTempCudaFile \r
+cleanTempCudaFile:\r
+ @rm -f ${TARGET_CUBIN}/*.c\r
+ @rm -f ${TARGET_CUBIN}/*.cpp\r
+ @rm -f ${TARGET_CUBIN}/*.gpu\r
+ @rm -f ${TARGET_CUBIN}/*.i\r
+ @rm -f ${TARGET_CUBIN}/*.ii\r
+ @rm -f ${TARGET_CUBIN}/*.hash\r
+ @rm -f ${TARGET_CUBIN}/*.ptx\r
+#@echo "[CBI] -> Cleaning : Cuda temp files, excepted .cubin for JCuda"\r
+#@echo ""\r
+\r
+#rm -r #serait recursif (dangereux!!)\r
+#rm -f #pas d'erreur si file existe pas!\r
+\r
+##########\r
+# echo #\r
+##########\r
+\r
+.PHONY: echoing \r
+echoing:\r
+ @echo ""\r
+ @echo "=================================================================================="\r
+ @echo "[CBI] -> Target Name : "$(TARGET_NAME)\r
+ @echo "[CBI] ->"\r
+ @echo "[CBI] -> Build : "$(TARGET)\r
+ @echo "[CBI] -> Deploy : "$(TARGET_DEPLOY_PATH_BIN)\r
+ @echo "[CBI] ->"\r
+ @echo "[CBI] -> Type : "$(TARGET_MODE)\r
+ @echo "[CBI] -> Arch : "$(ARCHI_32_64)\r
+ @echo "[CBI] -> OS : "$(OS)\r
+ @echo "[CBI] -> User : "$(USER)\r
+ @echo "[CBI] ->"\r
+ @echo "[CBI] -> Task : Compiling-Linking !" \r
+#@echo "[CBI]->Time : "${TIME_CURRENT} \r
+ @echo "=================================================================================="\r
+ @echo ""\r
+ @echo "[CBI] -> SRC AUX (Recursif) :" \r
+ @echo "[CBI] ->" \r
+#@echo $(SRC_AUX)\r
+ @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(SRC_AUX)\r
+ @echo "" \r
+ @echo "[CBI] -> CXXFLAGS (Partial) :"\r
+ @echo "[CBI] ->" \r
+#@echo $(CXXFLAGS)\r
+ @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(call not-containing,-I,$(CXXFLAGS)) #sort ko why \r
+ @echo "" \r
+ @echo "[CBI] -> CXXLDFLAGS (Partial) :"\r
+ @echo "[CBI] ->" \r
+#@echo $(CXXLDFLAGS)\r
+ @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(call not-containing,-L, $(call not-containing,-l,$(CXXLDFLAGS))) #sort ko, why?\r
+ @echo "" \r
+ @echo "[CBI] -> NVCCFLAGS (Partial) :"\r
+ @echo "[CBI] ->" \r
+#@echo $(NVCCFLAGS)\r
+ @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(call not-containing,-I,$(NVCCFLAGS)))\r
+ @echo "" \r
+ @echo "[CBI] -> NVCCLDFLAGS (Partial) :"\r
+ @echo "[CBI] ->"\r
+#@echo $(NVCCLDFLAGS)\r
+ @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(call not-containing,-L, $(call not-containing,-l,$(NVCCLDFLAGS))))\r
+ @echo "" \r
+ @echo "[CBI] -> INC_PATH (auto detect):"\r
+ @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(INC_PATH))\r
+ @echo "" \r
+ @echo "" \r
+ @echo "[CBI] -> LIB_PATH (auto detect):"\r
+ @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(LIB_PATH))\r
+ @echo "" \r
+ \r
+##############################################\r
+# HELP #\r
+##############################################\r
+\r
+# target : dependencies\r
+#\r
+# $@ = name of the target\r
+# $^ = all dependencie of a target\r
+# $< =first (unique dependency of a target) (rm, compilation,linking)\r
+#\r
+# @ = diminue verbosit� commande\r
+#\r
+# Attention : tabulation obligatoire avant commande dans rule!!\r
+#\r
+# http://www.gnu.org/software/make/manual/\r
+\r
+#############################################\r
+# END #\r
+#############################################\r
+\r
+\r
+endif#__MAKE_CUDA_GCC_MK__\r
+\r
+\r
+\r