Makefile.common.in 18.1 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

8 9
# Regarding compilation warning flags:
# - -Wswitch-enum silent this flag, too verbose
10

11 12
GCC_GENERIC_CFLAGS= -g -Wall -Wextra -fdiagnostics-show-option -Wcast-align \
		    -Wswitch
13 14

all: build-node
15

16
LOCAL_RUNTIME_PATH=$(shell pwd)/../polyorb-hi-c
17

18 19 20 21 22 23 24
# 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
25
include $(LOCAL_RUNTIME_PATH)/make/Makefile.$(TARGET)
26 27 28
endif

# Include user-defined makefile
29 30
-include ../../userdefined.mk

yoogx's avatar
yoogx committed
31 32 33 34
ifneq ($(USE_CPP_LINKER),)
LD=$(LD_CPP)
endif

yoogx's avatar
yoogx committed
35
build-node: compile-node
yoogx's avatar
yoogx committed
36

37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
################################################################################
# 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

58
CFLAGS=$(POHI_CFLAGS) $(USER_CFLAGS) $(GCC_GENERIC_CFLAGS)
59
CPPFLAGS=$(CFLAGS) $(USER_CPPFLAGS)
yoogx's avatar
yoogx committed
60
LDFLAGS=$(TARGET_LDFLAGS) $(USER_LDFLAGS)
61

62 63 64 65 66 67
# Note: RTEMS expects user-provided libraries to be present in LD_LIBS
# macro. These will be added automatically to the linking phase
ifeq ($(TARGET), $(filter $(TARGET), leon3-scoc3 leon.rtems leon.rtems_posix air))
LD_LIBS=$(USER_LDFLAGS)
endif

68 69 70
ifdef USE_GPROF
CFLAGS+=-D__PO_HI_USE_GPROF -pg
endif
71 72 73 74 75

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

76 77 78 79
ifeq ($(NEED_TRANSPORT),yes)
CFLAGS+=-D__PO_HI_USE_TRANSPORT
endif

80
INCLUDE=-I. -I"${shell $(CYGPATH_W) "${LOCAL_RUNTIME_PATH}/include"}"
81

82
ifdef TARGET_INCLUDE
83
INCLUDE += $(TARGET_INCLUDE)
84 85
endif

86
ifdef USER_SOURCES_DIRS
87
INCLUDE+=$(USER_SOURCES_DIRS)
88 89
endif

90 91
INCLUDE+=$(USER_INCLUDE)

92 93 94 95 96 97
ifndef $(TARGET_NAME)
TARGET_NAME=$(TARGET)
endif

INCLUDE+=-DTARGET=$(TARGET_NAME)

98 99 100 101
################################################################################
# Files to be compiled

ifeq ($(NEED_TRANSPORT), yes)
102 103 104
   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	\
105 106 107 108 109 110 111 112 113 114 115
	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)		\
116 117
	po_hi_transport.o $(TARGET_TRANSPORT_SOURCES)

118 119
   GENERATED_OBJS = activity.o subprograms.o types.o request.o	\
	marshallers.o deployment.o naming.o main.o
120
else
121 122
   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	\
123
	po_hi_main.o
julien.delange's avatar
julien.delange committed
124

125
   GENERATED_OBJS = activity.o subprograms.o deployment.o types.o	\
126 127 128
	main.o
endif

jdelange's avatar
jdelange committed
129

130
ifeq ($(TARGET), $(filter $(TARGET), linux32 linux64 linux32-xenomai-posix linux32-xenomai-native linux_dll))
131
PO_HI_OBJS += po_hi_lua.o
jdelange's avatar
jdelange committed
132 133
endif

jdelange's avatar
jdelange committed
134
ifeq ($(USE_ASN1_DEPLOYMENT), yes)
135
generate-asn1-deployment:
jdelange's avatar
jdelange committed
136
	if [ ! -d ../asn-types ]; then mkdir -p ../asn-types ; fi
yoogx's avatar
yoogx committed
137
	mono $(which asn1.exe) -c -uPER $(ASN_SOURCES) -o ../asn-types
jdelange's avatar
jdelange committed
138
	for f in real.o asn1crt.o acn.o ber.o xer.o; do \
139
	   c_file="`basename $$f .o`.c"; \
jdelange's avatar
jdelange committed
140 141 142 143 144 145
	      $(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 \
146
	done
147

jdelange's avatar
jdelange committed
148
GENERATED_OBJS += real.o asn1crt.o xer.o ber.o acn.o $(ASN_OBJS)
149
LDFLAGS += -lm
150
CFLAGS+=-DPO_HI_USE_ASN1 -I../../ -I../asn-types/
151

152 153 154 155 156
else
generate-asn1-deployment:

endif

157 158 159 160 161 162 163 164 165
################################################################################
# Simulink

ifdef SIMULINK_NODE
   PO_HI_OBJS += po_hi_simulink.o
endif

ifdef SIMULINK_DIR
   INCLUDE += -I$(SIMULINK_DIR) \
166 167 168 169 170
	      -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
171 172 173 174 175 176 177 178
   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
179 180
INCLUDE += -I$(SCADE_DIR)
USER_OBJS += $(SCADE_DIR)/*.o
181 182
endif

julien.delange's avatar
julien.delange committed
183 184 185 186 187 188 189 190
################################################################################
# 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

191 192 193
################################################################################
# TASTE-RUNTIME-MONITORING

194
ifeq ($(MONITORING), true)
195

196
MONITORING_OBJS = trace_manager.o
197 198
PO_HI_OBJS += $(MONITORING_OBJS)
CFLAGS += -DMONITORING
199 200 201 202 203
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
204 205 206 207 208 209 210

endif

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

211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
################################################################################
# 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

232 233 234 235 236 237 238
################################################################################
# General compilation rules

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

240 241 242
ifdef SCADE_DIR
	(cd $(SCADE_DIR) && for v in `ls *.c`; do $(CC) -c $$v; done)
endif
243

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

255 256 257 258
	for f in $(PO_HI_CPPOBJS); do \
	   c_file="`basename $$f .o`.cc"; \
	   c_file_dirname="`dirname $$f`"; \
      if [ -n "$$c_file_dirname" ]; then \
259
	 if [ ! -d $$c_file_dirname ]; then mkdir -p $$c_file_dirname ; fi ; \
260
	      $(CXX) $(INCLUDE) $(CPPFLAGS) -c -o $$f '$(LOCAL_RUNTIME_PATH)/src/'$$c_file_dirname'/'$$c_file  || exit 1 ; \
261
      else \
262
	      $(CXX) $(INCLUDE) $(CPPFLAGS) -c -o $$f '$(LOCAL_RUNTIME_PATH)/src/'$$c_file || exit 1 ; \
263 264 265
      fi ; \
	done

266
compile-node: $(BINARY)
267

yoogx's avatar
yoogx committed
268
ifeq ($(TARGET), $(filter $(TARGET), leon3-scoc3 leon.rtems leon.rtems_posix air))
269 270
OBJS = $(USER_OBJS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(EXTERNAL_OBJECTS)
$(BINARY):
yoogx's avatar
yoogx committed
271
	if [  x"$$RTEMS_MAKEFILE_PATH" = x"" ]; then \
272 273
		echo "Please define the RTEMS_MAKEFILE_PATH variable, exiting" ; \
	else \
274
		$(MAKE) generate-asn1-deployment compile-c-files compile-cpp-files compile-ada-files target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS) $(BINARY).exe ;\
275
	fi
276 277 278 279

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

julien.delange's avatar
julien.delange committed
280 281
endif

282
### The following is to be revisited
283
ifeq ($(TARGET), leon3-xm3)
284
OBJS = $(USER_OBJS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(EXTERNAL_OBJECTS)
285
$(BINARY):
286
	@echo XtratuM target disabled
287
endif
288 289 290 291 292 293
#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

294 295


296
ifeq ($(TARGET), $(filter $(TARGET), x86.rtems x86.rtems_posix))
297
OBJS = $(USER_OBJS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(EXTERNAL_OBJECTS)
298
$(BINARY): generate-asn1-deployment target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS)
299 300 301
	$(make-exe)
	cp $(BINARY) binary

302 303 304
ifeq ($(NEED_TRANSPORT), yes)
run: $(BINARY)
	pidof qemu >/dev/null 2>&1 ; if [ $$?  -eq 0 ]; then \
305
		( 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 ; )& \
306 307
		echo "Launching QEMU in connect mode" ; \
	else \
308
		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; \
309 310 311
		echo "Launching QEMU in listen mode" ; \
	fi
else
312
run: $(BINARY)
313
	qemu -fda $(LOCAL_RUNTIME_PATH)/utils/x86-rtems-boot.img -hda fat:. -boot a
314 315
endif #NEED_TRANSPORT
endif #TARGET=x86qemu
316

julien.delange's avatar
julien.delange committed
317
ifeq ($(TARGET), nds.rtems)
318
OBJS = $(USER_OBJS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(EXTERNAL_OBJECTS)
319
$(BINARY): generate-asn1-deployment target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS)
320
	$(CC) -o $(BINARY) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS)
julien.delange's avatar
julien.delange committed
321 322
endif

julien.delange's avatar
julien.delange committed
323 324

ifeq ($(TARGET), gumstix.rtems)
325
OBJS = $(USER_OBJS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(EXTERNAL_OBJECTS)
326
$(BINARY): generate-asn1-deployment target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS)
julien.delange's avatar
julien.delange committed
327 328 329
	$(make-exe)
endif

330
ifeq ($(TARGET), compcert)
331
$(BINARY):
332
	@if [ x"$(shell which ccomp)" = x ]; then \
333 334
		echo "Compcert not installed, exiting" ; \
	else \
yoogx's avatar
yoogx committed
335
		$(MAKE) generate-asn1-deployment compile-c-files compile-cpp-files compile-ada-files target-objects compile-po-hi $(GENERATED_OBJS) $(TARGET_OBJECTS); \
336 337
		$(CC) -o $(BINARY) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS); \
	fi
338
endif
julien.delange's avatar
julien.delange committed
339

340
ifeq ($(TARGET), $(filter $(TARGET), native bench linux32 linux64 linux_dll))
341
EXE=$(BINARY)$(EXEEXT)
342
$(BINARY): generate-asn1-deployment target-objects compile-c-files compile-cpp-files compile-ada-files compile-po-hi $(USER_OBJS) $(GENERATED_OBJS) $(TARGET_OBJECTS)
343
	$(LD) -o $(EXE) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(PO_HI_CPPOBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS)
jdelange's avatar
jdelange committed
344
endif
345 346 347 348

ifeq ($(TARGET), $(filter $(TARGET), win32))
EXE=$(BINARY).exe
$(BINARY):
349
	@if [ x"$(shell which i686-w64-mingw32-gcc)" = x ]; then \
350 351
		echo "Windows compiler is not installed in your system, exiting" ; \
	else \
352
		$(MAKE) generate-asn1-deployment target-objects compile-c-files compile-ada-files compile-po-hi $(USER_OBJS) $(GENERATED_OBJS) $(TARGET_OBJECTS) ; \
353 354 355 356 357 358 359
		$(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):
360 361 362 363 364 365 366 367
	@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
368 369
endif

370 371
ifeq ($(TARGET), arm.dslinux)
$(BINARY): generate-asn1-deployment target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS) $(TARGET_OBJECTS)
372
	$(CC) -o $(BINARY) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS)
373 374
endif

julien.delange's avatar
julien.delange committed
375 376
ifeq ($(TARGET), x86.linuxtaste)
$(BINARY): check-linuxtaste generate-asn1-deployment target-objects compile-po-hi $(USER_OBJS) $(GENERATED_OBJS) $(TARGET_OBJECTS)
377
	$(CC) -o $(BINARY) $(EXTERNAL_OBJECTS) $(PO_HI_OBJS) $(GENERATED_OBJS) $(USER_OBJS) $(LDFLAGS)
julien.delange's avatar
julien.delange committed
378 379
endif

yoogx's avatar
yoogx committed
380 381 382 383
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)
384
	$(LD) $(LDFLAGS) -o $(EXE).elf $(PO_HI_OBJS) $(GENERATED_OBJS) $(COMPILE_FREERTOS_OBJ) $(USER_OBJS)  $(USER_LIBS)
yoogx's avatar
yoogx committed
385 386
endif

387
%.o: %.cpp
388
	$(CXX) $(INCLUDE) $(CPPFLAGS) -c -o $@ $<
389

390
%.o: %.cc
391
	$(CXX) $(INCLUDE) $(CPPFLAGS) -c -o $@ $<
392

393 394 395
%.o: %.c
	$(CC) $(INCLUDE) $(CFLAGS) -c -o $@ $<

yoogx's avatar
yoogx committed
396 397 398
%.o: %.s
	$(AS) $(INCLUDE) $(CFLAGS) -c -o $@ $<

399 400
clean: #target-clean
	@-rm -f *~ *.o *.al temp.* *.metrix $(BINARY) $(BINARY).bin $(BINARY).bt $(BINARY).num $(BINARY).nxe b~*.* *.ali *.gcda *.gcno *.log *.xml
401
	@-rm -rf drivers
402 403 404
	if test ! "$(CLEANDIRS)" = "";  then \
	  rm -rf $(CLEANDIRS); \
	fi
405

jdelange's avatar
jdelange committed
406
generate-doc:
407 408
	@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
409 410


411 412 413 414 415
ifdef USE_GPROF
gprof:
	./$(BINARY)
	gprof ./$(BINARY) > gprof.out
endif
416 417 418 419 420 421

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

python_wrapper:
422
	swig -python -I$(LOCAL_RUNTIME_PATH)/include -outdir . -o po_hi_c_python_wrap.c $(LOCAL_RUNTIME_PATH)/src/po_hi_c_python.i
423 424 425

	$(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
426 427 428 429 430 431 432 433 434 435 436 437 438

################################################################################
# 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
439 440 441 442
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))

443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475
################################################################################
# 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:
476
	cppcheck $(CPPCHECK_FLAGS) $(INCLUDE) -I$(LOCAL_RUNTIME_PATH)/include  $(POHI_CFLAGS) $(USER_CFLAGS) $(LOCAL_RUNTIME_PATH)/src $(PWD) 2> cppcheck.xml
477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503

################################################################################
# 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