Makefile.common.in 17.7 KB
Newer Older
1
2
3
4
# This is a part of PolyORB-HI-C distribution, a minimal
# middleware written for generated code from AADL models.
# You should use it with the Ocarina toolsuite.

5
CYGPATH_U = @CYGPATH_U@
6
CYGPATH_W = @CYGPATH_U@
7

yoogx's avatar
yoogx committed
8
GCC_GENERIC_CFLAGS= -g -Wall -Wextra -fdiagnostics-show-option -Wcast-align -Wjump-misses-init -Wswitch-enum
9
10

all: build-node
11

12
LOCAL_RUNTIME_PATH=$(shell pwd)/../polyorb-hi-c
13

14
15
16
17
18
19
20
# Test whether we are simply including this makefile, e.g. to get some
# configuration parameters, or used as part of the general build from
# an Ocarina generated makefile

ifneq ($strip ($(wildcard $(LOCAL_RUNTIME_PATH)/config)),)
include $(RUNTIME_PATH)/make/Makefile.$(TARGET)
else
21
include $(LOCAL_RUNTIME_PATH)/make/Makefile.$(TARGET)
22
23
24
endif

# Include user-defined makefile
25
26
-include ../../userdefined.mk

yoogx's avatar
yoogx committed
27
28
29
30
ifneq ($(USE_CPP_LINKER),)
LD=$(LD_CPP)
endif

yoogx's avatar
yoogx committed
31
build-node: compile-node
yoogx's avatar
yoogx committed
32

33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
################################################################################
# Configuration
#
# In userdefined.mk, we defined the following variables
# - USER_CFLAGS   : Additional flags to compile .c files
# - USER_CPPFLAGS : Additional flags to compile .cpp files
# - USER_CC       : User overrides CC compiler
# - USER_CPP      : User ovverides CPP compiler

ifneq ($(USER_CC),)
CC=$(USER_CC)
endif

ifneq ($(USER_CPP),)
CPP=$(USER_CPP)
endif

ifneq ($(USER_LD),)
LD=$(USER_LD)
endif

54
CFLAGS=$(POHI_CFLAGS) $(USER_CFLAGS) $(GCC_GENERIC_CFLAGS)
55
CPPFLAGS=$(CFLAGS) $(USER_CPPFLAGS)
yoogx's avatar
yoogx committed
56
LDFLAGS=$(TARGET_LDFLAGS) $(USER_LDFLAGS)
57

58
59
60
ifdef USE_GPROF
CFLAGS+=-D__PO_HI_USE_GPROF -pg
endif
61
62
63
64
65

ifeq ($(ENABLE_DYNAMIC_CONFIGURATION),1)
CFLAGS+=-D__PO_HI_USE_DYNAMIC_CONFIGURATION
endif

66
67
68
69
ifeq ($(NEED_TRANSPORT),yes)
CFLAGS+=-D__PO_HI_USE_TRANSPORT
endif

70
INCLUDE=-I. -I"${shell $(CYGPATH_W) "${LOCAL_RUNTIME_PATH}/include"}"
yoogx's avatar
yoogx committed
71

72
ifdef TARGET_INCLUDE
yoogx's avatar
yoogx committed
73
INCLUDE += $(TARGET_INCLUDE)
74
75
endif

76
ifdef USER_SOURCES_DIRS
yoogx's avatar
yoogx committed
77
INCLUDE+=$(USER_SOURCES_DIRS)
78
79
endif

80
81
INCLUDE+=$(USER_INCLUDE)

82
83
84
85
86
87
ifndef $(TARGET_NAME)
TARGET_NAME=$(TARGET)
endif

INCLUDE+=-DTARGET=$(TARGET_NAME)

88
89
90
91
################################################################################
# Files to be compiled

ifeq ($(NEED_TRANSPORT), yes)
92
93
94
   PO_HI_OBJS = po_hi_task.o po_hi_time.o po_hi_protected.o		\
	po_hi_main.o po_hi_messages.o po_hi_marshallers.o		\
	po_hi_giop.o po_hi_utils.o po_hi_types.o po_hi_monitor.o	\
95
96
97
98
99
100
101
102
103
104
105
	po_hi_semaphore.o po_hi_storage.o po_hi_gqueue.o		\
	po_hi_driver_exarm.o po_hi_driver_keyboard.o			\
	po_hi_driver_exarm_ni_6071e_analog.o				\
	po_hi_driver_exarm_ni_6071e_digital.o				\
	po_hi_driver_usbbrick_spacewire.o po_hi_driver_linux_serial.o	\
	po_hi_driver_leon_serial.o po_hi_driver_leon_eth.o		\
	po_hi_driver_serial_common.o po_hi_driver_sockets.o		\
	po_hi_driver_rtems_ne2000.o po_hi_driver_rasta_serial.o		\
	po_hi_driver_rasta_common.o po_hi_driver_rasta_1553.o		\
	po_hi_driver_xc4v_fpga.o po_hi_driver_rasta_1553_brmlib.o	\
	po_hi_driver_rasta_spacewire.o $(ACTUAL_TRANSPORT)		\
106
107
	po_hi_transport.o $(TARGET_TRANSPORT_SOURCES)

108
109
   GENERATED_OBJS = activity.o subprograms.o types.o request.o	\
	marshallers.o deployment.o naming.o main.o
110
else
111
112
   PO_HI_OBJS = po_hi_task.o po_hi_time.o po_hi_utils.o		\
	po_hi_protected.o po_hi_monitor.o po_hi_storage.o	\
113
	po_hi_main.o
julien.delange's avatar
julien.delange committed
114

115
   GENERATED_OBJS = activity.o subprograms.o deployment.o types.o	\
116
117
118
	main.o
endif

jdelange's avatar
jdelange committed
119
120

ifeq ($(TARGET), $(filter $(TARGET), linux32 linux64 linux32-xenomai-posix linux32-xenomai-native))
121
PO_HI_OBJS += po_hi_lua.o
jdelange's avatar
jdelange committed
122
123
endif

jdelange's avatar
jdelange committed
124
ifeq ($(USE_ASN1_DEPLOYMENT), yes)
125
generate-asn1-deployment:
jdelange's avatar
jdelange committed
126
	if [ ! -d ../asn-types ]; then mkdir -p ../asn-types ; fi
yoogx's avatar
yoogx committed
127
	mono $(which asn1.exe) -c -uPER $(ASN_SOURCES) -o ../asn-types
jdelange's avatar
jdelange committed
128
	for f in real.o asn1crt.o acn.o ber.o xer.o; do \
129
	   c_file="`basename $$f .o`.c"; \
jdelange's avatar
jdelange committed
130
131
132
133
134
135
	      $(CC) $(INCLUDE) $(CFLAGS) -c -o $$f ../asn-types/$$c_file || exit 1 ; \
	done
	for f in $(ASN_SOURCES); do \
	   c_file="`basename $$f .asn`.c"; \
	   o_file="`basename $$f .asn`.o"; \
      if [ -f ../asn-types/$$c_file ]; then $(CC) $(INCLUDE) $(CFLAGS) -c -o $$o_file ../asn-types/$$c_file || exit 1 ; fi \
136
	done
137

jdelange's avatar
jdelange committed
138
GENERATED_OBJS += real.o asn1crt.o xer.o ber.o acn.o $(ASN_OBJS)
139
LDFLAGS += -lm
140
CFLAGS+=-DPO_HI_USE_ASN1 -I../../ -I../asn-types/
141

142
143
144
145
146
else
generate-asn1-deployment:

endif

147
148
149
150
151
152
153
154
155
################################################################################
# Simulink

ifdef SIMULINK_NODE
   PO_HI_OBJS += po_hi_simulink.o
endif

ifdef SIMULINK_DIR
   INCLUDE += -I$(SIMULINK_DIR) \
156
157
158
159
160
	      -I$(SIMULINK_DIRECTORY)/simulink/include \
	      -I$(SIMULINK_DIRECTORY)/extern/include \
	      -I$(SIMULINK_DIRECTORY)/rtw/c/src \
	      -I$(SIMULINK_DIRECTORY)/rtw/c/src/ext_mode/common \
	      -I$(SIMULINK_DIRECTORY)/rtw/c/libsrc
161
162
163
164
165
166
167
168
   CFLAGS += -DRT -DUSE_RTMODEL -DMODEL=$(SIMULINK_NODE) -DRT -DNUMST=2 -DTID01EQ=1 -DNCSTATES=0 -DUNIX -DMT=0 -DHAVESTDIO
   LDFLAGS += $(SIMULINK_LDFLAGS)
endif

################################################################################
# SCADE

ifdef SCADE_DIR
169
170
INCLUDE += -I$(SCADE_DIR)
USER_OBJS += $(SCADE_DIR)/*.o
171
172
endif

julien.delange's avatar
julien.delange committed
173
174
175
176
177
178
179
180
################################################################################
# General LINUXTASTE stuff
check-linuxtaste:
	if [ ! -d $$LINUXTASTE_PATH/output/staging ]; then \
		echo "Please define the LINUXTASTE_PATH variable" ; \
      echo "It should point to the directory where the distro was built" && exit 2 ; \
	fi

181
182
183
################################################################################
# TASTE-RUNTIME-MONITORING

184
ifeq ($(MONITORING), true)
185

186
MONITORING_OBJS = trace_manager.o
yoogx's avatar
yoogx committed
187
188
PO_HI_OBJS += $(MONITORING_OBJS)
CFLAGS += -DMONITORING
189
190
191
192
193
INCLUDE += -I$(LOCAL_RUNTIME_PATH)/src \
-I$(LOCAL_RUNTIME_PATH)/src/monitoring \
-I$(LOCAL_RUNTIME_PATH)/include \
-I$(LOCAL_RUNTIME_PATH)/include/monitoring \
-I$(LOCAL_RUNTIME_PATH)/src/monitoring/cheddar_scheduling
194
195
196
197
198
199
200

endif

hyperperiod-cheddar:
	python get_cheddar_schedule.py
	python parser_cheddar_et.py

201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
################################################################################
# Code coverage + runtime-analysis

# gcov
ifeq ($(COVERAGE), gcov)
CFLAGS  += -fprofile-arcs -ftest-coverage -lgcov -coverage
LDFLAGS += -fprofile-arcs -ftest-coverage -lgcov -coverage
endif

# gnatcoverage
ifeq ($(COVERAGE), gnatcov)
CFLAGS  += -g -fpreserve-control-flow -fdump-scos -ffunction-sections -fdata-sections -Wl,--gc-sections
LDFLAGS += -g -fpreserve-control-flow -fdump-scos -ffunction-sections -fdata-sections -Wl,--gc-sections
endif

# valgrind
ifeq ($(VALGRIND_PROF), true)
CFLAGS  += -g
LDFLAGS += -g
endif

222
223
224
225
226
227
228
################################################################################
# General compilation rules

compile-po-hi:
ifdef SIMULINK_DIR
	(cd $(SIMULINK_DIR) && $(MAKE) -f $(SIMULINK_NODE).mk  && rm -f grt_main.o)
endif
229

230
231
232
ifdef SCADE_DIR
	(cd $(SCADE_DIR) && for v in `ls *.c`; do $(CC) -c $$v; done)
endif
233

234
235
	for f in $(PO_HI_OBJS); do \
	   c_file="`basename $$f .o`.c"; \
236
237
	   c_file_dirname="`dirname $$f`"; \
      if [ -n "$$c_file_dirname" ]; then \
238
	 if [ ! -d $$c_file_dirname ]; then mkdir -p $$c_file_dirname ; fi ; \
239
	      $(CC) $(INCLUDE) $(CFLAGS) -c -o $$f '$(LOCAL_RUNTIME_PATH)/src/'$$c_file_dirname'/'$$c_file  || exit 1 ; \
240
      else \
241
	      $(CC) $(INCLUDE) $(CFLAGS) -c -o $$f '$(LOCAL_RUNTIME_PATH)/src/'$$c_file || exit 1 ; \
242
      fi ; \
243
244
	done

245
246
247
248
	for f in $(PO_HI_CPPOBJS); do \
	   c_file="`basename $$f .o`.cc"; \
	   c_file_dirname="`dirname $$f`"; \
      if [ -n "$$c_file_dirname" ]; then \
249
	 if [ ! -d $$c_file_dirname ]; then mkdir -p $$c_file_dirname ; fi ; \
250
	      $(CXX) $(INCLUDE) $(CPPFLAGS) -c -o $$f '$(LOCAL_RUNTIME_PATH)/src/'$$c_file_dirname'/'$$c_file  || exit 1 ; \
251
      else \
252
	      $(CXX) $(INCLUDE) $(CPPFLAGS) -c -o $$f '$(LOCAL_RUNTIME_PATH)/src/'$$c_file || exit 1 ; \
253
254
255
      fi ; \
	done

256
compile-node: $(BINARY)
257

yoogx's avatar
yoogx committed
258
ifeq ($(TARGET), $(filter $(TARGET), leon3-scoc3 leon.rtems leon.rtems_posix air))
259
260
OBJS = $(USER_OBJS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(EXTERNAL_OBJECTS)
$(BINARY):
yoogx's avatar
yoogx committed
261
	if [  x"$$RTEMS_MAKEFILE_PATH" = x"" ]; then \
262
263
		echo "Please define the RTEMS_MAKEFILE_PATH variable, exiting" ; \
	else \
264
		$(MAKE) generate-asn1-deployment compile-c-files compile-cpp-files compile-ada-files target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS) $(BINARY).exe ;\
265
	fi
266
267
268
269

$(BINARY).exe:
	$(make-exe)

julien.delange's avatar
julien.delange committed
270
271
endif

272
### The following is to be revisited
273
ifeq ($(TARGET), leon3-xm3)
274
OBJS = $(USER_OBJS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(EXTERNAL_OBJECTS)
275
$(BINARY):
276
	@echo XtratuM target disabled
277
endif
278
279
280
281
282
283
#if [ x"$(shell which sparc-rtems-gcc)" = x ]; then \
#		echo "XtratuM not installed, exiting" ; \
#	else \
#		$(MAKE) generate-asn1-deployment target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS); \
#	fi

284
285


jrosa's avatar
jrosa committed
286
ifeq ($(TARGET), $(filter $(TARGET), x86.rtems x86.rtems_posix))
287
OBJS = $(USER_OBJS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(EXTERNAL_OBJECTS)
288
$(BINARY): generate-asn1-deployment target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS)
289
290
291
	$(make-exe)
	cp $(BINARY) binary

292
293
294
ifeq ($(NEED_TRANSPORT), yes)
run: $(BINARY)
	pidof qemu >/dev/null 2>&1 ; if [ $$?  -eq 0 ]; then \
295
		( sleep 5 ; qemu -net nic,model=ne2k_pci,macaddr=52:54:00:12:34:93 -net socket,connect=127.0.0.1:12345 -fda $(LOCAL_RUNTIME_PATH)/utils/x86-rtems-boot.img -hda fat:. -boot a -serial /dev/stdout ; )& \
296
297
		echo "Launching QEMU in connect mode" ; \
	else \
298
		qemu -net nic,model=ne2k_pci,macaddr=52:54:00:12:34:92 -net socket,listen=:12345 -fda $(LOCAL_RUNTIME_PATH)/utils/x86-rtems-boot.img -hda fat:. -boot a -serial /dev/stdout; \
299
300
301
		echo "Launching QEMU in listen mode" ; \
	fi
else
302
run: $(BINARY)
303
	qemu -fda $(LOCAL_RUNTIME_PATH)/utils/x86-rtems-boot.img -hda fat:. -boot a
304
305
endif #NEED_TRANSPORT
endif #TARGET=x86qemu
306

julien.delange's avatar
julien.delange committed
307
ifeq ($(TARGET), nds.rtems)
308
OBJS = $(USER_OBJS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(EXTERNAL_OBJECTS)
309
$(BINARY): generate-asn1-deployment target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS)
310
	$(CC) -o $(BINARY) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS)
julien.delange's avatar
julien.delange committed
311
312
endif

julien.delange's avatar
julien.delange committed
313
314

ifeq ($(TARGET), gumstix.rtems)
315
OBJS = $(USER_OBJS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(EXTERNAL_OBJECTS)
316
$(BINARY): generate-asn1-deployment target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS)
julien.delange's avatar
julien.delange committed
317
318
319
	$(make-exe)
endif

jdelange's avatar
jdelange committed
320
ifeq ($(TARGET), compcert)
321
$(BINARY):
322
	@if [ x"$(shell which ccomp)" = x ]; then \
323
324
		echo "Compcert not installed, exiting" ; \
	else \
yoogx's avatar
yoogx committed
325
		$(MAKE) generate-asn1-deployment compile-c-files compile-cpp-files compile-ada-files target-objects compile-po-hi $(GENERATED_OBJS) $(TARGET_OBJECTS); \
326
327
		$(CC) -o $(BINARY) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS); \
	fi
jdelange's avatar
jdelange committed
328
endif
julien.delange's avatar
julien.delange committed
329

330
ifeq ($(TARGET), $(filter $(TARGET), native bench linux32 linux64))
jdelange's avatar
jdelange committed
331
EXE=$(BINARY)
332
$(BINARY):
yoogx's avatar
yoogx committed
333
	$(MAKE) generate-asn1-deployment target-objects compile-c-files compile-cpp-files compile-ada-files compile-po-hi $(USER_OBJS) $(GENERATED_OBJS) $(TARGET_OBJECTS)
334
	$(LD) -o $(EXE) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(PO_HI_CPPOBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS)
jdelange's avatar
jdelange committed
335
endif
336
337
338
339

ifeq ($(TARGET), $(filter $(TARGET), win32))
EXE=$(BINARY).exe
$(BINARY):
yoogx's avatar
yoogx committed
340
	@if [ x"$(shell which i686-w64-mingw32-gcc)" = x ]; then \
341
342
		echo "Windows compiler is not installed in your system, exiting" ; \
	else \
yoogx's avatar
yoogx committed
343
		$(MAKE) generate-asn1-deployment target-objects compile-c-files compile-ada-files compile-po-hi $(USER_OBJS) $(GENERATED_OBJS) $(TARGET_OBJECTS) ; \
344
345
346
347
348
349
350
		$(LD) -o $(EXE) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS) ; \
	fi
endif

ifeq ($(TARGET), $(filter $(TARGET), linux32-xenomai-posix linux32-xenomai-native))
EXE=$(BINARY)
$(BINARY):
351
352
353
354
355
356
357
358
	@echo Xenomai target disabled

#@if [ x"$(shell which xeno-config)" = x ]; then \
#		echo "Xenomai is not installed in your system, exiting" ; \
#	else \
#		$(MAKE) generate-asn1-deployment target-objects compile-c-files compile-ada-files compile-po-hi $(USER_OBJS) $(GENERATED_OBJS) $(TARGET_OBJECTS) ; \
#		$(LD) -o $(EXE) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS) ; \
#	fi
359
360
endif

julien.delange's avatar
julien.delange committed
361
362
ifeq ($(TARGET), arm.dslinux)
$(BINARY): generate-asn1-deployment target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS) $(TARGET_OBJECTS)
363
	$(CC) -o $(BINARY) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS)
julien.delange's avatar
julien.delange committed
364
365
endif

julien.delange's avatar
julien.delange committed
366
367
ifeq ($(TARGET), x86.linuxtaste)
$(BINARY): check-linuxtaste generate-asn1-deployment target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS) $(TARGET_OBJECTS)
368
	$(CC) -o $(BINARY) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS)
julien.delange's avatar
julien.delange committed
369
370
endif

yoogx's avatar
yoogx committed
371
372
373
374
ifeq ($(TARGET), freertos)
OBJS = $(USER_OBJS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(EXTERNAL_OBJECTS)
$(BINARY): generate-asn1-deployment compile-po-hi compile-c-files compile-cpp-files $(USER_OBJS) $(GENERATED_OBJS) $(COMPILE_FREERTOS_OBJ)
	$(make-exe)
375
	$(LD) $(LDFLAGS) -o $(EXE).elf $(PO_HI_OBJS) $(GENERATED_OBJS) $(COMPILE_FREERTOS_OBJ) $(USER_OBJS)  $(USER_LIBS)
yoogx's avatar
yoogx committed
376
377
endif

378
%.o: %.cpp
379
	$(CXX) $(INCLUDE) $(CPPFLAGS) -c -o $@ $<
380

381
%.o: %.cc
382
	$(CXX) $(INCLUDE) $(CPPFLAGS) -c -o $@ $<
383

384
385
386
%.o: %.c
	$(CC) $(INCLUDE) $(CFLAGS) -c -o $@ $<

yoogx's avatar
yoogx committed
387
388
389
%.o: %.s
	$(AS) $(INCLUDE) $(CFLAGS) -c -o $@ $<

390
391
clean: #target-clean
	@-rm -f *~ *.o *.al temp.* *.metrix $(BINARY) $(BINARY).bin $(BINARY).bt $(BINARY).num $(BINARY).nxe b~*.* *.ali *.gcda *.gcno *.log *.xml
392
	@-rm -rf drivers
393
394
395
	if test ! "$(CLEANDIRS)" = "";  then \
	  rm -rf $(CLEANDIRS); \
	fi
396

jdelange's avatar
jdelange committed
397
generate-doc:
398
399
	@if [ -d generated-documentation ]; then rm  -rf generated-documentation ; fi
	@( DOXYBIN=`which doxygen 2>/dev/null` && if [ -x "$$DOXYBIN" ]; then ` which doxygen` doxygen.cfg ; fi ) || exit 0
jdelange's avatar
jdelange committed
400
401


402
403
404
405
406
ifdef USE_GPROF
gprof:
	./$(BINARY)
	gprof ./$(BINARY) > gprof.out
endif
407
408
409
410
411
412

################################################################################
# Generate Python wrapper for generated code, suppose the generated
# code uses the DLL target, and assumes a Linux OS for ld

python_wrapper:
413
	swig -python -I$(LOCAL_RUNTIME_PATH)/include -outdir . -o po_hi_c_python_wrap.c $(LOCAL_RUNTIME_PATH)/src/po_hi_c_python.i
414
415
416

	$(CC) -fPIC -c po_hi_c_python_wrap.c $(INCLUDE) $(CFLAGS) `python-config --includes`
	ld -dylib po_hi_c_python_wrap.o $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(PO_HI_CPPOBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS) `python-config --libs` -o _po_hi_c_python.so
417
418
419
420
421
422
423
424
425
426
427
428
429

################################################################################
# Execution of scripts to collect information for sonarqube.
# Note: it assumes a complete and running installation of sonarqube

sonar_run: clean
	   make all > build.log
	   make cppcheck
	   make --ignore-errors valgrind_xml
	   make sonarproperties
	   make coverage
	   sonar-scanner

yoogx's avatar
yoogx committed
430
431
432
433
export SONAR_PROJECT_DIR=$(PWD)/..
export SONAR_RESULTS_RELATIVE_PATH=$(shell echo "$(PWD)" | sed  's:$(SONAR_PROJECT_DIR)/::g')
export TEMPLATE_PATH=$(shell sed -e 's:polyorb-hi-c/.*:polyorb-hi-c:' <<< $(PWD))

434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
################################################################################
# sonarproperties: generation of configuration file for sonarqube
#

export SONAR_PROJECT_DIR=$(PWD)/..
export SONAR_RESULTS_RELATIVE_PATH=$(shell echo "$(PWD)" | sed  's:$(SONAR_PROJECT_DIR)/::g')

sonarproperties:
	cp $(RUNTIME_PATH)/utils/template_sonar-project.properties tmpsonar-project.properties
	sed -i 's/@PROJECT_KEY@/$(MAINAPP):$(BINARY)/g' tmpsonar-project.properties
	sed -i 's/@PROJECT_NAME@/$(MAINAPP)::$(BINARY)/g' tmpsonar-project.properties
	sed -i 's:@MASTER_PROJECT_DIR@:$(SONAR_PROJECT_DIR):g' tmpsonar-project.properties
	echo "#sources files for analysis" >> tmpsonar-project.properties
	echo "sonar.sources = $(PWD), $(LOCAL_RUNTIME_PATH)/src" >> tmpsonar-project.properties
	echo "#Include files" >> tmpsonar-project.properties
	echo "sonar.cxx.includeDirectories=$(LOCAL_RUNTIME_PATH)/include, $(LOCAL_RUNTIME_PATH)/include/silulator, $(LOCAL_RUNTIME_PATH)/include/monitoring, $(LOCAL_RUNTIME_PATH)/include/drivers, $(LOCAL_RUNTIME_PATH)/include/drivers/configuration, $(PWD)" >> tmpsonar-project.properties
	echo "#Reports to sonarqube" >> tmpsonar-project.properties
	sed  's:$(SONAR_PROJECT_DIR)/::g' <<< $(PWD)
	echo "sonar.cxx.cppcheck.reportPath=$(SONAR_RESULTS_RELATIVE_PATH)/cppcheck.xml" >> tmpsonar-project.properties
	echo "sonar.cxx.compiler.reportPath=$(SONAR_RESULTS_RELATIVE_PATH)/build.log" >> tmpsonar-project.properties
	echo "sonar.cxx.valgrind.reportPath=$(SONAR_RESULTS_RELATIVE_PATH)/valgrind*.xml" >> tmpsonar-project.properties
	echo "sonar.cxx.coverage.reportPath=$(SONAR_RESULTS_RELATIVE_PATH)/gcovr*.xml" >> tmpsonar-project.properties
	echo "sonar.cxx.coverage.itReportPat=$(SONAR_RESULTS_RELATIVE_PATH)/gcovr*.xml" >> tmpsonar-project.properties
	echo "sonar.cxx.coverage.overallReportPath=$(SONAR_RESULTS_RELATIVE_PATH)/gcovr*.xml" >> tmpsonar-project.properties
	cp tmpsonar-project.properties sonar-project.properties

################################################################################
# cppcheck: run the static code analyser, see http://cppcheck.sourceforge.net
#

CPPCHECK_FLAGS= -v --enable=all --xml-version=2 --std=c99 --platform=unix64 --rule-file=gnu.cfg --rule-file=std.cfg --rule-file=posix.cfg

cppcheck:
467
	cppcheck $(CPPCHECK_FLAGS) $(INCLUDE) -I$(LOCAL_RUNTIME_PATH)/include  $(POHI_CFLAGS) $(USER_CFLAGS) $(LOCAL_RUNTIME_PATH)/src $(PWD) 2> cppcheck.xml
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494

################################################################################
# valgrind: run the valgrind binary analyser
#

valgrind:
	cp $(RUNTIME_PATH)/utils/template_prof_gen.sh prof_gen.sh
	chmod +x+w prof_gen.sh
	sed -i 's/@PROGRAM_NAME@/$(BINARY)/g' prof_gen.sh
	sh prof_gen.sh --output-dir-name=valgrind_output --check=call
	sh prof_gen.sh --output-dir-name=valgrind_output --check=cache
	sh prof_gen.sh --output-dir-name=valgrind_output --check=mem

valgrind_xml:
	valgrind --tool=memcheck --leak-check=full --xml=yes --xml-file=valgrind_memcheck.xml ./$(BINARY)

valgrind_log:
	valgrind --tool=memcheck --leak-check=full --log-file=valgrind_memcheck.log ./$(BINARY)

################################################################################
# collect code coverage metrics

coverage:
	cp $(RUNTIME_PATH)/utils/template_lcov_gen.sh lcov_gen.sh
	chmod +x+w lcov_gen.sh
	sh lcov_gen.sh --output-dir-name=govcoverage_output
	gcovr -r $(SONAR_PROJECT_DIR) -s -x -o gcovr_report.xml