Ajout de l'ensemble du workspace.
[GPU.git] / WCudaMSE / BUILDER / makefile / private / cuda / makeCudaGCC.mk
1 # Version : 0.0.8
2 # Date : 01.08.2014
3 # Author : Cedric.Bilat@he-arc.ch
4 #
5 # See : OptionCompilateur.txt
6 #
7 # Hyp : Application that must be in path
8 # nvcc
9 # make
10 # g++
11 # gcc
12 #
13
14
15 ifndef __MAKE_CUDA_GCC_MK__
16 __MAKE_CUDA_GCC_MK__=true
17
18 ##############################################
19 # Variables #
20 ##############################################
21
22 #SHELL=/bin/bash
23
24 machine:=${shell uname -m}
25 ifeq (${machine},x86_64)
26 ARCHI_32_64:=64
27 else
28 ARCHI_32_64:=32
29 endif
30
31 ########
32 # Path #
33 ########
34
35 SRC_ROOT:=src
36 TARGET_OBJ:=${TARGET_PATH}/obj
37 TARGET_BIN:=${TARGET_PATH}/bin
38 TARGET_CUBIN:=${TARGET_PATH}/cubin
39
40 #synonime ameliorer
41 TARGET_BIN_PATH:=${TARGET_BIN}
42 TARGET_OBJ_PATH:=${TARGET_OBJ}
43
44 #TARGET_DEPLOY_PATH_BIN=${TARGET_DEPLOY_PATH}/bin
45 TARGET_DEPLOY_PATH_DOC=${TARGET_DEPLOY_PATH}/doc
46
47 ########
48 # cpp #
49 ########
50
51 CXX=g++
52
53 ########
54 # Cuda #
55 ########
56
57 NVCC := nvcc
58 PTXAS_FLAGS := -fastimul
59 OBJ_EXTENSION:=o
60 OPTION_SEPARATOR:=-#attention, end without space
61 LINK_FLAG_DLL:=-shared #with space ! pour nvcc
62 EXTENSION_LIB:=.a
63 EXTENSION_DLL:=.so
64 LIB_PREFIXE:=lib# example : libXXX.a
65 LIB_FLAG_SEPARATOR:=l#attention end without space!
66 LIB_PATH_SEPARATOR:=L#attention end with space!
67
68 ########
69 #32/64 #
70 ########
71
72 #ifeq ($(ARCHI_32_64),64)
73 #override NVCCFLAGS+= -m64#default -m64! #dans public
74 #override CXXLDFLAGS+=/MACHINE:X64 #Deprecated!
75 #endif
76
77 ifneq ($(ARCH),arm)
78 TARGET_NAME:=$(TARGET_NAME)_$(ARCHI_32_64)
79 else
80 TARGET_NAME:=$(TARGET_NAME)_ARM
81 endif
82
83 ###########
84 #Extension#
85 ###########
86
87 EXTENSION_OBJ:=o#
88 EXTENSION_LIB:=a#
89 EXTENSION_DLL:=so#
90 EXTENSION_EXE:=run#
91 # Note enstension sans le .
92
93 ##########
94 # TARGET #
95 ##########
96
97 #deja ci-dessus
98 #LIB_PREFIXE:=lib
99
100 TARGET_NAME_EXE:=$(TARGET_NAME).${EXTENSION_EXE}
101 TARGET_NAME_DLL:=${LIB_PREFIXE}$(TARGET_NAME).$(EXTENSION_DLL)
102 TARGET_NAME_LIB:=${LIB_PREFIXE}$(TARGET_NAME).${EXTENSION_LIB}
103
104 TARGET_EXE:=${TARGET_BIN_PATH}/$(TARGET_NAME_EXE)
105 TARGET_DLL:=${TARGET_BIN_PATH}/$(TARGET_NAME_DLL)
106 TARGET_LIB:=${TARGET_BIN_PATH}/$(TARGET_NAME_LIB)
107 #TARGET_OBJ:=$(addprefix $(TARGET_OBJ_PATH)/,$(notdir $(OBJ_FILES)))
108
109 #Selection de la target en fonction TARGET_MODE
110 ifeq ($(TARGET_MODE),EXE)
111 TARGET:=${TARGET_EXE}
112 TARGET_DEPLOY:=$(TARGET_DEPLOY_PATH_BIN)/$(TARGET_NAME_EXE)
113 endif
114
115 ifeq ($(TARGET_MODE),SHARED_LIB)
116 TARGET:=${TARGET_DLL}
117 TARGET_DEPLOY:=$(TARGET_DEPLOY_PATH_BIN)/$(TARGET_NAME_DLL)
118
119 override NVCCLDFLAGS += $(LINK_FLAG_DLL)
120
121 #Attention ARM : doit venir juste après le -Xcompiler!
122 override CXXFLAGS := -fPIC -fvisibility=hidden ${CXXFLAGS}
123
124
125 endif
126
127 ifeq ($(TARGET_MODE),STATIC_LIB)
128 TARGET:=${TARGET_LIB}
129 TARGET_DEPLOY:=$(TARGET_DEPLOY_PATH_BIN)/$(TARGET_NAME_LIB)
130 endif
131
132 #old
133
134 #ifeq ($(TARGET_MODE),SHARED_LIB)
135 # override NVCCLDFLAGS+= $(LINK_FLAG_DLL)
136 # override CXXFLAGS += -fPIC -fvisibility=hidden
137 # TARGET_NAME_FULL=lib$(TARGET_NAME).so
138 #endif
139 #
140 #ifeq ($(TARGET_MODE),EXE)
141 # TARGET_NAME_FULL=$(TARGET_NAME).run
142 #endif
143
144 #TARGET:=$(TARGET_BIN)/$(TARGET_NAME_FULL)
145 #TARGET_DEPLOY:=$(TARGET_DEPLOY_PATH_BIN)/$(TARGET_NAME_FULL)
146
147 ##########
148 #ARCHIVEUR#
149 ###########
150
151 ifneq ($(ARCH),arm)
152 AR:=ar
153 else
154 AR:=arARM
155 endif
156
157 ARFLAGS=# pas= car valeur vaut rv avant sous windows ???
158 AR_OUT_FLAG:=-r #with espace important !
159
160 ############
161 # Params #
162 ############
163
164 #ameliorer deja avant mais sans .
165 EXTENSION_LIB:=.a
166 EXTENSION_DLL:=.so
167 #LIB_PREFIX:=#pas de prefixe
168
169 ############
170 #Set files #
171 ############
172
173 SRC_PATH:=$(shell find $(SRC_ROOT) -type d)
174
175 ifdef SRC_AUX
176 SRC_PATH_AUX:=$(shell find $(SRC_AUX) -type d)
177 else
178 SRC_PATH_AUX:=
179 endif
180
181 SRC_PATH_ALL:=$(SRC_PATH) $(SRC_PATH_AUX)
182 SRC_SO_FILES:=$(foreach dir,$(SRC_PATH_ALL),$(wildcard $(dir)/*.so))
183
184 # Libraries au format standard
185 #
186 # Input :
187 # SRC_PATH_ALL
188 # Output :
189 # All files
190 # libXXX.a
191 # libXXX.so
192 # XXX.so
193 # Excepted
194 # XXX.a
195 # Goals :
196 # Les .a prefixe par lib (example libXXX.a) seront donnee a GCC sous la forme -lXXX)
197 # Alors que les YYY.a devront etre donner a GCC sous la forme YYY.a
198 # Convention
199 # Sous linux les .a standards sont libXXX.a
200 # Les YYY.a sont non standards.
201 #
202 SRC_A_FILES_STANDART:=$(foreach dir,$(SRC_PATH_ALL),$(wildcard $(dir)/$(LIB_PREFIXE)*$(EXTENSION_LIB)))
203 SRC_A_FILES_STANDART+=$(SRC_SO_FILES)
204
205 # Libraries au format non standard
206 #
207 # Input :
208 # SRC_PATH_ALL
209 # Output :
210 # All files XXX.a (without libXXX.a)
211 # Objectifs :
212 # Les .a prefixer par lib (libXXX.a) seront donnee a GCC sous la forme -lXXX
213 # Alors que les YYY.a devront etre donner a GCC sous la forme YYY.a avec la path complet (par exemple ../libs/YYY.a)
214 #
215 SRC_A_FILES_NOT_STANDARD:=$(foreach dir,$(SRC_PATH_ALL),$(filter-out $(dir)/$(LIB_PREFIXE)%$(EXTENSION_LIB),$(wildcard $(dir)/*$(EXTENSION_LIB))))
216
217 SRC_CPP_FILES := $(foreach dir,$(SRC_PATH_ALL),$(wildcard $(dir)/*.cpp))
218 SRC_C_FILES := $(foreach dir,$(SRC_PATH_ALL),$(wildcard $(dir)/*.c))
219 SRC_CU_FILES := $(foreach dir,$(SRC_PATH_ALL),$(wildcard $(dir)/*.cu))
220
221 OBJ_FILES_CPP:= $(SRC_CPP_FILES:.cpp=.$(OBJ_EXTENSION))
222 OBJ_FILES_C:= $(SRC_C_FILES:.c=.$(OBJ_EXTENSION))
223 OBJ_FILES:= ${OBJ_FILES_CPP} ${OBJ_FILES_C}
224 OBJ_FILES:= $(addprefix $(TARGET_OBJ)/,$(notdir $(OBJ_FILES)))
225
226 CU_FILES := $(SRC_CU_FILES:.cu=.$(OBJ_EXTENSION))
227 CU_FILES := $(addprefix $(TARGET_OBJ)/,$(notdir $(CU_FILES)))
228
229 OBJ_CU_FILES:=$(OBJ_FILES) $(CU_FILES)
230
231 #################
232 # PREPARE FLAGS #
233 #################
234
235 #only fileName (./libs/libXXX.a ./libs/YYY.so -> lixXXX.a YYY.so)
236 LIB_FLAG:=$(notdir $(SRC_A_FILES_STANDART))
237
238 #removing prefix lib (libXXX.a libYYY.a libZZZ.so -> XXX.a YYY.a ZZZ.so)
239 LIB_FLAG:=$(subst $(LIB_PREFIXE),,$(LIB_FLAG))#remplace lib par rien
240
241 #Delete extension .a (XXX YYY)
242 LIB_FLAG:=$(LIB_FLAG:$(EXTENSION_LIB)=)
243
244 #Delete extension .so (AAA.so BBB.so -> AAA BBB)
245 LIB_FLAG:=$(LIB_FLAG:$(EXTENSION_DLL)=)
246
247 #ADDING user specified lib (GL GLUT gomp ...)
248 LIB_FLAG+=$(ADD_LIBRARY_FILES)
249
250 # Input :
251 # list lib to delete example (AAA ZZZ)
252 #
253 # before : LIB_FLAG (XXX YYY ZZZ)
254 # after : LIB_FLAG (XXX YYY) without ZZZ
255 LIB_FLAG:=$(filter-out $(EXCLUDE_LIBRARY_FILES),$(LIB_FLAG))
256
257 #Adding Lib FLAG separator (XXX YYY -> -lXXX -lYYY)
258 LIB_FLAG:=$(addprefix $(OPTION_SEPARATOR)$(LIB_FLAG_SEPARATOR),$(LIB_FLAG))
259 LIB_FLAG+=$(CUDA_LIB_FILES_l) $(CULA_LIB_FILES_l)
260
261 #Adding Lib path FLAG separator -L (../AAA ./BBB -> -L../AAA _L./BBB)
262 LIB_PATH:=$(foreach dir,$(SRC_PATH_ALL),$(dir $(wildcard $(dir)/*.so)))#dir extract directory of file, $(wildcard $(dir)/*.h)=> take file.h if exist
263 override LIB_PATH:=$(call uniq,${LIB_PATH})
264 #LIB_PATH_FLAG+=$(CUDA_LIB_L) $(CULA_LIB_L)#old
265 #LIB_PATH_FLAG:=$(addprefix $(OPTION_SEPARATOR)$(LIB_PATH_SEPARATOR),$(SRC_PATH_ALL))#old
266 LIB_PATH_FLAG:=$(addprefix $(OPTION_SEPARATOR)$(LIB_PATH_SEPARATOR),$(LIB_PATH))
267
268 #Adding Include FLAG separator
269 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
270 override INC_PATH:=$(call uniq,${INC_PATH})
271 #${info "INC_PATH= "${INC_PATH}}#print immediately
272 #SRC_HEADER_I := $(addprefix $(OPTION_SEPARATOR)I,$(SRC_PATH_ALL))#old
273 SRC_HEADER_I := $(addprefix $(OPTION_SEPARATOR)I,$(INC_PATH))
274 #ALL_HEADERS_I:= $(SRC_HEADER_I)#old
275
276
277 #Injection variable in .cpp code (VAR1 VAR2 -> -DVAR1 -DVAR2)
278 CODE_DEFINE_VARIABLES_D:= $(addprefix -D,$(CODE_DEFINE_VARIABLES))
279
280 #override NVCCFLAGS += $(ALL_HEADERS_I)#old
281 override NVCCFLAGS += $(SRC_HEADER_I)
282 override NVCCLDFLAGS += $(LIB_PATH_FLAG) $(LIB_FLAG) $(SRC_A_FILES_NOT_STANDARD)
283 override CXXFLAGS += $(CODE_DEFINE_VARIABLES_D)
284
285 ##########
286 # securite #
287 ##########
288
289 #Directory search path (use implicit in rules)
290 VPATH := $(SRC_PATH_ALL)
291
292 ##########
293 # runtime #
294 ##########
295
296 space:= #ne suufit pas ajoutre espaca, mais += le fait!
297 space+=#
298
299 ifeq (${OS},Win)
300 separateurPath:=;#
301 else
302 separateurPath:=:#
303 endif
304
305 API_BIN_FORMATTER:=$(subst ${space},${separateurPath},${API_BIN})
306
307 ifeq (${OS},Win)
308 override PATH:=${PATH}${separateurPath}${API_BIN_FORMATTER}
309 export ${PATH}
310 else
311 override LD_LIBRARY_PATH:=${LD_LIBRARY_PATH}${separateurPath}${API_BIN_FORMATTER}
312 export ${LD_LIBRARY_PATH}#fixme semble pas marcher
313 endif
314
315 ########
316 #Optimisation #
317 ########
318
319 include ${ROOT_MAKEFILE_PRIVATE_CUDA}/optimisation.mk
320
321 ########
322 #arm #
323 ########
324
325 include ${ROOT_MAKEFILE_PRIVATE_CUDA}/cudaGCC_arm.mk
326
327 ##########
328 # exclude #
329 ##########
330
331 override CXXFLAGS:=$(filter-out $(CXXFLAGS_EXCLUDE),$(CXXFLAGS))
332 override NVCCFLAGS:=$(filter-out $(NVCCFLAGS_EXCLUDE),$(NVCCFLAGS))
333
334 #https://www.gnu.org/software/make/manual/make.html#Functions
335
336
337 ##########
338 # unicitye #
339 ##########
340
341 UNICITY=true
342
343 ifdef UNICITY
344
345 override CXXFLAGS:=$(call uniq,${CXXFLAGS})
346 override CXXLDFLAGS:=$(call uniq,${CXXLDFLAGS})
347 #override NVCCFLAGS:=$(call uniq,${NVCCFLAGS}) pas possible car enleve -gencode
348 override NVCCLDFLAGS:=$(call uniq,${NVCCLDFLAGS})
349 override ARFLAGS:=$(call uniq,${ARFLAGS})
350 #override AR_OUT_FLAG:=$(call uniq,${AR_OUT_FLAG})
351
352 #debug
353 #${info "CXXFLAGS= "${CXXFLAGS}}#print immediately
354 #${info "CXXLDFLAGS"= ${CXXLDFLAGS}}#print immediatel
355 #${info "NVCCLDFLAGS= "${NVCCLDFLAGS}}#print immediatel
356 #${info "NVCCFLAGS= "${NVCCFLAGS}}#print immediatel
357 #${info "ARFLAGS= "${ARFLAGS}}#print immediatel
358 #${info "AR_OUT_FLAG= "${AR_OUT_FLAG}}#print immediatel
359
360 endif#UNICITY
361
362 ##########
363 # remove space #
364 ##########
365
366 #let a minimum of one space
367 REMOVE_SPACE=true
368
369 ifdef REMOVE_SPACE
370
371 override CXXFLAGS:=$(strip ${CXXFLAGS})
372 override CXXLDFLAGS:=$(strip ${CXXLDFLAGS})
373 override NVCCLDFLAGS:=$(strip ${NVCCLDFLAGS})
374 override NVCCFLAGS:=$(strip ${NVCCFLAGS})
375 override ARFLAGS:=$(strip ${ARFLAGS})
376 #override AR_OUT_FLAG:=$(strip ${AR_OUT_FLAG})#pas pour gcc (enleve espace apres -r)
377
378 #override CXXFLAGS:=$(subst $(space),,$(CXXFLAGS))
379
380 endif#REMOVE_SPACE
381
382
383 ##########
384 # bug #
385 ##########
386
387 #Adding " " around CXXFLAGS and CXXLDFLAGS, otherwise we can't specifie more than one options !
388 override CXXFLAGS:=" $(CXXFLAGS) "
389 override CXXLDFLAGS:=" $(CXXLDFLAGS) "
390
391 ###########
392 #chrono#
393 ###########
394
395 override TIME_START:=$(shell date +%T)
396 TIME_CURRENT=$(shell date +%T)
397 #TIME_DELTA:=$(shell echo $(TIME_CURRENT) - $(TIME_START) | bc) #marche pas sous win, a tester sous linux
398
399 ##############################################
400 # Rules #
401 ##############################################
402
403 TITLE:=$(TARGET_NAME)
404
405 ################
406 #.o->.run #
407 ################
408
409 $(TARGET) : $(OBJ_CU_FILES)
410 #@echo "$(NVCC) $(NVCCLDFLAGS) -Xlinker $(CXXLDFLAGS) $^ -o $(TARGET)"
411 @echo ""
412 @echo "[CBI] -> Linking to : "$(TARGET)
413 @echo ""
414 @echo "[CBI] -> Library Link :"
415 @echo "[CBI] ->"
416 @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(call containing,-l,$(NVCCLDFLAGS)))
417 @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(call containing,-l,$(CXXLDFLAGS)))
418 @echo ""
419 @$(NVCC) $(NVCCLDFLAGS) -Xlinker $(CXXLDFLAGS) $^ -o $(TARGET)
420 @echo ""
421 @echo "=================================================================================="
422 @echo "[CBI] -> Target Name : "$(TARGET_NAME)
423 @echo "[CBI] -> Location : "$(TARGET)
424 @echo "[CBI] -> Deploy : "$(TARGET_DEPLOY_PATH_BIN)
425 @echo "[CBI] ->"
426 @echo "[CBI] -> Type : "$(TARGET_MODE)
427 @echo "[CBI] -> Arch : "$(ARCHI_32_64)
428 @echo "[CBI] -> OS : "$(OS)
429 @echo "[CBI] -> User : "$(USER)
430 @echo "[CBI] ->"
431 @echo "[CBI] -> Compilateur : ${CXX}) && ${NVCC}"
432 @echo "[CBI] -> Task : End Compiling-Linking !"
433 @echo "[CBI] -> Time : "${TIME_CURRENT}
434 @echo "=================================================================================="
435 @echo ""
436
437 # -o =outfile
438 # tabulation obligatoire before @
439
440 ################
441 # .o->.lib #
442 ################
443
444 ${TARGET_LIB}:$(OBJ_CU_FILES)
445 @${AR} ${AR_OUT_FLAG}${TARGET_LIB} ${ARFLAGS} $^
446 @echo ""
447 @echo "=================================================================================="
448 @echo "[CBI] -> Target Name : "$(TARGET_NAME)
449 @echo "[CBI] -> Location : "$(TARGET)
450 @echo "[CBI] -> Deploy : "$(TARGET_DEPLOY_PATH_BIN)
451 @echo "[CBI] ->"
452 @echo "[CBI] -> Type : "$(TARGET_MODE)
453 @echo "[CBI] -> Arch : "$(ARCHI_32_64)
454 @echo "[CBI] -> OS : "$(OS)
455 @echo "[CBI] -> User : "$(USER)
456 @echo "[CBI] ->"
457 @echo "[CBI] -> Compilateur : ${CXX}) && ${NVCC}"
458 @echo "[CBI] -> Task : End Compiling-Archive !"
459 @echo "[CBI] -> Time : "${TIME_CURRENT}
460 @echo "=================================================================================="
461 @echo ""
462
463 ################
464 # .cpp->.o #
465 ################
466
467 $(TARGET_OBJ)/%.$(OBJ_EXTENSION) :%.cpp
468 #@echo "$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler $(CXXFLAGS) -c $< -o $@"
469 ifdef ARM
470 @echo "[${TITLE}] -> g++ARM compiling .cpp : "$<
471 else
472 @echo "[${TITLE}] -> ${CXX} compiling .cpp : "$<
473 endif
474 @$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler $(CXXFLAGS) -o $@ -c $<
475
476 # -c = compilation
477 # -o =outfile
478
479 ################
480 # .c->.o #
481 ################
482
483 $(TARGET_OBJ)/%.$(OBJ_EXTENSION) :%.c
484 #@echo "$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler $(CXXFLAGS) -c $< -o $@"
485 ifdef ARM
486 @echo "[${TITLE}] -> g++ARM compiling .cpp : "$<
487 else
488 @echo "[${TITLE}] -> ${CXX} compiling .cpp : "$<
489 endif
490 @$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler $(CXXFLAGS) -o $@ -c $<
491
492 # -c = compilation
493 # -o =outfile
494
495 ################
496 # .cu->.o #
497 ################
498
499 $(TARGET_OBJ)/%.$(OBJ_EXTENSION) :%.cu
500 #@echo "@$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler ""$(filter-out -std=c++0x,$(CXXFLAGS))"" -c $< -o $@"
501 @echo "[${TITLE}] -> ${NVCC} compiling .cu : "$<
502 @$(NVCC) $(NVCCFLAGS) -odir $(TARGET_OBJ) -Xcompiler ""$(filter-out -std=c++0x,$(CXXFLAGS))"" -c $< -o $@
503 #cuda6: Il ne faut pas utiliser le flag �std=c++0x lorsque l�on compile un fichier .cu !
504 #cuda6.5: devrait etre ok
505 ##Adding "" "" around final CXXFLAGS, to keep one " " around final CXXFLAGS , in order to can specifie more than one options !
506
507 # -c = compilation
508 # -o =outfile
509
510 ##############################################
511 # TARGET #
512 ##############################################
513
514 #all: version help
515 #all: echoing $(TARGET) deploy
516 all: echoing init $(TARGET) deploy cleanTempCudaFile
517 @echo ""
518 @echo "[CBI] -> "$(TITLE)" : End ALL!"
519
520 .PHONY: version
521 version:
522 @echo ""
523 @nvcc --version
524 @echo ""
525 @gcc --version
526 @echo ""
527 @g++ --version
528 @echo ""
529 @make --version
530 @echo ""
531 @bash --version
532 @echo ""
533
534 .PHONY: help
535 help:
536 @echo ""
537 @nvcc --help
538
539 ##########
540 # deploy #
541 ##########
542
543 .PHONY: deploy
544 deploy:
545 ifdef TARGET_DEPLOY_PATH
546 @$(shell cp $(TARGET) $(TARGET_DEPLOY))
547 @echo ""
548 @echo "[CBI] -> Deploying : "$(TARGET_DEPLOY)
549 endif
550
551 ##########
552 # run #
553 ##########
554
555 .PHONY: run
556 run: printRuntimeInfo
557 @echo ""
558 @echo "[CBI] -> Running : "$(TARGET) $(ARGS)
559 @echo ""
560 @echo "------------------------------------------------------------------------"
561 @echo ""
562 @echo ""
563 @$(TARGET) $(ARGS)
564
565 .PHONY: runDeploy
566 runDeploy: printRuntimeInfo
567 @echo ""
568 @echo "[CBI] -> Running : "$(TARGET_DEPLOY) $(ARGS)
569 @echo ""
570 @echo "------------------------------------------------------------------------"
571 @echo ""
572 @echo ""
573 @$(TARGET_DEPLOY) $(ARGS)
574
575 .PHONY: runGl
576 runGl: printRuntimeInfo
577 #gl is a wrapper of virtualgl
578 #gl is necessary to run opengl remotely with turbovnc
579 #OS : linux only
580 @echo ""
581 @echo "[CBI] -> Running remote-gl : "$(TARGET) $(ARGS)
582 @gl $(TARGET) $(ARGS)
583
584 .PHONY: runGlDeploy
585 runGlDeploy: printRuntimeInfo
586 #gl is a wrapper of virtualgl
587 #gl is necessary to run opengl remotely with turbovnc
588 #OS : linux only!
589 @echo ""
590 @echo "[CBI] -> Running remote-gl : "$(TARGET_DEPLOY) $(ARGS)
591 @gl $(TARGET_DEPLOY) $(ARGS)
592
593
594 .PHONY: printRuntimeInfo
595 printRuntimeInfo:
596 @echo "[CBI] -> API BIN :"
597 @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh ${sort ${API_BIN}}
598 @echo ""
599 @echo "[CBI] -> ARGS :"
600 @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh ${sort ${ARGS}}
601
602 ##########
603 # depends #
604 ##########
605
606 .PHONY: dependenciesLinux
607 dependenciesLinux: printRuntimeInfo
608 @echo ""
609 @echo "[${TARGET}] depends from :"
610 @echo ""
611 @ldd -v ${TARGET_DEPLOY}
612
613 ##########
614 # contents #
615 ##########
616
617 .PHONY: contentsLinux
618 contentsLinux:
619 @echo ""
620 ifeq (${TARGET_MODE},STATIC_LIB)
621 @echo "[${TARGET_NAME}.${EXTENSION_LIB}] export :"
622 @echo ""
623 @ar -t ${TARGET_DEPLOY}
624 else ifeq (${TARGET_MODE},SHARED_LIB)
625 @echo "[${TARGET_NAME}.${EXTENSION_DLL}] export:"
626 @echo ""
627 @echo "[CBI] -> nm"
628 @echo ""
629 @nm -D --defined-only --extern--only ${TARGET_DEPLOY}
630 @echo ""
631 @echo "[CBI] -> readelf"
632 @echo ""
633 @readelf -s ${TARGET_DEPLOY}
634 endif
635 @echo ""
636
637 ##########
638 # init #
639 ##########
640
641 .PHONY: init
642 init:
643 #create folder heirerarchy TARGET_BIN_PATH iff don't exist
644 ifeq (,$(findstring $(TARGET_BIN),$(wildcard $(TARGET_BIN) )))
645 @$(shell mkdir -p $(TARGET_BIN))
646 @echo "[CBI] -> Create folder : "$(TARGET_BIN)
647 endif
648 #create folder heirerarchy TARGET_BIN_PATH iff don't exist
649 ifeq (,$(findstring $(TARGET_OBJ),$(wildcard $(TARGET_OBJ) )))
650 @$(shell mkdir -p $(TARGET_OBJ))
651 @echo "[CBI] -> Create folder : "$(TARGET_OBJ)
652 endif
653 #create folder heirerarchy TARGET_BIN_PATH iff don't exist
654 ifeq (,$(findstring $(TARGET_CUBIN),$(wildcard $(TARGET_CUBIN) )))
655 @$(shell mkdir -p $(TARGET_CUBIN))
656 @echo "[CBI] -> Create folder : "$(TARGET_CUBIN)
657 endif
658 ifeq (,$(findstring $(TARGET_DEPLOY_PATH_BIN),$(wildcard $(TARGET_DEPLOY_PATH_BIN) )))
659 @$(shell mkdir -p $(TARGET_DEPLOY_PATH_BIN))
660 @echo "[CBI] -> Create folder : "$(TARGET_DEPLOY_PATH_BIN)
661 @echo ""
662 endif
663 @echo ""
664
665 ##########
666 # doc #
667 ##########
668
669 include ${ROOT_MAKEFILE_PRIVATE_DOC}/doxyCPP.mk
670
671 ##########
672 # clean #
673 ##########
674
675 .PHONY: clean
676 clean:
677 @rm -f $(TARGET_OBJ)/*.o
678 @rm -f $(TARGET_OBJ)/*.obj
679 @rm -f $(TARGET_BIN)/*.exp
680 @rm -f $(TARGET_BIN)/*.lib
681 @rm -f $(TARGET)
682 @rm -f $(TARGET_DEPLOY)
683 @rm -f $(TARGET_CUBIN)/*
684 @rm -f $(TARGET_DOC_DEPLOY_FILE)
685 @rm -f -r $(TARGET_DOC_PATH)
686 @echo ""
687 @echo "=================================================================================="
688 @echo "[CBI] -> Target : "$(TARGET_NAME)
689 @echo "[CBI] -> Task : DELETE"
690 @echo "[CBI]"
691 @echo "[CBI] -> Delete .obj : "$(TARGET_OBJ)
692 @echo "[CBI] -> Delete .bin : "$(TARGET_BIN)
693 @echo "[CBI] -> Delete .cubin : "$(TARGET_CUBIN)
694 @echo "[CBI] -> Delete doc : "$(TARGET_DOC_PATH)
695 @echo "[CBI]"
696 @echo "[CBI] -> Delete deploy : "$(TARGET_DEPLOY)
697 @echo "[CBI] -> Delete deploy doc : "$(TARGET_DOC_DEPLOY_FILE)
698 @echo "=================================================================================="
699 @echo ""
700
701 .PHONY: cleanTempCudaFile
702 cleanTempCudaFile:
703 @rm -f ${TARGET_CUBIN}/*.c
704 @rm -f ${TARGET_CUBIN}/*.cpp
705 @rm -f ${TARGET_CUBIN}/*.gpu
706 @rm -f ${TARGET_CUBIN}/*.i
707 @rm -f ${TARGET_CUBIN}/*.ii
708 @rm -f ${TARGET_CUBIN}/*.hash
709 @rm -f ${TARGET_CUBIN}/*.ptx
710 #@echo "[CBI] -> Cleaning : Cuda temp files, excepted .cubin for JCuda"
711 #@echo ""
712
713 #rm -r #serait recursif (dangereux!!)
714 #rm -f #pas d'erreur si file existe pas!
715
716 ##########
717 # echo #
718 ##########
719
720 .PHONY: echoing
721 echoing:
722 @echo ""
723 @echo "=================================================================================="
724 @echo "[CBI] -> Target Name : "$(TARGET_NAME)
725 @echo "[CBI] ->"
726 @echo "[CBI] -> Build : "$(TARGET)
727 @echo "[CBI] -> Deploy : "$(TARGET_DEPLOY_PATH_BIN)
728 @echo "[CBI] ->"
729 @echo "[CBI] -> Type : "$(TARGET_MODE)
730 @echo "[CBI] -> Arch : "$(ARCHI_32_64)
731 @echo "[CBI] -> OS : "$(OS)
732 @echo "[CBI] -> User : "$(USER)
733 @echo "[CBI] ->"
734 @echo "[CBI] -> Task : Compiling-Linking !"
735 #@echo "[CBI]->Time : "${TIME_CURRENT}
736 @echo "=================================================================================="
737 @echo ""
738 @echo "[CBI] -> SRC AUX (Recursif) :"
739 @echo "[CBI] ->"
740 #@echo $(SRC_AUX)
741 @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(SRC_AUX)
742 @echo ""
743 @echo "[CBI] -> CXXFLAGS (Partial) :"
744 @echo "[CBI] ->"
745 #@echo $(CXXFLAGS)
746 @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(call not-containing,-I,$(CXXFLAGS)) #sort ko why
747 @echo ""
748 @echo "[CBI] -> CXXLDFLAGS (Partial) :"
749 @echo "[CBI] ->"
750 #@echo $(CXXLDFLAGS)
751 @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(call not-containing,-L, $(call not-containing,-l,$(CXXLDFLAGS))) #sort ko, why?
752 @echo ""
753 @echo "[CBI] -> NVCCFLAGS (Partial) :"
754 @echo "[CBI] ->"
755 #@echo $(NVCCFLAGS)
756 @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(call not-containing,-I,$(NVCCFLAGS)))
757 @echo ""
758 @echo "[CBI] -> NVCCLDFLAGS (Partial) :"
759 @echo "[CBI] ->"
760 #@echo $(NVCCLDFLAGS)
761 @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(call not-containing,-L, $(call not-containing,-l,$(NVCCLDFLAGS))))
762 @echo ""
763 @echo "[CBI] -> INC_PATH (auto detect):"
764 @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(INC_PATH))
765 @echo ""
766 @echo ""
767 @echo "[CBI] -> LIB_PATH (auto detect):"
768 @${ROOT_MAKEFILE_PRIVATE_COMMON_SCRIPT}/print.sh $(sort $(LIB_PATH))
769 @echo ""
770
771 ##############################################
772 # HELP #
773 ##############################################
774
775 # target : dependencies
776 #
777 # $@ = name of the target
778 # $^ = all dependencie of a target
779 # $< =first (unique dependency of a target) (rm, compilation,linking)
780 #
781 # @ = diminue verbosit� commande
782 #
783 # Attention : tabulation obligatoire avant commande dans rule!!
784 #
785 # http://www.gnu.org/software/make/manual/
786
787 #############################################
788 # END #
789 #############################################
790
791
792 endif#__MAKE_CUDA_GCC_MK__
793
794
795